queuenamics 0.8.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- queuenamics-0.8.4/LICENSE +21 -0
- queuenamics-0.8.4/PKG-INFO +317 -0
- queuenamics-0.8.4/README.md +301 -0
- queuenamics-0.8.4/pyproject.toml +29 -0
- queuenamics-0.8.4/queuenamics/__init__.py +154 -0
- queuenamics-0.8.4/queuenamics/atoms.py +1275 -0
- queuenamics-0.8.4/queuenamics/disciplines.py +75 -0
- queuenamics-0.8.4/queuenamics/distributions.py +732 -0
- queuenamics-0.8.4/queuenamics/entities.py +115 -0
- queuenamics-0.8.4/queuenamics/experiment.py +1114 -0
- queuenamics-0.8.4/queuenamics/model.py +400 -0
- queuenamics-0.8.4/queuenamics/report.py +2087 -0
- queuenamics-0.8.4/queuenamics/routing.py +155 -0
- queuenamics-0.8.4/queuenamics/simulation.py +146 -0
- queuenamics-0.8.4/queuenamics/stats.py +938 -0
- queuenamics-0.8.4/queuenamics/visualization.py +149 -0
- queuenamics-0.8.4/queuenamics.egg-info/PKG-INFO +317 -0
- queuenamics-0.8.4/queuenamics.egg-info/SOURCES.txt +20 -0
- queuenamics-0.8.4/queuenamics.egg-info/dependency_links.txt +1 -0
- queuenamics-0.8.4/queuenamics.egg-info/requires.txt +2 -0
- queuenamics-0.8.4/queuenamics.egg-info/top_level.txt +1 -0
- queuenamics-0.8.4/setup.cfg +4 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Jozua Oosthof
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: queuenamics
|
|
3
|
+
Version: 0.8.4
|
|
4
|
+
Summary: A simple Python-native operations research and discrete-event simulation library
|
|
5
|
+
Author: Jozua Oosthof
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/joosthof13/Queuenamics
|
|
8
|
+
Project-URL: Repository, https://github.com/joosthof13/Queuenamics
|
|
9
|
+
Project-URL: Issues, https://github.com/joosthof13/Queuenamics/issues
|
|
10
|
+
Requires-Python: >=3.10
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Requires-Dist: matplotlib>=3.7
|
|
14
|
+
Requires-Dist: networkx>=3.0
|
|
15
|
+
Dynamic: license-file
|
|
16
|
+
|
|
17
|
+
# Queuenamics
|
|
18
|
+
|
|
19
|
+
**Python-native discrete-event simulation and queueing.**
|
|
20
|
+
|
|
21
|
+
[](https://test.pypi.org/project/queuenamics/)
|
|
22
|
+
[](https://github.com/joosthof13/Queuenamics)
|
|
23
|
+
|
|
24
|
+
Queuenamics is a Python library for building, simulating, and analyzing **queueing systems, service processes, and operational models**.
|
|
25
|
+
|
|
26
|
+
Define your model in Python, run discrete-event simulations, and analyze system performance.
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
Source → Queue → Server → Sink
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Installation
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pip install queuenamics
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Quick start
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
from queuenamics import (
|
|
42
|
+
Model,
|
|
43
|
+
Source,
|
|
44
|
+
Queue,
|
|
45
|
+
Server,
|
|
46
|
+
Sink,
|
|
47
|
+
Exponential,
|
|
48
|
+
FIFO,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
customers = Source(
|
|
52
|
+
"Customers",
|
|
53
|
+
arrival=Exponential(5),
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
queue = Queue(
|
|
57
|
+
"Waiting Line",
|
|
58
|
+
discipline=FIFO(),
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
cashier = Server(
|
|
62
|
+
"Cashier",
|
|
63
|
+
service=Exponential(6),
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
exit = Sink("Exit")
|
|
67
|
+
|
|
68
|
+
model = Model(seed=42)
|
|
69
|
+
|
|
70
|
+
model.connect(customers, queue)
|
|
71
|
+
model.connect(queue, cashier)
|
|
72
|
+
model.connect(cashier, exit)
|
|
73
|
+
|
|
74
|
+
model.run(time=10_000)
|
|
75
|
+
|
|
76
|
+
model.stats.print_report()
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Models follow a simple workflow:
|
|
80
|
+
|
|
81
|
+
**DEFINE → CONNECT → VALIDATE → RUN → ANALYZE → EXPERIMENT**
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Features
|
|
86
|
+
|
|
87
|
+
### Simulation
|
|
88
|
+
|
|
89
|
+
* Discrete-event simulation
|
|
90
|
+
* Sources, queues, servers, sinks, and resources
|
|
91
|
+
* Multiple and heterogeneous servers
|
|
92
|
+
* Entity types and custom attributes
|
|
93
|
+
* Reproducible simulations with random seeds
|
|
94
|
+
* Automatic model validation
|
|
95
|
+
* Warm-up periods
|
|
96
|
+
|
|
97
|
+
### Queueing & routing
|
|
98
|
+
|
|
99
|
+
* FIFO, LIFO, priority, and shortest-processing-time disciplines
|
|
100
|
+
* Conditional, attribute-based, and entity-type routing
|
|
101
|
+
* First-available and random-available routing
|
|
102
|
+
* Shared resources and capacity constraints
|
|
103
|
+
|
|
104
|
+
### Distributions
|
|
105
|
+
|
|
106
|
+
```python
|
|
107
|
+
Constant(...)
|
|
108
|
+
Exponential(...)
|
|
109
|
+
Uniform(...)
|
|
110
|
+
Poisson(...)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Additional probability distributions are available for stochastic model components.
|
|
114
|
+
|
|
115
|
+
### Statistics
|
|
116
|
+
|
|
117
|
+
Collect and analyze:
|
|
118
|
+
|
|
119
|
+
* Queue length
|
|
120
|
+
* Waiting time
|
|
121
|
+
* Service time
|
|
122
|
+
* Utilization
|
|
123
|
+
* Throughput
|
|
124
|
+
* Mean, median, minimum, and maximum
|
|
125
|
+
* Quartiles and arbitrary percentiles
|
|
126
|
+
* Variance and standard deviation
|
|
127
|
+
* Grouped statistics
|
|
128
|
+
* Time-weighted statistics
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
model.stats.print_report()
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Reports can be exported to JSON or CSV.
|
|
135
|
+
|
|
136
|
+
### Experiments
|
|
137
|
+
|
|
138
|
+
Run independent replications and quantify simulation uncertainty:
|
|
139
|
+
|
|
140
|
+
```python
|
|
141
|
+
from queuenamics import Experiment
|
|
142
|
+
|
|
143
|
+
experiment = Experiment(
|
|
144
|
+
model_factory=create_model,
|
|
145
|
+
replications=30,
|
|
146
|
+
time=10_000,
|
|
147
|
+
warmup=1_000,
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
results = experiment.run()
|
|
151
|
+
|
|
152
|
+
results.mean("sinks.Exit.throughput")
|
|
153
|
+
results.confidence_interval("sinks.Exit.throughput")
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Parameter sweeps
|
|
157
|
+
|
|
158
|
+
Evaluate different model configurations automatically:
|
|
159
|
+
|
|
160
|
+
```python
|
|
161
|
+
from queuenamics import ParameterSweep
|
|
162
|
+
|
|
163
|
+
sweep = ParameterSweep(
|
|
164
|
+
model_factory=create_model,
|
|
165
|
+
parameters={
|
|
166
|
+
"arrival_rate": [4, 5, 6],
|
|
167
|
+
"service_rate": [5, 6, 7],
|
|
168
|
+
},
|
|
169
|
+
replications=10,
|
|
170
|
+
time=5_000,
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
results = sweep.run()
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Structural parameters such as the number of servers can also be swept.
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Visualization
|
|
181
|
+
|
|
182
|
+
Queuenamics provides lightweight visualization using Matplotlib and NetworkX.
|
|
183
|
+
|
|
184
|
+
```python
|
|
185
|
+
from queuenamics import (
|
|
186
|
+
plot_model,
|
|
187
|
+
plot_queue_length,
|
|
188
|
+
plot_server_utilization,
|
|
189
|
+
plot_throughput,
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
plot_model(model)
|
|
193
|
+
plot_queue_length(queue)
|
|
194
|
+
plot_server_utilization(cashier)
|
|
195
|
+
plot_throughput(exit)
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Why Queuenamics?
|
|
201
|
+
|
|
202
|
+
Queuenamics is **Python-native by design**.
|
|
203
|
+
|
|
204
|
+
Models are ordinary Python objects, making them:
|
|
205
|
+
|
|
206
|
+
* **Reproducible** — keep models and experiments in version control.
|
|
207
|
+
* **Programmable** — use Python logic throughout the model.
|
|
208
|
+
* **Experimentable** — automate replications and parameter studies.
|
|
209
|
+
* **Transparent** — the model structure is visible directly in code.
|
|
210
|
+
* **Extensible** — integrate simulation with Python's scientific ecosystem.
|
|
211
|
+
|
|
212
|
+
```text
|
|
213
|
+
Python model
|
|
214
|
+
↓
|
|
215
|
+
Discrete-event simulation
|
|
216
|
+
↓
|
|
217
|
+
Statistics & experiments
|
|
218
|
+
↓
|
|
219
|
+
Analysis & decisions
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Example applications
|
|
225
|
+
|
|
226
|
+
Queuenamics can be used to model:
|
|
227
|
+
|
|
228
|
+
* Customer service systems
|
|
229
|
+
* Manufacturing processes
|
|
230
|
+
* Healthcare systems
|
|
231
|
+
* Logistics and transportation
|
|
232
|
+
* Call centers
|
|
233
|
+
* Repair and maintenance systems
|
|
234
|
+
* Capacity planning
|
|
235
|
+
* Queueing theory experiments
|
|
236
|
+
* Operational research studies
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Requirements
|
|
241
|
+
|
|
242
|
+
* Python **3.10+**
|
|
243
|
+
* [Matplotlib](https://matplotlib.org/)
|
|
244
|
+
* [NetworkX](https://networkx.org/)
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Documentation
|
|
249
|
+
|
|
250
|
+
Documentation and examples are available in the project repository.
|
|
251
|
+
|
|
252
|
+
For a quick overview of the API, see the `examples/` directory.
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Development
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
git clone https://github.com/joosthof13/Queuenamics.git
|
|
260
|
+
cd Queuenamics
|
|
261
|
+
|
|
262
|
+
python -m venv .venv
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
Windows:
|
|
266
|
+
|
|
267
|
+
```powershell
|
|
268
|
+
.venv\Scripts\Activate.ps1
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
Install in editable mode:
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
pip install -e .
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Run the test suite:
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
python -m pytest -q
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## Project status
|
|
286
|
+
|
|
287
|
+
**Current version: 0.8.4**
|
|
288
|
+
|
|
289
|
+
Queuenamics is currently suitable for:
|
|
290
|
+
|
|
291
|
+
**learning · research · prototyping · operational analysis · queueing studies · discrete-event simulation**
|
|
292
|
+
|
|
293
|
+
The project is actively developed toward a stable **0.9.0** release.
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## Contributing
|
|
298
|
+
|
|
299
|
+
Contributions, bug reports, tests, documentation, and new modelling components are welcome.
|
|
300
|
+
|
|
301
|
+
Please run the test suite before submitting changes:
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
python -m pytest -q
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## License
|
|
310
|
+
|
|
311
|
+
Queuenamics is released under the **MIT License**.
|
|
312
|
+
|
|
313
|
+
See [`LICENSE`](LICENSE) for details.
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
> **Build operational processes in Python. Simulate them as discrete events. Analyze their performance.**
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
# Queuenamics
|
|
2
|
+
|
|
3
|
+
**Python-native discrete-event simulation and queueing.**
|
|
4
|
+
|
|
5
|
+
[](https://test.pypi.org/project/queuenamics/)
|
|
6
|
+
[](https://github.com/joosthof13/Queuenamics)
|
|
7
|
+
|
|
8
|
+
Queuenamics is a Python library for building, simulating, and analyzing **queueing systems, service processes, and operational models**.
|
|
9
|
+
|
|
10
|
+
Define your model in Python, run discrete-event simulations, and analyze system performance.
|
|
11
|
+
|
|
12
|
+
```text
|
|
13
|
+
Source → Queue → Server → Sink
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pip install queuenamics
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Quick start
|
|
23
|
+
|
|
24
|
+
```python
|
|
25
|
+
from queuenamics import (
|
|
26
|
+
Model,
|
|
27
|
+
Source,
|
|
28
|
+
Queue,
|
|
29
|
+
Server,
|
|
30
|
+
Sink,
|
|
31
|
+
Exponential,
|
|
32
|
+
FIFO,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
customers = Source(
|
|
36
|
+
"Customers",
|
|
37
|
+
arrival=Exponential(5),
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
queue = Queue(
|
|
41
|
+
"Waiting Line",
|
|
42
|
+
discipline=FIFO(),
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
cashier = Server(
|
|
46
|
+
"Cashier",
|
|
47
|
+
service=Exponential(6),
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
exit = Sink("Exit")
|
|
51
|
+
|
|
52
|
+
model = Model(seed=42)
|
|
53
|
+
|
|
54
|
+
model.connect(customers, queue)
|
|
55
|
+
model.connect(queue, cashier)
|
|
56
|
+
model.connect(cashier, exit)
|
|
57
|
+
|
|
58
|
+
model.run(time=10_000)
|
|
59
|
+
|
|
60
|
+
model.stats.print_report()
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Models follow a simple workflow:
|
|
64
|
+
|
|
65
|
+
**DEFINE → CONNECT → VALIDATE → RUN → ANALYZE → EXPERIMENT**
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Features
|
|
70
|
+
|
|
71
|
+
### Simulation
|
|
72
|
+
|
|
73
|
+
* Discrete-event simulation
|
|
74
|
+
* Sources, queues, servers, sinks, and resources
|
|
75
|
+
* Multiple and heterogeneous servers
|
|
76
|
+
* Entity types and custom attributes
|
|
77
|
+
* Reproducible simulations with random seeds
|
|
78
|
+
* Automatic model validation
|
|
79
|
+
* Warm-up periods
|
|
80
|
+
|
|
81
|
+
### Queueing & routing
|
|
82
|
+
|
|
83
|
+
* FIFO, LIFO, priority, and shortest-processing-time disciplines
|
|
84
|
+
* Conditional, attribute-based, and entity-type routing
|
|
85
|
+
* First-available and random-available routing
|
|
86
|
+
* Shared resources and capacity constraints
|
|
87
|
+
|
|
88
|
+
### Distributions
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
Constant(...)
|
|
92
|
+
Exponential(...)
|
|
93
|
+
Uniform(...)
|
|
94
|
+
Poisson(...)
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Additional probability distributions are available for stochastic model components.
|
|
98
|
+
|
|
99
|
+
### Statistics
|
|
100
|
+
|
|
101
|
+
Collect and analyze:
|
|
102
|
+
|
|
103
|
+
* Queue length
|
|
104
|
+
* Waiting time
|
|
105
|
+
* Service time
|
|
106
|
+
* Utilization
|
|
107
|
+
* Throughput
|
|
108
|
+
* Mean, median, minimum, and maximum
|
|
109
|
+
* Quartiles and arbitrary percentiles
|
|
110
|
+
* Variance and standard deviation
|
|
111
|
+
* Grouped statistics
|
|
112
|
+
* Time-weighted statistics
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
model.stats.print_report()
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Reports can be exported to JSON or CSV.
|
|
119
|
+
|
|
120
|
+
### Experiments
|
|
121
|
+
|
|
122
|
+
Run independent replications and quantify simulation uncertainty:
|
|
123
|
+
|
|
124
|
+
```python
|
|
125
|
+
from queuenamics import Experiment
|
|
126
|
+
|
|
127
|
+
experiment = Experiment(
|
|
128
|
+
model_factory=create_model,
|
|
129
|
+
replications=30,
|
|
130
|
+
time=10_000,
|
|
131
|
+
warmup=1_000,
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
results = experiment.run()
|
|
135
|
+
|
|
136
|
+
results.mean("sinks.Exit.throughput")
|
|
137
|
+
results.confidence_interval("sinks.Exit.throughput")
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Parameter sweeps
|
|
141
|
+
|
|
142
|
+
Evaluate different model configurations automatically:
|
|
143
|
+
|
|
144
|
+
```python
|
|
145
|
+
from queuenamics import ParameterSweep
|
|
146
|
+
|
|
147
|
+
sweep = ParameterSweep(
|
|
148
|
+
model_factory=create_model,
|
|
149
|
+
parameters={
|
|
150
|
+
"arrival_rate": [4, 5, 6],
|
|
151
|
+
"service_rate": [5, 6, 7],
|
|
152
|
+
},
|
|
153
|
+
replications=10,
|
|
154
|
+
time=5_000,
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
results = sweep.run()
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Structural parameters such as the number of servers can also be swept.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Visualization
|
|
165
|
+
|
|
166
|
+
Queuenamics provides lightweight visualization using Matplotlib and NetworkX.
|
|
167
|
+
|
|
168
|
+
```python
|
|
169
|
+
from queuenamics import (
|
|
170
|
+
plot_model,
|
|
171
|
+
plot_queue_length,
|
|
172
|
+
plot_server_utilization,
|
|
173
|
+
plot_throughput,
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
plot_model(model)
|
|
177
|
+
plot_queue_length(queue)
|
|
178
|
+
plot_server_utilization(cashier)
|
|
179
|
+
plot_throughput(exit)
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Why Queuenamics?
|
|
185
|
+
|
|
186
|
+
Queuenamics is **Python-native by design**.
|
|
187
|
+
|
|
188
|
+
Models are ordinary Python objects, making them:
|
|
189
|
+
|
|
190
|
+
* **Reproducible** — keep models and experiments in version control.
|
|
191
|
+
* **Programmable** — use Python logic throughout the model.
|
|
192
|
+
* **Experimentable** — automate replications and parameter studies.
|
|
193
|
+
* **Transparent** — the model structure is visible directly in code.
|
|
194
|
+
* **Extensible** — integrate simulation with Python's scientific ecosystem.
|
|
195
|
+
|
|
196
|
+
```text
|
|
197
|
+
Python model
|
|
198
|
+
↓
|
|
199
|
+
Discrete-event simulation
|
|
200
|
+
↓
|
|
201
|
+
Statistics & experiments
|
|
202
|
+
↓
|
|
203
|
+
Analysis & decisions
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Example applications
|
|
209
|
+
|
|
210
|
+
Queuenamics can be used to model:
|
|
211
|
+
|
|
212
|
+
* Customer service systems
|
|
213
|
+
* Manufacturing processes
|
|
214
|
+
* Healthcare systems
|
|
215
|
+
* Logistics and transportation
|
|
216
|
+
* Call centers
|
|
217
|
+
* Repair and maintenance systems
|
|
218
|
+
* Capacity planning
|
|
219
|
+
* Queueing theory experiments
|
|
220
|
+
* Operational research studies
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Requirements
|
|
225
|
+
|
|
226
|
+
* Python **3.10+**
|
|
227
|
+
* [Matplotlib](https://matplotlib.org/)
|
|
228
|
+
* [NetworkX](https://networkx.org/)
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Documentation
|
|
233
|
+
|
|
234
|
+
Documentation and examples are available in the project repository.
|
|
235
|
+
|
|
236
|
+
For a quick overview of the API, see the `examples/` directory.
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Development
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
git clone https://github.com/joosthof13/Queuenamics.git
|
|
244
|
+
cd Queuenamics
|
|
245
|
+
|
|
246
|
+
python -m venv .venv
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Windows:
|
|
250
|
+
|
|
251
|
+
```powershell
|
|
252
|
+
.venv\Scripts\Activate.ps1
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
Install in editable mode:
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
pip install -e .
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Run the test suite:
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
python -m pytest -q
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Project status
|
|
270
|
+
|
|
271
|
+
**Current version: 0.8.4**
|
|
272
|
+
|
|
273
|
+
Queuenamics is currently suitable for:
|
|
274
|
+
|
|
275
|
+
**learning · research · prototyping · operational analysis · queueing studies · discrete-event simulation**
|
|
276
|
+
|
|
277
|
+
The project is actively developed toward a stable **0.9.0** release.
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## Contributing
|
|
282
|
+
|
|
283
|
+
Contributions, bug reports, tests, documentation, and new modelling components are welcome.
|
|
284
|
+
|
|
285
|
+
Please run the test suite before submitting changes:
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
python -m pytest -q
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## License
|
|
294
|
+
|
|
295
|
+
Queuenamics is released under the **MIT License**.
|
|
296
|
+
|
|
297
|
+
See [`LICENSE`](LICENSE) for details.
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
> **Build operational processes in Python. Simulate them as discrete events. Analyze their performance.**
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "queuenamics"
|
|
7
|
+
version = "0.8.4"
|
|
8
|
+
description = "A simple Python-native operations research and discrete-event simulation library"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
|
|
13
|
+
authors = [
|
|
14
|
+
{ name = "Jozua Oosthof" }
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
dependencies = [
|
|
18
|
+
"matplotlib>=3.7",
|
|
19
|
+
"networkx>=3.0",
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
[project.urls]
|
|
23
|
+
Homepage = "https://github.com/joosthof13/Queuenamics"
|
|
24
|
+
Repository = "https://github.com/joosthof13/Queuenamics"
|
|
25
|
+
Issues = "https://github.com/joosthof13/Queuenamics/issues"
|
|
26
|
+
|
|
27
|
+
[tool.setuptools.packages.find]
|
|
28
|
+
include = ["queuenamics*"]
|
|
29
|
+
exclude = ["queuenamics.tests", "queuenamics.tests.*"]
|