Skip to main content

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


Download files

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

Source Distribution

desimpy-0.48.0.tar.gz (31.3 kB view details)

Uploaded Source

Built Distribution

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

desimpy-0.48.0-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file desimpy-0.48.0.tar.gz.

File metadata

  • Download URL: desimpy-0.48.0.tar.gz
  • Upload date:
  • Size: 31.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for desimpy-0.48.0.tar.gz
Algorithm Hash digest
SHA256 14fd602bc1e0a13b0d776db922cd78e300a8d4f4f7e4706879d9a3a1280f84b5
MD5 c3b5cef2e9958ce546a92852a83f8115
BLAKE2b-256 513229517b6aa0beed010eb1a70ce5ef2c12fff87e18bed03085fd9cb9422010

See more details on using hashes here.

File details

Details for the file desimpy-0.48.0-py3-none-any.whl.

File metadata

  • Download URL: desimpy-0.48.0-py3-none-any.whl
  • Upload date:
  • Size: 11.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for desimpy-0.48.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a25aa755aaa95114f1b4c2e83cdc0b668f3417d43ffc515415422156f7e86834
MD5 0926b799eb0639df0e10fd7382525905
BLAKE2b-256 a48e390dd8facd3e4c48bac424caf4c2a5aa69ef2207e154e6b9032982984e95

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