Skip to content

Create a Process Simulation

This section explains how to create processes within a simulation context, including details regarding mandatory fields, optional fields, and examples demonstrating different process configurations.

Fields Explanation

Mandatory Fields

  • prob_distribution (Probability Distribution): Corresponds to a probability distribution from the Phitter distribution list.
  • parameters (Distribution Parameters): Provides the numerical parameters that define the selected probability distribution.
  • process_id (Process Identifier): Establishes a unique name or label for the process.

INFO

Any suitable name can be assigned to process_id.

Conditional Fields

Depending on the simulation structure, either new_branch or previous_ids is used:

  • new_branch: Indicates that this process starts a new branch in the simulation, implying no preceding processes.
  • previous_ids: Lists one or more processes that precede the current process in the simulation. If at least one process exists before the current one, specify it (or them) here.

Optional Fields

  • number_of_products: Defaults to 1. Specifies how many products or items are handled in this process.
  • number_of_servers: Defaults to 1. Defines how many servers or parallel channels are available to process items.

Creating Different Processes

Processes can be added either as new branches (with no preceding process) or as continuations of one or more existing processes.

Process Without a Preceding Process

A process that initiates a new branch and does not depend on any prior processes can be added by setting new_branch=True. For example:

python
simulation_example.add_process(
    prob_distribution="normal",
    parameters={"mu": 5, "sigma": 2},
    process_id="first_process",
    new_branch=True,
)

In this example, new_branch is enabled to indicate that no preceding process is referenced. Additional options, such as adjusting the number of products and servers, may also be included:

python
simulation_example.add_process(
    prob_distribution="normal",
    parameters={"mu": 5, "sigma": 2},
    process_id="first_process_with_optional",
    number_of_products=10,
    number_of_servers=3,
    new_branch=True,
)

Process With a Preceding Process

A process that follows one or more existing processes is added by listing those previous process identifiers in previous_ids. For instance:

python
simulation_example.add_process(
    prob_distribution="exponential",
    parameters={"lambda": 4},
    process_id="second_process",
    previous_ids=["first_process"],
)

Here, previous_ids is employed to specify that this new process follows first_process. Any number of preceding processes may be referenced if needed:

python
simulation_example.add_process(
    prob_distribution="exponential",
    parameters={"lambda": 4},
    process_id="second_process_with_optional",
    number_of_products=10,
    number_of_servers=3,
    previous_ids=["first_process", "first_process_with_optional"],
)

TIP

Any number of previous_ids can be included to link processes that must finish before this one begins.

Complete Process Example

The sequence of calls to add_process determines how processes connect. In the following example, a complete simulation is constructed by adding several processes, each either starting a new branch or referencing one or more preceding processes:

WARNING

The order in which processes are added is significant; each new process must reference identifiers already defined if it depends on them.

python
# Create a simulation process instance
simulation = simulation.ProcessSimulation()

# Add a new process without a preceding process
simulation.add_process(
    prob_distribution="normal",
    parameters={"mu": 5, "sigma": 2},
    process_id="first_process",
    number_of_products=10,
    number_of_servers=3,
    new_branch=True,
)

# Add a new process with a preceding process
simulation.add_process(
    prob_distribution="exponential",
    parameters={"lambda": 4},
    process_id="second_process",
    previous_ids=["first_process"],
)

# Add another process with a preceding process
simulation.add_process(
    prob_distribution="gamma",
    parameters={"alpha": 15, "beta": 3},
    process_id="third_process",
    previous_ids=["first_process"],
)

# Add a new process that starts another branch
simulation.add_process(
    prob_distribution="exponential",
    parameters={"lambda": 4.3},
    process_id="fourth_process",
    new_branch=True,
)

# Add a process with multiple preceding processes
simulation.add_process(
    prob_distribution="beta",
    parameters={"alpha": 1, "beta": 1, "A": 2, "B": 3},
    process_id="fifth_process",
    previous_ids=["second_process", "fourth_process"],
)

# Add a final process with multiple preceding processes
simulation.add_process(
    prob_distribution="normal",
    parameters={"mu": 15, "sigma": 2},
    process_id="sixth_process",
    previous_ids=["third_process", "fifth_process"],
)

Once all processes have been defined, the simulation is ready to run and evaluate the overall process flow.