Metadata-Version: 2.1
Name: Ciw
Version: 2.3.5
Summary: A discrete event simulation library for open queueing networks
Home-page: https://github.com/CiwPython/Ciw
Author: Geraint Palmer, Vincent Knight
Author-email: palmer.geraint@googlemail.com
License-File: LICENSE.txt
License-File: AUTHORS.rst
Requires-Dist: PyYAML (>=5.1)
Requires-Dist: networkx (>=2.3)
Requires-Dist: tqdm (>=4.64.0)
Requires-Dist: numpy (>=1.21.6)

Ciw
===

A discrete event simulation library for queueing networks
---------------------------------------------------------

.. image:: https://github.com/CiwPython/Ciw/actions/workflows/tests.yml/badge.svg
    :target: https://github.com/CiwPython/Ciw/actions/workflows/tests.yml

.. image:: https://img.shields.io/pypi/v/ciw.svg
    :target: https://pypi.python.org/pypi/Ciw

.. image:: https://zenodo.org/badge/47995577.svg
    :target: https://zenodo.org/badge/latestdoi/47995577


.. figure:: https://github.com/CiwPython/Ciw/blob/master/docs/_static/logo_small.png?raw=true
    :width: 150px
    :height: 150px
    :scale: 100%
    :align: center

Ciw is a discrete event simulation library for open queueing networks.
It’s core features include the capability to simulate networks of queues, multiple customer classes, and implementation of Type I blocking for restricted networks.


- `Read the documentation <https://ciw.readthedocs.io>`_
- `Contribution guidelines <https://github.com/CiwPython/Ciw/blob/master/CONTRIBUTING.rst>`_
- `Our great contributors <https://github.com/CiwPython/Ciw/blob/master/AUTHORS.rst>`_

Install with :code:`pip install ciw`.

Current supported version of Python:

- Python 3.7
- Python 3.8
- Python 3.9

Usage
-----

Import Ciw::

    >>> import ciw

To define an M/M/3 queue, with λ = 0.2 and μ = 0.1::

    >>> N = ciw.create_network(
    ...     arrival_distributions=[ciw.dists.Exponential(rate=0.2)],
    ...     service_distributions=[ciw.dists.Exponential(rate=0.1)],
    ...     number_of_servers=[3]
    ... )

Now set a seed, create a Simulation object, and simulate for 1440 time units::

    >>> ciw.seed(1)
    >>> Q = ciw.Simulation(N)
    >>> Q.simulate_until_max_time(1440)

Collect results::

    >>> recs = Q.get_all_records()

Manipulate results to get useful statistics, e.g. average waiting time::

    >>> waits = [r.waiting_time for r in recs]
    >>> sum(waits) / len(waits)
    4.2305...


Features
--------

A number of other features are also implemented, including:

+ `Type I blocking <https://ciw.readthedocs.io/en/latest/Tutorial-II/tutorial_vi.html>`_
+ `A large range of sampling distributions <https://ciw.readthedocs.io/en/latest/Reference/distributions.html>`_
+ `Phase-Type distributions <https://ciw.readthedocs.io/en/latest/Guides/phasetype.html>`_
+ `Time-dependent and state-dependent distributions <https://ciw.readthedocs.io/en/latest/Guides/time_dependent.html>`_
+ `Batch arrivals <https://ciw.readthedocs.io/en/latest/Guides/batching.html>`_
+ `Baulking customers <https://ciw.readthedocs.io/en/latest/Guides/baulking.html>`_
+ `Reneging customers <https://ciw.readthedocs.io/en/latest/Guides/reneging.html>`_
+ `Processor sharing <https://ciw.readthedocs.io/en/latest/Guides/processor-sharing.html>`_
+ `Multiple customer classes <https://ciw.readthedocs.io/en/latest/Tutorial-II/tutorial_vii.html>`_
+ `Priorities <https://ciw.readthedocs.io/en/latest/Guides/priority.html>`_
+ `Server priorities <https://ciw.readthedocs.io/en/latest/Guides/server_priority.html>`_
+ `Customers changing classes <https://ciw.readthedocs.io/en/latest/Guides/dynamic_customerclasses.html>`_
+ `Server schedules <https://ciw.readthedocs.io/en/latest/Guides/server_schedule.html>`_
+ `State tracking <https://ciw.readthedocs.io/en/latest/Guides/state_trackers.html>`_
+ `Stopping the simulation after a certain amount of customers <https://ciw.readthedocs.io/en/latest/Guides/sim_numcusts.html>`_
+ `Process-based routing <https://ciw.readthedocs.io/en/latest/Guides/process_based.html>`_
+ `Deadlock detection <https://ciw.readthedocs.io/en/latest/Guides/deadlock.html>`_



