Skip to main content

Simulatte

Simulatte

PyPI Python License codecov Docs DOI

Discrete-event simulation framework for production planning and control and intralogistics, built on SimPy.

Watch Simulatte in 60 seconds
Simulatte in 60 seconds. Click to watch on simulatte.dev.

Note: Simulatte is under active development. All APIs — including those outside simulatte.experimental — should be considered unstable and may change between releases without prior deprecation. Pin your dependency to a specific version if you need stability.


What is Simulatte?

Simulatte is a Python library for simulating manufacturing job-shops with integrated intralogistics. It models production servers, warehouses, AGVs, and material flow in a unified framework. Use it to evaluate scheduling policies, analyze bottlenecks, and study system performance under stochastic conditions.

The library provides ready-to-use components for common manufacturing scenarios while remaining extensible for custom requirements. Whether you're researching release control policies, optimizing warehouse layouts, or teaching discrete-event simulation, Simulatte offers a clean API built on proven SimPy foundations.


Features

Job-Shop Scheduling

  • Multi-server routing with configurable processing times
  • Due dates and tardiness tracking
  • Queue time and utilization metrics per server

Release Control

  • Pre-Shop Pool (PSP) for workload-based job release
  • Built-in policies: Immediate Release, LumsCor, SLAR, SLAR-Limit, DRACO, ConWIP, and Continuous Release
  • Event callbacks (psp.on_arrival, shopfloor.on_processing_end) and composable triggers
  • Starvation avoidance mechanisms

Extensibility

  • Operation hooks: sync or generator-based, before/after processing (e.g., setup times, dispatching)
  • Event callbacks: on_processing_end, on_job_finished, on_arrival for reactive logic
  • Dispatcher protocol: one-call wiring of multi-event controllers via attach_dispatcher()
  • WIP strategies: Standard and Corrected workload estimation
  • Custom collectors: subclass Collector to compute your own metrics from events on the event bus

Time-Series Analysis

  • Built-in collectors for WIP, throughput, job count, lateness
  • Matplotlib integration: plot_wip(), plot_throughput(), plot_lateness()
  • Window-aware KPIs (ShopFloorKPIs, FleetKPIs) with a configurable warm-up

Reinforcement Learning Integration (experimental)

  • Gymnasium wrapper (SimulatteEnv): subclass a single ABC to turn any simulation into a Gymnasium environment (from simulatte.experimental.gymnasium import SimulatteEnv)
  • Can be used with Stable-Baselines3, CleanRL, and other Gymnasium-compatible RL libraries
  • Built-in lifecycle guards, seeding support, and resource cleanup

Intralogistics

  • Warehouse with per-SKU inventory, finite pick/put slots, input/output bays
  • AGV fleet with trapezoidal speed profiles, battery lifecycle, and charging stations
  • FleetCoordinator orchestrating dispatch, travel, pick, transit, deliver, reposition, and charge
  • Pluggable policies: dispatch (NearestIdleStrategy, RoundRobinStrategy), repositioning, replenishment (ReorderPointPolicy), load recovery
  • Time-series metrics with plot_fleet_utilization(), plot_throughput(), plot_pending_orders(), plot_inventory()
  • Three progressive examples: simple setup, manufacturing plant floor, multi-warehouse distribution hub

Events, Traces and Logging

  • Typed events with state deltas for every component (Server, ShopFloor, Router, Warehouse, AGV, traffic, charging), delivered on a per-environment event bus
  • Per-environment RNG streams derived from the seed, a semantic digest and a run manifest for reproducibility
  • TraceRecorder writes a run to a seekable trace file; Trace replays, seeks and verifies it
  • Log sinks: text or JSON output, SQLite, and a queryable in-memory history with filtering by component, level, time range

Multi-Run Experiments

  • Runner class for stochastic experiments across multiple seeds
  • Automatic seed management for reproducibility
  • Parallel execution with multiprocessing support
  • Progress bars via tqdm

