Splitter

Bases: Node

Splitter class representing a processing node that can unpack an incoming item and send it to multiple outgoing edges in a factory simulation.

Parameters:
  • state (str) –

    Current state of the node. One of :

    • SETUP_STATE: Initial setup phase before Splitter 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 split.

  • work_capacity (int, default: 1 ) –

    Number of worker threads that can process items concurrently. It should be greater than 0.

  • 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).
  • in_edge_selection (None or str or callable, default: 'FIRST_AVAILABLE' ) –

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

    • None: None: Used when 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 edge.
      • "ROUND_ROBIN": Selects edges in a round-robin manner.
      • "FIRST_AVAILABLE": Selects the first out edge that can give an item.
    • callable: A function that returns an edge index.
  • 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 Splitter node represents components that unpakcs an item (pallet) from an incoming edge. It can have multiple incoming edges and multiple outgoing edge. Edge from which the item comes in and the edge to which processed item is pushed is decided using the method specified in the parameter in_edge_selection and out_edge_selection. Splitter will transition through the states- SETUP_STATE, PROCESSING_STATE, IDLE_STATE and BLOCKED_STATE. It unpacks the items and pushes it to one of the outgoing edges one by one. The Splitter 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 Splitter and waits until the out edge can accept the item. If blocking=False, the Splitter will discard the item if the out edge is full and cannot accept the item that is being pushed by the machine.

Raises:
  • AssertionError

    If the Splitter has no input or output edges.

Output performance metrics

The key performance metrics of the 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 it has unpacked from a pallet.
num_item_discarded        : Total number of items Splitter has discarded.
num_pallet_processed      : Total number of pallets it has unpacked.
num_pallet_discarded      : Total number of unpacked pallets Splitter has 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.