History
-------

+ **v2.3.5 (2023-02-07)**
    + Fixes bug caused when implementing preemptive priority classes and server schedules that take all servers off duty.

+ **v2.3.4 (2022-12-07)**
    + PoissonIntervals distribution now allows rates of zero

+ **v2.3.2 (2022-10-07)**
    + Add PoissonIntervals distribution
    + Add numpy random generator, ciw.seed now also creates new random generator
    + Documentation on parallelising trials
    + Remove support for Python 3.6

+ **v2.3.1 (2022-07-25)**
    + Fixes bug where blocked customers were candidates for `finish_service` when more than one customer finishes service simultaneously
    + Correctly writes csv's in Windows
    + Support for Python 3.9 by updating tqdm requirement

+ **v2.3.0 (2022-05-10)**
    + Reneging customers implemented
    + Customer class changes while waiting implemented
    + Preemptive interruption options implemented
    + New record_type field added to DataRecords

+ **v2.2.4 (2022-03-02)**
    + Improve docs on pausing simulations and server priorities
    + Record server ID in the DataRecords
    + Move CI to GitHub Actions

+ **v2.2.3 (2022-01-27)**
    + Server priority functions implemented.

+ **v2.2.2 (2021-12-17)**
    + State trackers now take objects not indices
    + Servers are attached to individuals before sampling service times
    + Docs on sever-dependant distributions
    + Docs on DES+SD hybrid simulations

+ **v2.2.1 (2021-11-04)**
    + PhaseType distributions implemented
    + Classes for specific PhaseType distributions: Erlang, HyperExponential, HyperErlang, and Coxian

+ **v2.2.0 (2021-07-22)**
    + Processor sharing implemented (limited and capacitated)
    + Ability to use a different node_class per node of the network
    + State tracking now works with simulate_until_max_customers
    + Remove testing on Python 3.5

+ **v2.1.3 (2020-10-06)**
    + Small refactor to Node adding new servers, and to Individuals receiving the Simulation object.
    + Add a library of custom behaviour to docs
    + Support Python 3.8, update hypothesis

+ **v2.1.2 (2020-09-26)**
    + Ability to incorporate customer behaviour Server and Individual classes.

+ **v2.1.1 (2020-05-27)**
    + State Trackers slightly more efficent, they do not record any state changes that result in the same state as before.
    + Add the NodePopulationSubset tracker.
    + Distribution objects can now see the Simulation object, for true state dependent distributions.

+ **v2.1.0 (2020-04-23)**
    + State Trackers now track history
    + State Trackers give state probabilities
    + A number of performance improvements
    + Fix some documentation
    + Test on PyPy3.6 and Python 3.7 too

+ **v2.0.1 (2019-07-17)**
    + setup.py now finds packages to fix pip install bug

+ **v2.0.0 (2019-07-10)**
    + Large refactor:
    + Drop support for Python 2.7, Python 3.4.
    + Update networkx and pyyaml requirements.
    + Refactor time so that `Simulation` has `current_time` attribute.
    + Change Transition_matrices keyword to routing.
    + routing can take a process-based routing function.
    + Refactor distributions to be objects: ['Exponential', 0.5] -> ciw.dists.Exponential(0.5).
    + Distribution objects can be manipulated with +, -, * and /.
    + All keywords lower case to conform to Pep8.
    + deadlock_detector keyword takes object, not string.
    + tracker keyword takes object, not string.
    + Add tests and docs to show how objects can be used for state-dependent distributions.
    + All user facing api now takes float('inf') not 'Inf', expect for .yml files.
    + Reference Ciw paper in docs.
    + Add AUTHORS.rst to docs.

+ **v1.1.6 (2018-10-22)**
    + Fixed bug in which preemptively iterrupted individuals remained blocked once service resampled.
    + Fixed bug in which interrupted individuals not removed from interrupted list when restarting service.
    + Some performance improvements.
    + Improve deadlock detection to check for knots less often.


+ **v1.1.5 (2018-01-11)**
    + Fixed bug calculating the utilisation of servers.

+ **v1.1.4 (2017-12-12)**
    + Time dependent batching distributions
    + Hard pin requirements versions

+ **v1.1.3 (2017-08-18)**
    + Replace DataRecord object with namedtuple.
    + Number of minor tweaks for speed improvements.

+ **v1.1.2 (2017-07-05)**
    + Batch arrivals.

+ **v1.1.1 (2017-06-23)**
    + Server utilisation & overtime.
    + Small fixes to docs.
    + Testing on Python 3.6.

