Scheduling Package
The scheduling package provides batch process scheduling tools including State-Task Networks for production scheduling optimization.
Note
This is part of the modern modular structure of SPROCLIB.
Submodules
State-Task Network
State-Task Network for SPROCLIB
This module implements State-Task Network (STN) scheduling for batch processes with material balances, equipment constraints, and optimization.
Author: Thorsten Gressling <gressling@paramus.ai> License: MIT License
- class sproclib.scheduling.state_task_network.StateTaskNetwork(name='STN')[source]
Bases:
objectState-Task Network for batch process scheduling.
- Parameters:
name (str)
- add_state(name, capacity=inf, initial_amount=0.0, price=0.0, is_product=False)[source]
Add a state (material) to the network.
- add_task(name, duration, inputs, outputs, suitable_units, variable_cost=0.0)[source]
Add a task to the network.
- Parameters:
- add_unit(name, capacity=1.0, unit_cost=0.0, availability=1.0)[source]
Add an equipment unit to the network.
- optimize_schedule(time_horizon, objective='profit', demand=None, method='greedy')[source]
Optimize production schedule.
- Parameters:
- Returns:
Optimized schedule
- Return type:
Quick Usage
Batch Process Scheduling:
from scheduling.state_task_network import StateTaskNetwork
# Create State-Task Network
stn = StateTaskNetwork("Batch Plant")
# Add states (materials)
stn.add_state("Raw_A", capacity=1000, initial_amount=500, price=10)
stn.add_state("Raw_B", capacity=800, initial_amount=300, price=15)
stn.add_state("Product", capacity=500, initial_amount=0, price=50)
# Add tasks (operations)
stn.add_task(
name="React",
duration=2.0,
inputs={"Raw_A": 2.0, "Raw_B": 1.0},
outputs={"Product": 1.0},
suitable_units=["Reactor1", "Reactor2"]
)
# Add units (equipment)
stn.add_unit("Reactor1", capacity=100, unit_cost=50)
stn.add_unit("Reactor2", capacity=150, unit_cost=75)
# Optimize schedule
result = stn.optimize_schedule(
time_horizon=24,
objective='profit',
demand={"Product": 200}
)
# Visualize schedule
stn.plot_schedule()
print(f"Total profit: ${result['profit']:.2f}")
print(f"Schedule feasible: {result['feasible']}")