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 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: 'False' ) –

    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.

  • work_capacity (int, default: 1 ) –

    Maximum number of items that can be processed simultaneously.

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

    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).
  • target_quantity_of_each_item (list, default: [1] ) –

    List with target quantity of each item to be combined where index correspond to the input edge. The first index corresponds to the edge that supplies pallet/box and it is always 1

  • 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: 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 joints together or packs items from multiple in_edges. It can have multiple incoming edges and multiple outgoing edge. User can specify a list in_edges and the number of quantity that has to be packed from each of the in_edges as a list. The first item corresponds to the pallet used to put these packed items and the corresponding entry in the target_quantity_of_each_item list is 1. Edge to which packed 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. It waits until the out edge becomes available to push the item. If blocking=False, it 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 atleast 1 output edge.

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 that is put into pallets.
num_pallet_processed      : Total number of pallets packed.
num_pallet_discarded      : Total number of packed pallets discarded.
total_time_spent_in_states: Dictionary with total time spent in each state.

update_state(i, new_state, current_time)

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

Parameters:
  • i (int) –

    Index of the worker whose state is being updated.

  • 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.