Installation

pip install simulatte

or with uv:

uv add simulatte

The base install includes production and intralogistics simulation, collectors, traces, and Runner. Plotting and reinforcement learning are optional:

pip install "simulatte[plot]"  # Collector plot_* methods and plotting examples
pip install "simulatte[rl]"    # Experimental SimulatteEnv Gymnasium wrapper
pip install "simulatte[all]"   # Both integrations

With uv, use uv add "simulatte[plot]", uv add "simulatte[rl]", or uv add "simulatte[all]". Starting in 0.13, existing applications that plot or use SimulatteEnv must select the corresponding extra. Collecting time series and KPIs does not require plotting dependencies.


Quick Start

from simulatte.environment import Environment
from simulatte.server import Server
from simulatte.shopfloor import ShopFloor
from simulatte.job import ProductionJob

# Create simulation environment
env = Environment()
shopfloor = ShopFloor(env=env)
server = Server(env=env, capacity=1, shopfloor=shopfloor)

# Create a job with routing through the server
job = ProductionJob(
    env=env,
    sku="A",
    servers=[server],
    processing_times=[5.0],
    due_date=100,
)

# Run simulation
shopfloor.add(job)
env.run()

# Analyze results
print(f"Makespan: {job.makespan}")
print(f"Server utilization: {server.utilization_rate:.1%}")

AI Coding Agent Skill

Simulatte ships a skill for AI coding agents (Claude Code, Cursor, Windsurf, etc.) that helps them write correct Simulatte simulations — from choosing a release policy to running multi-seed experiments.

Install it with the Vercel Skills CLI:

npx skills add https://github.com/dmezzogori/simulatte/tree/main/skills/simulatte-dev

Once installed, invoke it with /simulatte-dev or let the agent auto-trigger it when working with Simulatte code.


Documentation

Full documentation is available at simulatte.dev.


Citation

If you use Simulatte in your research, please cite it via its Zenodo record. The concept DOI 10.5281/zenodo.21027366 always resolves to the latest version; cite the version DOI 10.5281/zenodo.21027367 to pin v0.12.0.

@software{Mezzogori2026Simulatte,
  author  = {Mezzogori, Davide and Mercogliano, Nicola},
  title   = {{Simulatte}: A discrete-event simulation framework for production planning and control and intralogistics},
  year    = {2026},
  version = {0.14.0},
  doi     = {10.5281/zenodo.21027366},
  url     = {https://doi.org/10.5281/zenodo.21027366}
}

Contributing

Contributions are welcome — please read CONTRIBUTING.md for the workflow (branching, PR requirements, merge process).


License

Simulatte is released under the MIT License.

Metadata

Release files for simulatte 0.17.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for simulatte 0.17.0
File Size Uploaded
simulatte-0.17.0.tar.gz 1.3 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for simulatte 0.17.0
File Interpreter ABI Platform
simulatte-0.17.0-py3-none-any.whl Python 3 none any Details

Total release size: 2.6 MB

Release files / simulatte-0.17.0.tar.gz

Download URL simulatte-0.17.0.tar.gz
Size 1.3 MB
Tags Source
SHA-256 checksum
How to use checksums
f5a0770a659880d2e05ee287807de0518c081537e4057cf210029cf9fd777443
BLAKE2b-256 checksum
How to use checksums
631e3b16626f8e1ffb56f15abbacc907db94974cf2bda2563ca9a6643ac987d3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / simulatte-0.17.0-py3-none-any.whl

Download URL simulatte-0.17.0-py3-none-any.whl
Size 1.3 MB
Tags Python 3
SHA-256 checksum
How to use checksums
916d0f0eccf71f331841c06734ac72984e6d676f418894b2776c46d5ee041883
BLAKE2b-256 checksum
How to use checksums
8d0858c1c75d999553697ce4d0cd5c3a1d6d29f54a9275129531455d4d34c571
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page