Multi-run experiments
Goal: run the same stochastic system multiple times (different seeds) and collect results.
Runner handles:
- seeding
random - building a fresh
Environmentfor each run - optional multiprocessing (
parallel=True) - a
tqdmprogress bar (auto-enabled on TTY; override withprogress=True/False)
Example: push system with stochastic arrivals
from simulatte.builders import build_immediate_release_system
from simulatte.runner import Runner
def builder(*, env):
return build_immediate_release_system(env, n_servers=6, arrival_rate=1.5, service_rate=2.0)
def extract(system):
_psp, servers, shopfloor, _router = system
avg_util = sum(s.utilization_rate for s in servers) / len(servers)
return {
"jobs_done": len(shopfloor.jobs_done),
"avg_utilization": avg_util,
"avg_time_in_system": shopfloor.average_time_in_system,
}
runner = Runner(
builder=builder,
seeds=range(10),
parallel=False,
# progress=None (default) auto-enables on TTY; set False to disable
extract_fn=extract,
)
results = runner.run(until=1_000)
print(results)
Parallel runs
If you turn on multiprocessing, keep your code in a if __name__ == "__main__": guard.
if __name__ == "__main__":
runner = Runner(builder=builder, seeds=range(20), parallel=True, extract_fn=extract)
print(runner.run(until=1_000))