Skip to main content

A discrete-event simulation framework for intralogistics and operations management

Project description

Simulatte

Simulatte

PyPI Python License codecov Docs

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

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, ConWIP, 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 metrics collectors: plug in your own real-time or time-series collectors

Time-Series Analysis

  • Built-in collectors for WIP, throughput, job count, lateness
  • Matplotlib integration: plot_wip(), plot_throughput(), plot_lateness()
  • Custom time-series collectors via simple protocol

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

Logging

  • Per-component event logging (Server, ShopFloor, Router, Warehouse, AGV)
  • JSON or text format output
  • 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

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:

@software{Mezzogori2025Simulatte,
  author = {Mezzogori, Davide and Mercogliano, Nicola},
  title = {{Simulatte}: A discrete-event simulation framework for production planning and control and intralogistics},
  year = {2025},
  url = {https://github.com/dmezzogori/simulatte},
  note = {Python package version 0.8.0}
}

Contributing

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


License

Simulatte is released under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

simulatte-0.8.0.tar.gz (100.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

simulatte-0.8.0-py3-none-any.whl (90.4 kB view details)

Uploaded Python 3

File details

Details for the file simulatte-0.8.0.tar.gz.

File metadata

  • Download URL: simulatte-0.8.0.tar.gz
  • Upload date:
  • Size: 100.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","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}

File hashes

Hashes for simulatte-0.8.0.tar.gz
Algorithm Hash digest
SHA256 fa9b082a45053442a4cffdbcf2a606243ed88c0f1aeeb02b1ff6b988fc5519d7
MD5 10538525f00c0546e11df64bce0202f5
BLAKE2b-256 f2d1f842fccd6eda10e7c01a93fcac4d4d1ac0aa6ca6a54d695e958afb13ad22

See more details on using hashes here.

File details

Details for the file simulatte-0.8.0-py3-none-any.whl.

File metadata

  • Download URL: simulatte-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 90.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","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}

File hashes

Hashes for simulatte-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a6d9f0ac59f6e8f5dbb0a255907c03e1cdc46d492e94ca9ed64b5762dce942d9
MD5 02cb2f360ae7ebbd70ba114202e4d9f7
BLAKE2b-256 8794fe8b6f76b08aaadd152e448b66bf9b93bbebafe3e277daa6e8f7c02c79c3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page