most-queue 2.7__tar.gz → 2.9__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.
- {most_queue-2.7 → most_queue-2.9}/.gitignore +28 -1
- most_queue-2.9/PKG-INFO +200 -0
- most_queue-2.9/README.md +159 -0
- most_queue-2.9/docs/README.md +120 -0
- most_queue-2.9/docs/epics/README.md +59 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/__init__.py +7 -1
- {most_queue-2.7 → most_queue-2.9}/most_queue/io/plots.py +41 -5
- {most_queue-2.7 → most_queue-2.9}/most_queue/misc/calc_v_pls.py +1 -1
- {most_queue-2.7 → most_queue-2.9}/most_queue/random/distributions.py +62 -0
- most_queue-2.9/most_queue/random/map_fit.py +137 -0
- most_queue-2.9/most_queue/random/map_ph.py +330 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/random/utils/create.py +9 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/__init__.py +2 -1
- most_queue-2.9/most_queue/sim/aoi.py +133 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/base.py +20 -2
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/base_core.py +11 -9
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/batch.py +99 -95
- most_queue-2.9/most_queue/sim/bmap.py +130 -0
- most_queue-2.9/most_queue/sim/bulk_service.py +95 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/finite_source.py +246 -242
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/flow_sum.py +240 -240
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/fork_join.py +264 -260
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/impatient.py +177 -181
- most_queue-2.9/most_queue/sim/msj.py +117 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/negative.py +190 -35
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/networks/negative_network.py +3 -4
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/priority.py +4 -9
- most_queue-2.9/most_queue/sim/retrial.py +79 -0
- most_queue-2.9/most_queue/sim/single_server_disciplines.py +225 -0
- most_queue-2.9/most_queue/sim/size_based.py +248 -0
- most_queue-2.9/most_queue/sim/unreliable.py +95 -0
- most_queue-2.9/most_queue/sim/utils/predictor.py +44 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/utils/qs_queue.py +12 -0
- most_queue-2.9/most_queue/sim/utils/queue_priority_size.py +112 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/utils/servers.py +45 -1
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/utils/stats_update.py +2 -2
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/utils/tasks.py +21 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/vacations.py +364 -316
- {most_queue-2.7 → most_queue-2.9}/most_queue/structs.py +41 -1
- most_queue-2.9/most_queue/theory/aoi/__init__.py +5 -0
- most_queue-2.9/most_queue/theory/aoi/calc.py +114 -0
- most_queue-2.9/most_queue/theory/batch/__init__.py +7 -0
- most_queue-2.9/most_queue/theory/batch/bulk_service.py +138 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/batch/mm1.py +3 -2
- most_queue-2.9/most_queue/theory/closed/__init__.py +7 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/fifo/__init__.py +12 -0
- most_queue-2.9/most_queue/theory/fifo/erlang.py +249 -0
- most_queue-2.9/most_queue/theory/fifo/gi_g_approx.py +223 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/fifo/gi_m_1.py +10 -13
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/fifo/gi_m_n.py +257 -258
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/fifo/gmc_takahasi.py +0 -1
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/fifo/hkhk_takahasi.py +475 -486
- most_queue-2.9/most_queue/theory/fifo/m_g_inf.py +114 -0
- most_queue-2.9/most_queue/theory/fifo/mg1_lcfs_pr.py +106 -0
- most_queue-2.9/most_queue/theory/fifo/mg1_ps.py +119 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/fifo/mgn_takahasi.py +34 -1
- most_queue-2.9/most_queue/theory/fork_join/__init__.py +11 -0
- most_queue-2.9/most_queue/theory/impatience/__init__.py +11 -0
- most_queue-2.9/most_queue/theory/impatience/mmn.py +147 -0
- most_queue-2.9/most_queue/theory/matrix/__init__.py +22 -0
- most_queue-2.9/most_queue/theory/matrix/bmap_m1.py +163 -0
- most_queue-2.9/most_queue/theory/matrix/bmap_ph1.py +180 -0
- most_queue-2.9/most_queue/theory/matrix/map_mmc.py +190 -0
- most_queue-2.9/most_queue/theory/matrix/map_ph1.py +190 -0
- most_queue-2.9/most_queue/theory/matrix/map_phc.py +278 -0
- most_queue-2.9/most_queue/theory/matrix/qbd.py +147 -0
- most_queue-2.9/most_queue/theory/msj/__init__.py +7 -0
- most_queue-2.9/most_queue/theory/msj/exact.py +123 -0
- most_queue-2.9/most_queue/theory/msj/saturated.py +138 -0
- most_queue-2.9/most_queue/theory/negative/__init__.py +15 -0
- most_queue-2.9/most_queue/theory/negative/mg1_disasters.py +228 -0
- most_queue-2.9/most_queue/theory/negative/mgn_disaster.py +690 -0
- most_queue-2.9/most_queue/theory/negative/mgn_rcs.py +755 -0
- most_queue-2.9/most_queue/theory/networks/__init__.py +13 -0
- most_queue-2.9/most_queue/theory/priority/__init__.py +19 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/priority/preemptive/mm2_3cls_busy_approx.py +9 -12
- most_queue-2.9/most_queue/theory/priority/preemptive/mmk_prty_exact.py +315 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/priority/preemptive/mmn_2cls_pr_busy_approx.py +9 -12
- most_queue-2.9/most_queue/theory/priority/preemptive/mph_ph_k_2class.py +227 -0
- most_queue-2.9/most_queue/theory/priority/preemptive/rdr_a.py +185 -0
- most_queue-2.9/most_queue/theory/retrial/__init__.py +8 -0
- most_queue-2.9/most_queue/theory/retrial/mg1.py +102 -0
- most_queue-2.9/most_queue/theory/retrial/mm1.py +160 -0
- most_queue-2.9/most_queue/theory/srpt/__init__.py +25 -0
- most_queue-2.9/most_queue/theory/srpt/_base.py +136 -0
- most_queue-2.9/most_queue/theory/srpt/degradation.py +71 -0
- most_queue-2.9/most_queue/theory/srpt/mg1_fb.py +68 -0
- most_queue-2.9/most_queue/theory/srpt/mg1_psjf.py +53 -0
- most_queue-2.9/most_queue/theory/srpt/mg1_sjf.py +46 -0
- most_queue-2.9/most_queue/theory/srpt/mg1_spjf.py +96 -0
- most_queue-2.9/most_queue/theory/srpt/mg1_srpt.py +61 -0
- most_queue-2.9/most_queue/theory/srpt/utils/__init__.py +12 -0
- most_queue-2.9/most_queue/theory/srpt/utils/load_below.py +123 -0
- most_queue-2.9/most_queue/theory/srpt/utils/predictor.py +153 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/utils/busy_periods.py +1 -2
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/utils/conditional.py +1 -1
- most_queue-2.9/most_queue/theory/utils/derivative.py +93 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/utils/passage_time.py +52 -39
- most_queue-2.9/most_queue/theory/utils/restarts.py +241 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/utils/timing.py +2 -2
- most_queue-2.9/most_queue/theory/vacations/__init__.py +20 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/vacations/m_h2_h2warm.py +1 -1
- most_queue-2.9/most_queue/theory/vacations/mg1_unreliable.py +159 -0
- most_queue-2.9/most_queue/theory/vacations/mg1_vacations.py +228 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/vacations/mg1_warm_calc.py +1 -1
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/vacations/mgn_with_h2_delay_cold_warm.py +1 -1
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/vacations/mmn_with_h2_cold_and_h2_warmup.py +1 -1
- {most_queue-2.7 → most_queue-2.9}/pyproject.toml +90 -74
- most_queue-2.7/.cursorrules +0 -3
- most_queue-2.7/.pre-commit-config.yaml +0 -47
- most_queue-2.7/PKG-INFO +0 -274
- most_queue-2.7/README.md +0 -233
- most_queue-2.7/assets/3.gif +0 -0
- most_queue-2.7/deploy.txt +0 -3
- most_queue-2.7/docs/README.md +0 -108
- most_queue-2.7/docs/calculation.md +0 -472
- most_queue-2.7/docs/concepts.md +0 -317
- most_queue-2.7/docs/custom_simulators.md +0 -430
- most_queue-2.7/docs/distributions.md +0 -429
- most_queue-2.7/docs/examples.md +0 -405
- most_queue-2.7/docs/getting_started.md +0 -182
- most_queue-2.7/docs/models.md +0 -459
- most_queue-2.7/docs/negative_networks_calculation.md +0 -300
- most_queue-2.7/docs/networks.md +0 -647
- most_queue-2.7/docs/priorities.md +0 -330
- most_queue-2.7/docs/simulation.md +0 -380
- most_queue-2.7/docs/tesaurus.md +0 -283
- most_queue-2.7/examples/custom_network_example.py +0 -161
- most_queue-2.7/examples/custom_simulator_example.py +0 -143
- most_queue-2.7/googleb31d3dccb40f969f.html +0 -1
- most_queue-2.7/most_queue/theory/negative/mg1_disasters.py +0 -134
- most_queue-2.7/most_queue/theory/negative/mgn_disaster.py +0 -391
- most_queue-2.7/most_queue/theory/negative/mgn_rcs.py +0 -254
- most_queue-2.7/most_queue/theory/negative/structs.py +0 -1
- most_queue-2.7/most_queue/theory/networks/__init__.py +0 -8
- most_queue-2.7/most_queue/theory/networks/opt/__init__.py +0 -0
- most_queue-2.7/most_queue/theory/priority/__init__.py +0 -13
- most_queue-2.7/most_queue/theory/priority/non_preemptive/__init__.py +0 -0
- most_queue-2.7/most_queue/theory/priority/preemptive/__init__.py +0 -0
- most_queue-2.7/most_queue/theory/vacations/__init__.py +0 -0
- most_queue-2.7/requirements.txt +0 -168
- most_queue-2.7/tests/Dockerfile +0 -13
- most_queue-2.7/tests/__init__.py +0 -0
- most_queue-2.7/tests/default_params.yaml +0 -35
- most_queue-2.7/tests/run.sh +0 -5
- most_queue-2.7/tests/test_base_qs_sim.py +0 -97
- most_queue-2.7/tests/test_batch.py +0 -83
- most_queue-2.7/tests/test_ek_d_n.py +0 -102
- most_queue-2.7/tests/test_engset.py +0 -78
- most_queue-2.7/tests/test_fj_sim.py +0 -186
- most_queue-2.7/tests/test_gi_m_1_calc.py +0 -90
- most_queue-2.7/tests/test_gi_m_n_calc.py +0 -99
- most_queue-2.7/tests/test_h2_h2_n_calc.py +0 -129
- most_queue-2.7/tests/test_h2_m_n_calc.py +0 -105
- most_queue-2.7/tests/test_impatience.py +0 -69
- most_queue-2.7/tests/test_m_d_n_calc.py +0 -81
- most_queue-2.7/tests/test_m_h2_h2warm.py +0 -93
- most_queue-2.7/tests/test_m_ph_n_prty.py +0 -136
- most_queue-2.7/tests/test_mg1_calc.py +0 -85
- most_queue-2.7/tests/test_mg1_disaster.py +0 -91
- most_queue-2.7/tests/test_mg1_rcs.py +0 -73
- most_queue-2.7/tests/test_mg1_warmup.py +0 -86
- most_queue-2.7/tests/test_mgn_disaster.py +0 -81
- most_queue-2.7/tests/test_mgn_rcs.py +0 -84
- most_queue-2.7/tests/test_mgn_tt.py +0 -106
- most_queue-2.7/tests/test_mgn_with_h2_delay_cold_warm.py +0 -220
- most_queue-2.7/tests/test_mm2_3cls_prty_busy.py +0 -110
- most_queue-2.7/tests/test_mmn_h2cold_h2warm.py +0 -125
- most_queue-2.7/tests/test_mmn_prty_busy_approx.py +0 -109
- most_queue-2.7/tests/test_negative_network.py +0 -504
- most_queue-2.7/tests/test_network_im_prty.py +0 -158
- most_queue-2.7/tests/test_network_negative_calc.py +0 -182
- most_queue-2.7/tests/test_network_no_prty.py +0 -97
- most_queue-2.7/tests/test_network_opt.py +0 -62
- most_queue-2.7/tests/test_qs_sim.py +0 -88
- most_queue-2.7/tests/test_qs_sim_prty.py +0 -144
- most_queue-2.7/tests/test_tt_vs_sim_cv105.py +0 -149
- most_queue-2.7/tests/test_tt_vs_sim_gamma_cvl1.py +0 -128
- most_queue-2.7/tests/units/test_busy_moments_calc.py +0 -47
- most_queue-2.7/tests/units/test_central_moments.py +0 -43
- most_queue-2.7/tests/units/test_conditionals.py +0 -146
- most_queue-2.7/tests/units/test_h2_params_cv.py +0 -95
- most_queue-2.7/tests/units/test_queue_types.py +0 -61
- most_queue-2.7/tests/units/test_tt_up_probs.py +0 -46
- most_queue-2.7/tests/units/test_v1_on_channels.py +0 -72
- most_queue-2.7/tests/units/test_v1_utlization_approx.py +0 -12
- most_queue-2.7/tests/units/test_weibull.py +0 -34
- most_queue-2.7/tutorials/m_h2_h2warm.ipynb +0 -272
- most_queue-2.7/tutorials/mgn_takahasi_takami.ipynb +0 -252
- most_queue-2.7/tutorials/network_with_priorities.ipynb +0 -381
- most_queue-2.7/tutorials/priority_queue.ipynb +0 -378
- most_queue-2.7/tutorials/queue_sim.ipynb +0 -456
- most_queue-2.7/works/__init__.py +0 -0
- most_queue-2.7/works/negative_queues/__init__.py +0 -0
- most_queue-2.7/works/negative_queues/base_parameters.yaml +0 -21
- most_queue-2.7/works/negative_queues/work_mgn_negatives.py +0 -333
- most_queue-2.7/works/vacations/__init__.py +0 -0
- most_queue-2.7/works/vacations/base_parameters.yaml +0 -52
- most_queue-2.7/works/vacations/channels.py +0 -80
- most_queue-2.7/works/vacations/cooling.py +0 -182
- most_queue-2.7/works/vacations/cooling_delay.py +0 -181
- most_queue-2.7/works/vacations/main.py +0 -60
- most_queue-2.7/works/vacations/run_one_calc_vs_sim.py +0 -173
- most_queue-2.7/works/vacations/service.py +0 -86
- most_queue-2.7/works/vacations/utilization.py +0 -75
- most_queue-2.7/works/vacations/utils.py +0 -125
- most_queue-2.7/works/vacations/warmup.py +0 -180
- {most_queue-2.7 → most_queue-2.9}/LICENSE +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/constants.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/io/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/io/tables.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/misc/approx_cdf_make.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/misc/compare_fj_calc.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/misc/flow_sum.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/misc/run_mgn_with_h2_delay_cold_warm.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/misc/tests/test_fj_delta.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/misc/tests/test_network_opt_approx.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/misc/tests/test_network_opt_plus.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/misc/vacations_paper_utils.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/random/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/random/distributions.yaml +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/random/utils/base.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/random/utils/fit.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/random/utils/load.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/random/utils/params.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/fork_join_delta.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/networks/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/networks/base_network_sim.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/networks/network.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/networks/priority_network.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/utils/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/utils/events.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/sim/utils/phase.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/base_queue.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/calc_params.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/closed/engset.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/fifo/ek_d_n.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/fifo/m_d_n.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/fifo/mg1.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/fifo/mmnr.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/fifo/takahasi_base.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/fork_join/m_m_n.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/fork_join/split_join.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/impatience/mm1.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/negative/mg1_rcs.py +0 -0
- /most_queue-2.7/most_queue/theory/batch/__init__.py → /most_queue-2.9/most_queue/theory/negative/structs.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/networks/base_network_calc.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/networks/negative_network.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/networks/network_viewer.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/networks/open_network.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/networks/open_network_prty.py +0 -0
- {most_queue-2.7/most_queue/theory/closed → most_queue-2.9/most_queue/theory/networks/opt}/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/networks/opt/transition.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/networks/opt/transition_approx.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/networks/opt/transition_plus.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/priority/mgn_invar_approx.py +0 -0
- {most_queue-2.7/most_queue/theory/fork_join → most_queue-2.9/most_queue/theory/priority/non_preemptive}/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/priority/non_preemptive/mg1.py +0 -0
- {most_queue-2.7/most_queue/theory/impatience → most_queue-2.9/most_queue/theory/priority/preemptive}/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/priority/preemptive/m_ph_n_busy_approx.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/priority/preemptive/mg1.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/r_example.gexf +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/utils/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/utils/binom_probs.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/utils/conv.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/utils/diff5dots.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/utils/flow_sum.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/utils/max_dist.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/utils/moments.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/utils/q_poisson_arrival_calc.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/utils/residual.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/utils/student_stat.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/utils/transforms.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/utils/utilization_approx.py +0 -0
- {most_queue-2.7 → most_queue-2.9}/most_queue/theory/utils/validation.py +0 -0
|
@@ -162,11 +162,32 @@ cython_debug/
|
|
|
162
162
|
|
|
163
163
|
.vscode
|
|
164
164
|
|
|
165
|
-
works/negative_queues
|
|
165
|
+
# works/negative_queues (article sources, figures, scripts)
|
|
166
|
+
# keep sources in git, ignore generated artifacts and bulky results
|
|
167
|
+
works/negative_queues/*.zip
|
|
168
|
+
works/negative_queues_takahasi_takami_sources.zip
|
|
169
|
+
works/negative_queues/build/
|
|
170
|
+
works/negative_queues/results/
|
|
171
|
+
works/negative_queues/__pycache__/
|
|
172
|
+
works/negative_queues/*.aux
|
|
173
|
+
works/negative_queues/*.bbl
|
|
174
|
+
works/negative_queues/*.bcf
|
|
175
|
+
works/negative_queues/*.blg
|
|
176
|
+
works/negative_queues/*.fdb_latexmk
|
|
177
|
+
works/negative_queues/*.fls
|
|
178
|
+
works/negative_queues/*.log
|
|
179
|
+
works/negative_queues/*.out
|
|
180
|
+
works/negative_queues/*.run.xml
|
|
181
|
+
works/negative_queues/*.synctex.gz
|
|
182
|
+
works/negative_queues/*.toc
|
|
183
|
+
works/negative_queues/**/*.bkp
|
|
166
184
|
|
|
167
185
|
# ignore all png files in tests/units folder
|
|
168
186
|
tests/units/*.png
|
|
169
187
|
|
|
188
|
+
# Generated by examples/srpt_table.py (matplotlib)
|
|
189
|
+
examples/srpt_table.png
|
|
190
|
+
|
|
170
191
|
# ignore all files in works/vacations/results
|
|
171
192
|
works/vacations/results/*
|
|
172
193
|
|
|
@@ -174,3 +195,9 @@ works/vacations/results/*
|
|
|
174
195
|
docs/negative_queues_takahasi_takami.md
|
|
175
196
|
docs/negative_queues_figures/
|
|
176
197
|
docs/books/
|
|
198
|
+
docs/статьи/
|
|
199
|
+
works/queueing_systems_review/SRPT/pdf/
|
|
200
|
+
works/experiments/rabbitmq_prefetch/
|
|
201
|
+
works/reviews/
|
|
202
|
+
# RDR paper PDF (external, not redistributed) — keep only COVERAGE.md audit
|
|
203
|
+
works/articles/multichannel-pr/*.pdf
|
most_queue-2.9/PKG-INFO
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: most_queue
|
|
3
|
+
Version: 2.9
|
|
4
|
+
Summary: Software package for calculation and simulation of queuing systems
|
|
5
|
+
Project-URL: Homepage, https://github.com/xabarov/most-queue
|
|
6
|
+
Author-email: Xabarov Roman <xabarov1985@gmail.com>
|
|
7
|
+
License: Copyright (c) 2018 The Python Packaging Authority
|
|
8
|
+
|
|
9
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
10
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
11
|
+
in the Software without restriction, including without limitation the rights
|
|
12
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
13
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
14
|
+
furnished to do so, subject to the following conditions:
|
|
15
|
+
|
|
16
|
+
The above copyright notice and this permission notice shall be included in all
|
|
17
|
+
copies or substantial portions of the Software.
|
|
18
|
+
|
|
19
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
20
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
21
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
22
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
23
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
24
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
25
|
+
SOFTWARE.
|
|
26
|
+
License-File: LICENSE
|
|
27
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
28
|
+
Classifier: Operating System :: OS Independent
|
|
29
|
+
Classifier: Programming Language :: Python :: 3
|
|
30
|
+
Requires-Python: >=3.9
|
|
31
|
+
Requires-Dist: colorama
|
|
32
|
+
Requires-Dist: graphviz
|
|
33
|
+
Requires-Dist: matplotlib
|
|
34
|
+
Requires-Dist: networkx
|
|
35
|
+
Requires-Dist: numpy
|
|
36
|
+
Requires-Dist: pandas
|
|
37
|
+
Requires-Dist: pyyaml
|
|
38
|
+
Requires-Dist: scipy<2.0,>=1.13.0
|
|
39
|
+
Requires-Dist: tqdm
|
|
40
|
+
Description-Content-Type: text/markdown
|
|
41
|
+
|
|
42
|
+
<div align="center">
|
|
43
|
+
|
|
44
|
+
# Most-Queue
|
|
45
|
+
|
|
46
|
+
**Queueing theory in Python: exact analytical solvers paired with discrete-event simulation — for 50+ models from M/M/1 to multiserver-jobs, RDR priorities, SRPT scheduling, age of information, vacations and queueing networks.**
|
|
47
|
+
|
|
48
|
+
[🇷🇺 Русская версия](README.ru.md)
|
|
49
|
+
|
|
50
|
+
[](https://github.com/xabarov/most-queue/actions/workflows/tests.yml)
|
|
51
|
+
[](https://pypi.org/project/most-queue/)
|
|
52
|
+
[](https://pypi.org/project/most-queue/)
|
|
53
|
+
[](https://github.com/xabarov/most-queue/blob/main/LICENSE)
|
|
54
|
+
[](https://pepy.tech/project/most-queue)
|
|
55
|
+
[](https://doi.org/10.5281/zenodo.21268402)
|
|
56
|
+
[](https://github.com/xabarov/most-queue/commits/main)
|
|
57
|
+
|
|
58
|
+
<img src="https://raw.githubusercontent.com/xabarov/most-queue/main/assets/most-queue-nano1.jpeg" alt="Most-Queue banner" width="720"/>
|
|
59
|
+
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
## Why Most-Queue?
|
|
63
|
+
|
|
64
|
+
- **Analytics and simulation together.** Nearly every analytical calculator ships with a paired
|
|
65
|
+
discrete-event simulator, and the test suite cross-validates them against each other. You get
|
|
66
|
+
fast exact numbers *and* a way to check them.
|
|
67
|
+
- **Models you won't find elsewhere in open source**: size-based scheduling analytics
|
|
68
|
+
(SRPT, SJF, PSJF, SPJF with ML-style size predictions, FB/LAS), M/G/1 vacation models,
|
|
69
|
+
negative customers (RCS / disasters), unreliable servers, multi-server phase-type systems
|
|
70
|
+
solved by the Takahashi–Takami method (including CV < 1 via complex-fit H₂).
|
|
71
|
+
- **Moments, not just means**: waiting/sojourn time raw moments, state probabilities,
|
|
72
|
+
utilization — with a uniform `set_sources() / set_servers() / run()` API across all models.
|
|
73
|
+
- **Pure Python + NumPy/SciPy**, pip-installable, MIT license.
|
|
74
|
+
|
|
75
|
+
## Installation
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
pip install most-queue
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Requires Python ≥ 3.9. For network visualization you may also need the system `graphviz` package.
|
|
82
|
+
|
|
83
|
+
## Quick start: theory vs simulation in 20 lines
|
|
84
|
+
|
|
85
|
+
```python
|
|
86
|
+
from most_queue.theory.fifo.mmnr import MMnrCalc
|
|
87
|
+
from most_queue.sim.base import QsSim
|
|
88
|
+
|
|
89
|
+
# Analytical M/M/3 with a finite queue
|
|
90
|
+
calc = MMnrCalc(n=3, r=100)
|
|
91
|
+
calc.set_sources(l=2.0)
|
|
92
|
+
calc.set_servers(mu=1.0)
|
|
93
|
+
theory = calc.run()
|
|
94
|
+
|
|
95
|
+
# The same system, simulated
|
|
96
|
+
sim = QsSim(3)
|
|
97
|
+
sim.set_sources(2.0, "M")
|
|
98
|
+
sim.set_servers(1.0, "M")
|
|
99
|
+
experiment = sim.run(100_000)
|
|
100
|
+
|
|
101
|
+
print(f"Mean waiting time: theory {theory.w[0]:.3f} vs simulation {experiment.w[0]:.3f}")
|
|
102
|
+
# Mean waiting time: theory 0.444 vs simulation 0.448
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Showcase: who pays for the scheduling discipline?
|
|
106
|
+
|
|
107
|
+
Computed by the library's own calculators — conditional slowdown `E[T(x)]/x` by job size
|
|
108
|
+
for FCFS, PS, FB (blind) and SRPT (size-aware):
|
|
109
|
+
|
|
110
|
+
<img src="https://raw.githubusercontent.com/xabarov/most-queue/main/docs/figures/slowdown.png" alt="Slowdown by job size for FCFS/PS/FB/SRPT" width="720"/>
|
|
111
|
+
|
|
112
|
+
See the executable comparison of **9 disciplines** in
|
|
113
|
+
[`tutorials/disciplines_comparison.ipynb`](tutorials/disciplines_comparison.ipynb).
|
|
114
|
+
|
|
115
|
+
## What's inside
|
|
116
|
+
|
|
117
|
+
| Family | Models | Method |
|
|
118
|
+
|---|---|---|
|
|
119
|
+
| Classic FIFO | M/M/c, M/M/c/r, Erlang B/C, M/G/1, GI/M/c, M/D/c, Eₖ/D/c, M/G/∞ | exact |
|
|
120
|
+
| Multi-server phase-type | M/H₂/c, H₂/M/c, H₂/H₂/c (CV < 1 via complex fit) | Takahashi–Takami |
|
|
121
|
+
| Size-based scheduling | M/G/1 SRPT, SJF, PSJF, SPJF (with size predictors + graceful-degradation curves), FB/LAS, PS, LCFS-PR | exact (Schrage–Miller, Mitzenmacher) |
|
|
122
|
+
| Priorities | M/G/1 PR/NP multi-class, M/G/c PR/NP, M/Ph/c PR; **RDR** M/M/k & M/PH/k multi-class (exact + RDR-A), per-class response variance | exact / RDR / invariant approximation |
|
|
123
|
+
| Multiserver-job (MSJ) | jobs holding several servers at once — FCFS response time, saturated-system stability/throughput | exact CTMC / saturated product-form |
|
|
124
|
+
| Age of Information | M/M/1, M/G/1, preemptive-LCFS — average & peak AoI | closed-form + simulation |
|
|
125
|
+
| Vacations & warm-up | M/G/1 multiple vacations, N-policy, warm-up/cooling/delay (M/Ph/c) | Fuhrmann–Cooper, Takahashi–Takami |
|
|
126
|
+
| Negative customers | M/G/1 and M/G/c with RCS or disasters | exact / Takahashi–Takami |
|
|
127
|
+
| Reliability | M/G/1 with breakdowns & repairs | Avi-Itzhak–Naor |
|
|
128
|
+
| Matrix-analytic (MAP/PH) | MAP/PH/1, M/PH/1, PH/PH/1, MAP/M/c, MAP/PH/c — correlated (bursty) arrivals, single- & multi-server; MMPP fitting | QBD, logarithmic reduction |
|
|
129
|
+
| Batch Markovian arrivals | BMAP/M/1, BMAP/PH/1 — correlated batch traffic | level truncation |
|
|
130
|
+
| Retrial & abandonment | M/M/1 and M/G/1 retrial (orbit), Erlang-A (M/M/n+M) with staffing | exact / Falin–Templeton |
|
|
131
|
+
| GI/G approximations | GI/G/1, GI/G/m mean waiting time | Kingman, Krämer–Langenbach-Belz, Allen–Cunneen |
|
|
132
|
+
| Batch arrivals & bulk service | Mˣ/M/1 batch arrivals; M/M^[a,b]/1 bulk (batch) service — LLM inference batching | exact |
|
|
133
|
+
| Impatience & closed | M/M/1+M, Engset | exact |
|
|
134
|
+
| Parallel service | Fork-Join, Split-Join | Markovian / order statistics |
|
|
135
|
+
| Networks | open networks, priority networks, networks with negative customers, routing optimization | decomposition |
|
|
136
|
+
|
|
137
|
+
Every model comes with a plain-language explanation and a diagram in the
|
|
138
|
+
[illustrated model catalog](docs/models.md).
|
|
139
|
+
|
|
140
|
+
## Documentation & tutorials
|
|
141
|
+
|
|
142
|
+
- 📖 [Documentation](docs/README.md) — concepts, calculation and simulation guides (English; Russian versions available via in-page switchers)
|
|
143
|
+
- 🎓 [Jupyter tutorials](tutorials/) — from a first M/M/1 to Takahashi–Takami and SRPT
|
|
144
|
+
- 🗺 [Development roadmaps](docs/epics/README.md) — what's next (closed networks / MVA, multi-server retrial, polling)
|
|
145
|
+
- 🧪 [Tests](tests/) — every model validated against simulation; run with `pytest -m "not slow"`
|
|
146
|
+
|
|
147
|
+
## Applications
|
|
148
|
+
|
|
149
|
+
Capacity planning for cloud services and data centers · call-center staffing ·
|
|
150
|
+
manufacturing lines · telecom traffic · healthcare resource planning ·
|
|
151
|
+
scheduling research (SRPT/LAS with ML size predictions).
|
|
152
|
+
|
|
153
|
+
## Recent highlights
|
|
154
|
+
|
|
155
|
+
- **2026 (v2.9)** — **Datacenter & multi-priority wave**: **RDR** for multi-server multi-class
|
|
156
|
+
preemptive priorities (M/M/k and M/PH/k, exact + RDR-A, per-class response-time variance);
|
|
157
|
+
the **multiserver-job** model (jobs holding several servers at once — FCFS response time and
|
|
158
|
+
saturated-system stability, the first open-source implementation); **Age of Information**
|
|
159
|
+
(average & peak AoI); **bulk-service** queues for LLM inference batching; and
|
|
160
|
+
**graceful-degradation curves** for prediction-based scheduling. See the
|
|
161
|
+
[trends survey](docs/research/queueing-trends-2026.md).
|
|
162
|
+
- **2026** — **Matrix-analytic MAP/PH stack**: PH distributions and MAPs
|
|
163
|
+
(`most_queue.random.map_ph`), a QBD solver with logarithmic reduction, and exact calculators
|
|
164
|
+
for MAP/PH/1, M/PH/1, PH/PH/1, **MAP/M/c**, **MAP/PH/c**, plus **BMAP/M/1** and **BMAP/PH/1**
|
|
165
|
+
for batch arrivals and **MMPP fitting** from data; MAP and PH sources in the simulator. Plus
|
|
166
|
+
retrial queues (orbit) and Erlang-A abandonment with a staffing helper.
|
|
167
|
+
See [`tutorials/map_ph_correlation.ipynb`](tutorials/map_ph_correlation.ipynb).
|
|
168
|
+
- **2026** — Wave of exact classics: Erlang B/C, M/G/∞, GI/G approximations, M/G/1 vacation
|
|
169
|
+
models (multiple vacations, N-policy), PS, LCFS-PR, FB/LAS, unreliable server — each with a
|
|
170
|
+
paired simulator and tests. Illustrated model catalog with generated diagrams.
|
|
171
|
+
- **2026** — Size-based scheduling analytics: SRPT / SJF / PSJF / SPJF with prediction models
|
|
172
|
+
(reproduces the Mitzenmacher–Shahout 2025 table in tests) + `SizeBasedQsSim`.
|
|
173
|
+
- **2026 (preprint)** — Multi-server queues with negative customers via Takahashi–Takami:
|
|
174
|
+
[preprint & reproduction code](works/negative_queues/).
|
|
175
|
+
- **2025 (paper)** — Multi-channel system with warm-up, cooling and cooling delay:
|
|
176
|
+
Lokhvitsky, Khabarov, Yakovlev, DOI [10.25791/aviakosmos.1.2025.1456](https://doi.org/10.25791/aviakosmos.1.2025.1456).
|
|
177
|
+
|
|
178
|
+
## Contributing
|
|
179
|
+
|
|
180
|
+
Issues and pull requests are welcome! Open an [issue](https://github.com/xabarov/most-queue/issues)
|
|
181
|
+
for bugs or model requests. Development conventions: [docs/PROJECT.md](docs/PROJECT.md),
|
|
182
|
+
definition of done: [docs/DOD.md](docs/DOD.md).
|
|
183
|
+
|
|
184
|
+
## Citation
|
|
185
|
+
|
|
186
|
+
If you use Most-Queue in research, please cite it (see [`CITATION.cff`](CITATION.cff)):
|
|
187
|
+
|
|
188
|
+
```bibtex
|
|
189
|
+
@software{most_queue,
|
|
190
|
+
author = {Khabarov, Roman},
|
|
191
|
+
title = {Most-Queue: queueing theory calculations and simulation in Python},
|
|
192
|
+
url = {https://github.com/xabarov/most-queue},
|
|
193
|
+
doi = {10.5281/zenodo.21268402},
|
|
194
|
+
license = {MIT}
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## License
|
|
199
|
+
|
|
200
|
+
[MIT](LICENSE) © Roman Khabarov
|
most_queue-2.9/README.md
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# Most-Queue
|
|
4
|
+
|
|
5
|
+
**Queueing theory in Python: exact analytical solvers paired with discrete-event simulation — for 50+ models from M/M/1 to multiserver-jobs, RDR priorities, SRPT scheduling, age of information, vacations and queueing networks.**
|
|
6
|
+
|
|
7
|
+
[🇷🇺 Русская версия](README.ru.md)
|
|
8
|
+
|
|
9
|
+
[](https://github.com/xabarov/most-queue/actions/workflows/tests.yml)
|
|
10
|
+
[](https://pypi.org/project/most-queue/)
|
|
11
|
+
[](https://pypi.org/project/most-queue/)
|
|
12
|
+
[](https://github.com/xabarov/most-queue/blob/main/LICENSE)
|
|
13
|
+
[](https://pepy.tech/project/most-queue)
|
|
14
|
+
[](https://doi.org/10.5281/zenodo.21268402)
|
|
15
|
+
[](https://github.com/xabarov/most-queue/commits/main)
|
|
16
|
+
|
|
17
|
+
<img src="https://raw.githubusercontent.com/xabarov/most-queue/main/assets/most-queue-nano1.jpeg" alt="Most-Queue banner" width="720"/>
|
|
18
|
+
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
## Why Most-Queue?
|
|
22
|
+
|
|
23
|
+
- **Analytics and simulation together.** Nearly every analytical calculator ships with a paired
|
|
24
|
+
discrete-event simulator, and the test suite cross-validates them against each other. You get
|
|
25
|
+
fast exact numbers *and* a way to check them.
|
|
26
|
+
- **Models you won't find elsewhere in open source**: size-based scheduling analytics
|
|
27
|
+
(SRPT, SJF, PSJF, SPJF with ML-style size predictions, FB/LAS), M/G/1 vacation models,
|
|
28
|
+
negative customers (RCS / disasters), unreliable servers, multi-server phase-type systems
|
|
29
|
+
solved by the Takahashi–Takami method (including CV < 1 via complex-fit H₂).
|
|
30
|
+
- **Moments, not just means**: waiting/sojourn time raw moments, state probabilities,
|
|
31
|
+
utilization — with a uniform `set_sources() / set_servers() / run()` API across all models.
|
|
32
|
+
- **Pure Python + NumPy/SciPy**, pip-installable, MIT license.
|
|
33
|
+
|
|
34
|
+
## Installation
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
pip install most-queue
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Requires Python ≥ 3.9. For network visualization you may also need the system `graphviz` package.
|
|
41
|
+
|
|
42
|
+
## Quick start: theory vs simulation in 20 lines
|
|
43
|
+
|
|
44
|
+
```python
|
|
45
|
+
from most_queue.theory.fifo.mmnr import MMnrCalc
|
|
46
|
+
from most_queue.sim.base import QsSim
|
|
47
|
+
|
|
48
|
+
# Analytical M/M/3 with a finite queue
|
|
49
|
+
calc = MMnrCalc(n=3, r=100)
|
|
50
|
+
calc.set_sources(l=2.0)
|
|
51
|
+
calc.set_servers(mu=1.0)
|
|
52
|
+
theory = calc.run()
|
|
53
|
+
|
|
54
|
+
# The same system, simulated
|
|
55
|
+
sim = QsSim(3)
|
|
56
|
+
sim.set_sources(2.0, "M")
|
|
57
|
+
sim.set_servers(1.0, "M")
|
|
58
|
+
experiment = sim.run(100_000)
|
|
59
|
+
|
|
60
|
+
print(f"Mean waiting time: theory {theory.w[0]:.3f} vs simulation {experiment.w[0]:.3f}")
|
|
61
|
+
# Mean waiting time: theory 0.444 vs simulation 0.448
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Showcase: who pays for the scheduling discipline?
|
|
65
|
+
|
|
66
|
+
Computed by the library's own calculators — conditional slowdown `E[T(x)]/x` by job size
|
|
67
|
+
for FCFS, PS, FB (blind) and SRPT (size-aware):
|
|
68
|
+
|
|
69
|
+
<img src="https://raw.githubusercontent.com/xabarov/most-queue/main/docs/figures/slowdown.png" alt="Slowdown by job size for FCFS/PS/FB/SRPT" width="720"/>
|
|
70
|
+
|
|
71
|
+
See the executable comparison of **9 disciplines** in
|
|
72
|
+
[`tutorials/disciplines_comparison.ipynb`](tutorials/disciplines_comparison.ipynb).
|
|
73
|
+
|
|
74
|
+
## What's inside
|
|
75
|
+
|
|
76
|
+
| Family | Models | Method |
|
|
77
|
+
|---|---|---|
|
|
78
|
+
| Classic FIFO | M/M/c, M/M/c/r, Erlang B/C, M/G/1, GI/M/c, M/D/c, Eₖ/D/c, M/G/∞ | exact |
|
|
79
|
+
| Multi-server phase-type | M/H₂/c, H₂/M/c, H₂/H₂/c (CV < 1 via complex fit) | Takahashi–Takami |
|
|
80
|
+
| Size-based scheduling | M/G/1 SRPT, SJF, PSJF, SPJF (with size predictors + graceful-degradation curves), FB/LAS, PS, LCFS-PR | exact (Schrage–Miller, Mitzenmacher) |
|
|
81
|
+
| Priorities | M/G/1 PR/NP multi-class, M/G/c PR/NP, M/Ph/c PR; **RDR** M/M/k & M/PH/k multi-class (exact + RDR-A), per-class response variance | exact / RDR / invariant approximation |
|
|
82
|
+
| Multiserver-job (MSJ) | jobs holding several servers at once — FCFS response time, saturated-system stability/throughput | exact CTMC / saturated product-form |
|
|
83
|
+
| Age of Information | M/M/1, M/G/1, preemptive-LCFS — average & peak AoI | closed-form + simulation |
|
|
84
|
+
| Vacations & warm-up | M/G/1 multiple vacations, N-policy, warm-up/cooling/delay (M/Ph/c) | Fuhrmann–Cooper, Takahashi–Takami |
|
|
85
|
+
| Negative customers | M/G/1 and M/G/c with RCS or disasters | exact / Takahashi–Takami |
|
|
86
|
+
| Reliability | M/G/1 with breakdowns & repairs | Avi-Itzhak–Naor |
|
|
87
|
+
| Matrix-analytic (MAP/PH) | MAP/PH/1, M/PH/1, PH/PH/1, MAP/M/c, MAP/PH/c — correlated (bursty) arrivals, single- & multi-server; MMPP fitting | QBD, logarithmic reduction |
|
|
88
|
+
| Batch Markovian arrivals | BMAP/M/1, BMAP/PH/1 — correlated batch traffic | level truncation |
|
|
89
|
+
| Retrial & abandonment | M/M/1 and M/G/1 retrial (orbit), Erlang-A (M/M/n+M) with staffing | exact / Falin–Templeton |
|
|
90
|
+
| GI/G approximations | GI/G/1, GI/G/m mean waiting time | Kingman, Krämer–Langenbach-Belz, Allen–Cunneen |
|
|
91
|
+
| Batch arrivals & bulk service | Mˣ/M/1 batch arrivals; M/M^[a,b]/1 bulk (batch) service — LLM inference batching | exact |
|
|
92
|
+
| Impatience & closed | M/M/1+M, Engset | exact |
|
|
93
|
+
| Parallel service | Fork-Join, Split-Join | Markovian / order statistics |
|
|
94
|
+
| Networks | open networks, priority networks, networks with negative customers, routing optimization | decomposition |
|
|
95
|
+
|
|
96
|
+
Every model comes with a plain-language explanation and a diagram in the
|
|
97
|
+
[illustrated model catalog](docs/models.md).
|
|
98
|
+
|
|
99
|
+
## Documentation & tutorials
|
|
100
|
+
|
|
101
|
+
- 📖 [Documentation](docs/README.md) — concepts, calculation and simulation guides (English; Russian versions available via in-page switchers)
|
|
102
|
+
- 🎓 [Jupyter tutorials](tutorials/) — from a first M/M/1 to Takahashi–Takami and SRPT
|
|
103
|
+
- 🗺 [Development roadmaps](docs/epics/README.md) — what's next (closed networks / MVA, multi-server retrial, polling)
|
|
104
|
+
- 🧪 [Tests](tests/) — every model validated against simulation; run with `pytest -m "not slow"`
|
|
105
|
+
|
|
106
|
+
## Applications
|
|
107
|
+
|
|
108
|
+
Capacity planning for cloud services and data centers · call-center staffing ·
|
|
109
|
+
manufacturing lines · telecom traffic · healthcare resource planning ·
|
|
110
|
+
scheduling research (SRPT/LAS with ML size predictions).
|
|
111
|
+
|
|
112
|
+
## Recent highlights
|
|
113
|
+
|
|
114
|
+
- **2026 (v2.9)** — **Datacenter & multi-priority wave**: **RDR** for multi-server multi-class
|
|
115
|
+
preemptive priorities (M/M/k and M/PH/k, exact + RDR-A, per-class response-time variance);
|
|
116
|
+
the **multiserver-job** model (jobs holding several servers at once — FCFS response time and
|
|
117
|
+
saturated-system stability, the first open-source implementation); **Age of Information**
|
|
118
|
+
(average & peak AoI); **bulk-service** queues for LLM inference batching; and
|
|
119
|
+
**graceful-degradation curves** for prediction-based scheduling. See the
|
|
120
|
+
[trends survey](docs/research/queueing-trends-2026.md).
|
|
121
|
+
- **2026** — **Matrix-analytic MAP/PH stack**: PH distributions and MAPs
|
|
122
|
+
(`most_queue.random.map_ph`), a QBD solver with logarithmic reduction, and exact calculators
|
|
123
|
+
for MAP/PH/1, M/PH/1, PH/PH/1, **MAP/M/c**, **MAP/PH/c**, plus **BMAP/M/1** and **BMAP/PH/1**
|
|
124
|
+
for batch arrivals and **MMPP fitting** from data; MAP and PH sources in the simulator. Plus
|
|
125
|
+
retrial queues (orbit) and Erlang-A abandonment with a staffing helper.
|
|
126
|
+
See [`tutorials/map_ph_correlation.ipynb`](tutorials/map_ph_correlation.ipynb).
|
|
127
|
+
- **2026** — Wave of exact classics: Erlang B/C, M/G/∞, GI/G approximations, M/G/1 vacation
|
|
128
|
+
models (multiple vacations, N-policy), PS, LCFS-PR, FB/LAS, unreliable server — each with a
|
|
129
|
+
paired simulator and tests. Illustrated model catalog with generated diagrams.
|
|
130
|
+
- **2026** — Size-based scheduling analytics: SRPT / SJF / PSJF / SPJF with prediction models
|
|
131
|
+
(reproduces the Mitzenmacher–Shahout 2025 table in tests) + `SizeBasedQsSim`.
|
|
132
|
+
- **2026 (preprint)** — Multi-server queues with negative customers via Takahashi–Takami:
|
|
133
|
+
[preprint & reproduction code](works/negative_queues/).
|
|
134
|
+
- **2025 (paper)** — Multi-channel system with warm-up, cooling and cooling delay:
|
|
135
|
+
Lokhvitsky, Khabarov, Yakovlev, DOI [10.25791/aviakosmos.1.2025.1456](https://doi.org/10.25791/aviakosmos.1.2025.1456).
|
|
136
|
+
|
|
137
|
+
## Contributing
|
|
138
|
+
|
|
139
|
+
Issues and pull requests are welcome! Open an [issue](https://github.com/xabarov/most-queue/issues)
|
|
140
|
+
for bugs or model requests. Development conventions: [docs/PROJECT.md](docs/PROJECT.md),
|
|
141
|
+
definition of done: [docs/DOD.md](docs/DOD.md).
|
|
142
|
+
|
|
143
|
+
## Citation
|
|
144
|
+
|
|
145
|
+
If you use Most-Queue in research, please cite it (see [`CITATION.cff`](CITATION.cff)):
|
|
146
|
+
|
|
147
|
+
```bibtex
|
|
148
|
+
@software{most_queue,
|
|
149
|
+
author = {Khabarov, Roman},
|
|
150
|
+
title = {Most-Queue: queueing theory calculations and simulation in Python},
|
|
151
|
+
url = {https://github.com/xabarov/most-queue},
|
|
152
|
+
doi = {10.5281/zenodo.21268402},
|
|
153
|
+
license = {MIT}
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## License
|
|
158
|
+
|
|
159
|
+
[MIT](LICENSE) © Roman Khabarov
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Most-Queue Library Documentation
|
|
2
|
+
|
|
3
|
+
[🇷🇺 Русская версия](README.ru.md)
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
**Most-Queue** is a Python library for simulation and numerical analysis of queueing systems and queueing networks.
|
|
8
|
+
|
|
9
|
+
## 📚 Documentation Guide
|
|
10
|
+
|
|
11
|
+
### Getting Started
|
|
12
|
+
- **[Quick Start](getting_started.md)** — installation and first usage examples
|
|
13
|
+
- **[Core Concepts](concepts.md)** — queueing theory and terminology
|
|
14
|
+
- **[Thesaurus](tesaurus.md)** — glossary of queueing theory terms
|
|
15
|
+
|
|
16
|
+
### Main Sections
|
|
17
|
+
- **[Queueing System Simulation](simulation.md)** — guide to modeling queueing systems (including the *SizeBasedQsSim* section — SRPT, SJF, SPJF, etc.)
|
|
18
|
+
- **[Numerical Methods](calculation.md)** — computing queueing system characteristics with analytical methods (including the *Size-based M/G/1 calculators* section)
|
|
19
|
+
- **[Distributions](distributions.md)** — reference for supported distributions
|
|
20
|
+
- **[Queueing Models](models.md)** — catalog of supported queueing system types
|
|
21
|
+
|
|
22
|
+
### For Developers
|
|
23
|
+
- **[Project Overview](PROJECT.md)** (in Russian) — repository layout, conventions, where to find the theory
|
|
24
|
+
- **[Infrastructure](INFRASTRUCTURE.md)** (in Russian) — building, testing, code quality, publishing
|
|
25
|
+
- **[Definition of Done](DOD.md)** (in Russian) — task completion criteria
|
|
26
|
+
- **[Epics](epics/README.md)** (in Russian) — planning of major development directions
|
|
27
|
+
- **[Model Gap Analysis](models_gap_analysis.md)** (in Russian) — what is implemented, what is missing, priorities (EPIC-001)
|
|
28
|
+
|
|
29
|
+
### Specialized Topics
|
|
30
|
+
- **[SRPT / SPJF: Calculation Methods and Verification](srpt_spjf_methods.md)** — formulas, numerical scheme (grids, Simpson, quad), comparison with `SizeBasedQsSim` and tests (per the [roadmap](roadmaps/srpt_spjf_roadmap.md) (in Russian))
|
|
31
|
+
- **[Queueing Networks](networks.md)** — simulation and calculation of queueing networks
|
|
32
|
+
- **[Priority Systems](priorities.md)** — systems with priority service
|
|
33
|
+
- **[Disasters (negative customers): Time Characteristics](negative_disasters_time_characteristics.md)** — computing \(W, V, V_{served}, V_{broken}\) via LST
|
|
34
|
+
- **[RCS (negative customers): Time Characteristics](negative_rcs_time_characteristics.md)** — computing \(W, V, V_{served}, V_{broken}\) in the RCS model
|
|
35
|
+
- **[Advanced Examples](examples.md)** — practical cases and complex scenarios
|
|
36
|
+
|
|
37
|
+
## 🎯 Key Features
|
|
38
|
+
|
|
39
|
+
### Simulation
|
|
40
|
+
- Modeling of various queueing system types (M/M/c, M/G/1, GI/M/c, and others)
|
|
41
|
+
- Support for a variety of arrival and service time distributions
|
|
42
|
+
- Systems with priorities, vacations, negative customers
|
|
43
|
+
- Fork-Join and Split-Join systems
|
|
44
|
+
- Queueing networks
|
|
45
|
+
|
|
46
|
+
### Numerical Methods
|
|
47
|
+
- Analytical calculation of steady-state characteristics
|
|
48
|
+
- Methods for various queueing system types
|
|
49
|
+
- High calculation accuracy
|
|
50
|
+
- Fast results
|
|
51
|
+
|
|
52
|
+
### Result Analysis
|
|
53
|
+
- Moments of waiting and sojourn times
|
|
54
|
+
- System state probabilities
|
|
55
|
+
- Utilization factor
|
|
56
|
+
- Visualization and result tables
|
|
57
|
+
|
|
58
|
+
## 📦 Installation
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
pip install most-queue
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Or install from the repository:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
pip install -e .
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## 🔍 Quick Example
|
|
71
|
+
|
|
72
|
+
```python
|
|
73
|
+
from most_queue.sim.base import QsSim
|
|
74
|
+
|
|
75
|
+
# Create an M/M/1 system simulator
|
|
76
|
+
qs = QsSim(num_of_channels=1)
|
|
77
|
+
|
|
78
|
+
# Configure the arrival process (Poisson with rate 0.5)
|
|
79
|
+
qs.set_sources(0.5, "M")
|
|
80
|
+
|
|
81
|
+
# Configure the service (exponential with rate 1.0)
|
|
82
|
+
qs.set_servers(1.0, "M")
|
|
83
|
+
|
|
84
|
+
# Run the simulation for 10000 jobs
|
|
85
|
+
results = qs.run(10000)
|
|
86
|
+
|
|
87
|
+
# Get the results
|
|
88
|
+
print(f"Mean waiting time: {results.w[0]:.4f}")
|
|
89
|
+
print(f"Mean sojourn time: {results.v[0]:.4f}")
|
|
90
|
+
print(f"Utilization factor: {results.utilization:.4f}")
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## 📖 Library Structure
|
|
94
|
+
|
|
95
|
+
The library consists of two main modules:
|
|
96
|
+
|
|
97
|
+
- **`most_queue.sim`** — queueing system simulation module
|
|
98
|
+
- **`most_queue.theory`** — numerical calculation methods module
|
|
99
|
+
|
|
100
|
+
## 🧪 Examples and Tests
|
|
101
|
+
|
|
102
|
+
- Usage examples can be found in the [`tests/`](../tests/) folder
|
|
103
|
+
- Jupyter tutorials are available in the [`tutorials/`](../tutorials/) folder
|
|
104
|
+
|
|
105
|
+
## 📝 Version
|
|
106
|
+
|
|
107
|
+
Current version: **2.8**
|
|
108
|
+
|
|
109
|
+
## 🔗 Useful Links
|
|
110
|
+
|
|
111
|
+
- [GitHub Repository](https://github.com/xabarov/most-queue)
|
|
112
|
+
- [Issues and Suggestions](https://github.com/xabarov/most-queue/issues)
|
|
113
|
+
|
|
114
|
+
## 👥 Contact
|
|
115
|
+
|
|
116
|
+
For questions and suggestions: xabarov1985@gmail.com
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
**Note**: This documentation is in English. Russian versions of the pages are available via the language-switcher links at the top of each page.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Эпики Most-Queue
|
|
2
|
+
|
|
3
|
+
Папка с эпиками — крупными направлениями разработки. Каждый эпик — отдельный файл
|
|
4
|
+
`EPIC-NNN-<slug>.md` с последовательной нумерацией.
|
|
5
|
+
|
|
6
|
+
## Процесс
|
|
7
|
+
|
|
8
|
+
1. Новое направление → новый файл эпика по шаблону ниже, статус `proposed`.
|
|
9
|
+
2. Эпик декомпозируется на задачи (чек-лист внутри файла). Детальный технический план
|
|
10
|
+
при необходимости выносится в `docs/roadmaps/` (взаимные ссылки обязательны).
|
|
11
|
+
3. В работе — статус `in progress`; по завершении — `done` + раздел «Результаты».
|
|
12
|
+
Критерии готовности — [../DOD.md](../DOD.md).
|
|
13
|
+
4. Статусы задач отмечаются прямо в чек-листе эпика; история — через git.
|
|
14
|
+
|
|
15
|
+
## Шаблон эпика
|
|
16
|
+
|
|
17
|
+
```markdown
|
|
18
|
+
# EPIC-NNN: <Название>
|
|
19
|
+
|
|
20
|
+
- **Статус:** proposed | in progress | done | dropped
|
|
21
|
+
- **Создан:** YYYY-MM-DD
|
|
22
|
+
- **Roadmap:** ссылка на docs/roadmaps/... (если есть)
|
|
23
|
+
|
|
24
|
+
## Цель
|
|
25
|
+
Зачем это нужно и что изменится в библиотеке.
|
|
26
|
+
|
|
27
|
+
## Контекст
|
|
28
|
+
Текущее состояние, источники, ограничения.
|
|
29
|
+
|
|
30
|
+
## Задачи
|
|
31
|
+
- [ ] ...
|
|
32
|
+
|
|
33
|
+
## Критерии готовности (DoD эпика)
|
|
34
|
+
Специфичные для эпика критерии + общий DoD.
|
|
35
|
+
|
|
36
|
+
## Результаты
|
|
37
|
+
Заполняется по завершении.
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Реестр эпиков
|
|
41
|
+
|
|
42
|
+
| № | Эпик | Статус |
|
|
43
|
+
|---|------|--------|
|
|
44
|
+
| [EPIC-001](EPIC-001-queueing-models-gap-analysis.md) | Исследование: модели теории очередей vs реализованные | done |
|
|
45
|
+
| [EPIC-002](EPIC-002-wave1-exact-models.md) | Волна 1: точные базовые модели (Erlang B/C, M/G/∞, GI/G, vacations, PS/FB, breakdowns) | done |
|
|
46
|
+
| [EPIC-003](EPIC-003-qbd-map-ph.md) | QBD/MAP/PH-стек (матрично-аналитические методы) | done |
|
|
47
|
+
| [EPIC-004](EPIC-004-retrial-erlang-a.md) | Retrial-очереди и Erlang-A | done |
|
|
48
|
+
| [EPIC-005](EPIC-005-illustrated-catalog.md) | Иллюстрированный каталог моделей (простые описания + схемы) | done |
|
|
49
|
+
| [EPIC-006](EPIC-006-english-docs.md) | EN-центричная документация (перевод + двуязычные схемы) | done |
|
|
50
|
+
| [EPIC-007](EPIC-007-map-phase2.md) | MAP-стек, фаза 2 (MAP/M/c, MAP/PH/c, фиттинг, BMAP/M/1) | done |
|
|
51
|
+
| [EPIC-008](EPIC-008-map-phase3.md) | MAP-стек, фаза 3 (BMAP/PH/1 общего вида) | done |
|
|
52
|
+
| [EPIC-009](EPIC-009-rdr-priority.md) | RDR: многоканальные многоприоритетные СМО (оптимизация G-матрицы + RDR-A + точная CTMC + фикс сходимости + аудит статьи) | done |
|
|
53
|
+
| [EPIC-010](EPIC-010-age-of-information.md) | Age of Information (AoI/PAoI) — свежесть информации | done |
|
|
54
|
+
| [EPIC-011](EPIC-011-multiserver-job.md) | Multiserver-job (MSJ): заявка занимает k серверов одновременно | done |
|
|
55
|
+
| [EPIC-012](EPIC-012-bulk-service.md) | Bulk-service очереди (batching, LLM inference) | done |
|
|
56
|
+
| [EPIC-013](EPIC-013-predictions-scheduling.md) | Планирование с предсказаниями (learning-augmented) | done |
|
|
57
|
+
|
|
58
|
+
Направления EPIC-010…013 выбраны по обзору трендов сообщества:
|
|
59
|
+
[../research/queueing-trends-2026.md](../research/queueing-trends-2026.md).
|
|
@@ -5,12 +5,18 @@ This package provides both simulation and numerical calculation methods
|
|
|
5
5
|
for various types of queueing systems and networks.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
9
9
|
|
|
10
10
|
# Import main simulation and theory classes for easy access
|
|
11
11
|
from most_queue.sim.base import QsSim
|
|
12
12
|
from most_queue.theory.base_queue import BaseQueue
|
|
13
13
|
|
|
14
|
+
try:
|
|
15
|
+
# single source of truth for the version: the installed package metadata
|
|
16
|
+
__version__ = version("most-queue")
|
|
17
|
+
except PackageNotFoundError: # running from a source checkout that is not installed
|
|
18
|
+
__version__ = "0.0.0.dev0"
|
|
19
|
+
|
|
14
20
|
__all__ = [
|
|
15
21
|
"QsSim",
|
|
16
22
|
"BaseQueue",
|