Discrete event simulation in using synchronous Python.
Project description
DESimpy
A synchronous discrete event simulation (DES) framework in Python (DESimpy).
Overview
DESimPy provides the core components of DES.
Processes in DESimPy are defined by methods owned by Python objects inherited from the Event
abstract base class. These processes can be used to model system-level or component level changes in a modelled system. Such systems might include customers or patients flowing through services, vehicles in traffic, or agents competing in games.
DESimPy implements time-to-event simulation where the next event in a schedule is processed next regardless of the amount of time in the simulated present to that event. This constrasts with "time sweeping" in which a step size is used to increment foreward in time. It is possible to combine time-to-event with time sweeping (see Palmer & Tian 2021), however this package does not provide any explicit support for that.
Installation
pip install desimpy
Quickstart
Here is a small example to show the basic logic. This example is the simple clock process presented in the SimPy documentation.
from desimpy import EventScheduler
def clock(env: EventScheduler, name: str, tick: int | float) -> None:
"""Clock simulation process."""
def action() -> None:
"""Schedule next tick of the clock."""
print(name, env.current_time)
env.timeout(tick, action)
env.timeout(0, action=action)
env = EventScheduler()
clock(env, "fast", 0.5)
clock(env, "slow", 1)
event_log = env.run_until_max_time(2)
Design
- Avoid performance overhead of coroutines.
- Do not change the past (i.e. event log should not be changed during simulation).
- Event schedule ordering is purely temporal order of events elapsing.
- Built-in event logging.
- Can be turned off for better performance.
- Future schedule is mutable to simulate interruptions.
- Activating events.
- Deactivating events.
- Cancelling events.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file desimpy-0.47.0.tar.gz
.
File metadata
- Download URL: desimpy-0.47.0.tar.gz
- Upload date:
- Size: 15.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ea11ba174ce7fb28e47f0392a4a6fac8fa1b2f83eb67beb25200328116e1a62b |
|
MD5 | 2c58a3b180ba63908659425e2cb0f2e8 |
|
BLAKE2b-256 | 3e7c168b093f89658181cc2457ea5608075ffc2b61724ed2ca7bef7fd39daa22 |
File details
Details for the file desimpy-0.47.0-py3-none-any.whl
.
File metadata
- Download URL: desimpy-0.47.0-py3-none-any.whl
- Upload date:
- Size: 11.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b5d5607383378875231971eaccf52e5bdf573ad987bd75638b9df7068d37948 |
|
MD5 | 565d67b886c95b62f65b02b94bc6c834 |
|
BLAKE2b-256 | d228db8c885a530bc63bb2abe6b6dc924182f8d677eb1aa3384a61c647f8e8d3 |