Combiner

Bases: Node

Combiner class representing a processing node in a factory simulation. Inherits from the Node class.The combiner can have multiple input edges and a multiple output edges. It gets items from the input edges and packs them into a pallet or box and pushes it to the output edge.

Parameters:
  • state (str) –

    Current state of the combiner node. One of :

    • SETUP_STATE: Initial setup phase before combiner starts to operate.
    • IDLE_STATE: Worker threads waiting to receive items.
    • PROCESSING_STATE: Actively processing items.
    • BLOCKED_STATE: When all the worker threads are waiting to push the processed item but the out going edge is full.
  • blocking (bool, default: True ) –

    If True, the source waits until it can put an item into the out edge. If False, it discards the item if the out edge is full and cannot accept the item that is being pushed by the combiner.

  • processing_delay ((None, int, float, Generator, Callable), default: 0 ) –

    Delay for processing items. Can be:

    • None: Used when the processing time depends on parameters of the node object (like current state of the object) or environment.
    • int or float: Used as a constant delay.
    • Generator: A generator function yielding delay values over time.
    • Callable: A function that returns a delay (int or float).
  • out_edge_selection (None or str or callable, default: 'FIRST_AVAILABLE' ) –

    Criterion or function for selecting the out edge. Options include "RANDOM", "ROUND_ROBIN", "FIRST_AVAILABLE".

    • None: None: Used when out edge selction depends on parameters of the node object (like current state of the object) or environment.
    • str: A string that specifies the selection method.
      • "RANDOM": Selects a random out edge in the out_edges list.
      • "ROUND_ROBIN": Selects out edges in a round-robin manner.
      • "FIRST_AVAILABLE": Selects the first out edge that can accept an item.
    • callable: A function that returns an edge index.
Behavior

The combiner node represents components that process or modify the items that flow in the simulation model. It can have multiple incoming edges and multiple outgoing edge. Edge to which processed item is pushed is decided using the method specified in the parameter out_edge_selection. Combiner will transition through the states- SETUP_STATE, PROCESSING_STATE, IDLE_STATE and BLOCKED_STATE. The combiner has a blocking behavior if blocking=True and gets blocked when all its worker threads have processed items and the out edge is full and cannot accept the item that is being pushed by the combiner and waits until the out edge can accept the item. If blocking=False, the combiner will discard the item if the out edge is full and cannot accept the item that is being pushed by the combiner.

Raises:
  • AssertionError

    If the combiner has no input or output edges.

Output performance metrics: The key performance metrics of the combiner node is captured in stats attribute (dict) during a simulation run.

last_state_change_time    : Time when the state was last changed.
num_item_processed        : Total number of items generated.
num_item_discarded        : Total number of items discarded.
total_time_spent_in_states: Dictionary with total time spent in each state.

update_state(new_state, current_time)

Update node state and track the time spent in the previous state.

Parameters:
  • i (int) –

    The index of the worker thread to update the state for.

  • new_state (str) –

    The new state to transition to. Must be one of "SETUP_STATE", "GENERATING_STATE", "BLOCKED_STATE".

  • current_time (float) –

    The current simulation time.

add_in_edges(edge)

Adds an in_edge to the node. Raises an error if the edge already exists in the in_edges list.

Parameters:
  • edge (Edge Object) ) –

    The edge to be added as an in_edge.

add_out_edges(edge)

Adds an out_edge to the node. Raises an error if the edge already exists in the out_edges list.

Parameters:
  • edge (Edge Object) ) –

    The edge to be added as an out_edge.