+ **v1.1.0 (2017-04-26)**
    + Replace kwargs with actual keyword arguments in ciw.create_network.
    + Refactor server schedule inputs (schedules placed inside Number_of_servers instead of as their own keyword).

+ **v1.0.0 (2017-04-04)**
    + ciw.create_network takes in kwargs, not dictionary.
    + Add Sequential distribution.
    + Add truncated Normal distribution.
    + Refactor inputs for custom PDF.
    + Refactor inputs for server schedules.
    + Transition matrix now optional for 1 node networks.
    + Overhaul of documentation.
    + Add CONTRIBUTING.rst.
    + Slight improvement of ciw.random_choice.

+ **v0.2.11 (2017-03-13)**
    + Add ability to simulate until max number of customers have passed arrived/been accepted/passed through the system.

+ **v0.2.10 (2017-03-10)**
    + Performance improvements.
    + Drop dependency on numpy.

+ **v0.2.9 (2017-02-24)**
    + Allow zero servers.

+ **v0.2.8 (2016-11-10)**
    + Add option for time dependent distributions.

+ **v0.2.7 (2016-10-26)**
    + Run tests on Appveyor.
    + Check docs build and pip installable on Travis.
    + Remove hypothesis cache.

+ **v0.2.6 (2016-10-17)**
    + Add AUTHORS.rst.
    + Add progress bar option.

+ **v0.2.5 (2016-10-06)**
    + Fix bug that didn't include .rst files in MANIFEST.in.

+ **v0.2.4 (2016-09-27)**
    + Fixed bug in which priority classes and dynamic classes didn't work together.
    + New feature: preemptive interruptions for server schedules.

+ **v0.2.3 (2016-07-27)**
    + Ability to set seed. More docs. Fixes to tests.

+ **v0.2.2 (2016-07-06)**
    + Baulking implemented, and minor fixes to order of unblocking.

+ **v0.2.1 (2016-06-29)**
    + Priority classes implemented.

+ **v0.2.0 (2016-06-20)**
    + Python 3.4 and 3.5 compatible along with 2.7.
    + Data records now kept in list.

+ **v0.1.1 (2016-06-06)**
    + Ability to incorporate behaviour nodes.
    + Data records are now named tuples.

+ **v0.1.0 (2016-04-25)**
    + Re-factor inputs.
    + Simulation takes in a Network object.
    + Helper functions to import yml and dictionary to a Network object.
    + Simulation object takes optional arguments: deadlock_detector, exact, tracker.
    + simulate_until_max_time() takes argument max_simulation_time.

+ **v0.0.6 (2016-04-04)**
    + Exactness implemented.
    + Restructure some features e.g. times_to_deadlock.
    + Custom simulation names.

+ **v0.0.5 (2016-03-18)**
    + State space tracker plug-and-playable.
    + Add rejection dictionary.

+ **v0.0.4 (2016-02-20)**
    + Empirical and UserDefined distributions added.
    + Tidy ups.

+ **v0.0.3 (2016-02-09)**
    + Arrival distributions.
    + MMC options removed.
    + Fix server schedule bugs.

+ **v0.0.2 (2016-01-06)**
    + Some kwargs optional.
    + Hypothesis tests.
    + Minor enhancements.

+ **v0.0.1 (2015-12-14)**
    + Initial release.

+ **v0.0.1dev (2015-12-14)**
    + Initial release (dev).


Contributors
------------

Ciw has been developed by the following contributors:

+ `Geraint Palmer <https://github.com/geraintpalmer/>`_
+ `Vincent Knight <https://github.com/drvinceknight/>`_
+ `Paul Harper <https://sites.google.com/site/profpaulharper/home>`_
+ `Lieke Hölscher <https://github.com/Lieke19/>`_
+ `Sam Luen-English <https://github.com/sluenenglish/>`_
+ `Alex Carney <https://github.com/alcarney/>`_
+ `Adam Johnson <https://github.com/adamchainz/>`_
+ `Nikoleta Glynatsi <https://github.com/Nikoleta-v3/>`_
+ `caipirginka <https://github.com/caipirginka>`_
+ `Emma Aspland <https://github.com/EmmaAspland>`_
+ `Henry Wilde <https://github.com/daffidwilde>`_
+ `timlathy <https://github.com/timlathy>`_
+ `Michalis Panayides <https://github.com/11michalis11>`_
+ `Jorge Martín Pérez <https://github.com/MartinPJorge/>`_
+ `KernelA <https://github.com/KernelA>`_
+ `Matthew Howells <https://github.com/MHowells>`_
