most-queue 2.6__tar.gz → 2.8__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.8/.claude/skills/lit-search/SKILL.md +39 -0
- most_queue-2.8/.claude/skills/lit-search/lit_search.py +144 -0
- most_queue-2.8/.cursor/rules/pytest-quality.mdc +45 -0
- most_queue-2.8/.cursor/rules/python-quality.mdc +98 -0
- most_queue-2.8/.cursor/skills/add-theory-calculator/SKILL.md +130 -0
- most_queue-2.8/.cursor/skills/theory-vs-sim-test/SKILL.md +122 -0
- most_queue-2.8/.cursorrules +3 -0
- most_queue-2.8/.gitattributes +6 -0
- most_queue-2.8/.github/workflows/tests.yml +34 -0
- {most_queue-2.6 → most_queue-2.8}/.gitignore +30 -1
- {most_queue-2.6 → most_queue-2.8}/.pre-commit-config.yaml +1 -0
- most_queue-2.8/CITATION.cff +37 -0
- most_queue-2.8/PKG-INFO +185 -0
- most_queue-2.8/README.md +144 -0
- most_queue-2.8/README.ru.md +153 -0
- most_queue-2.8/assets/most-queue-logo.png +0 -0
- most_queue-2.8/assets/most-queue-nano.png +0 -0
- most_queue-2.8/assets/most-queue-nano1.jpeg +0 -0
- most_queue-2.8/assets/most-queue-nano2.jpeg +0 -0
- most_queue-2.8/docs/DOD.md +50 -0
- most_queue-2.8/docs/INFRASTRUCTURE.md +56 -0
- most_queue-2.8/docs/PROJECT.md +92 -0
- most_queue-2.8/docs/README.md +120 -0
- most_queue-2.6/docs/README.md → most_queue-2.8/docs/README.ru.md +24 -13
- most_queue-2.8/docs/calculation.md +541 -0
- most_queue-2.6/docs/calculation.md → most_queue-2.8/docs/calculation.ru.md +191 -14
- most_queue-2.8/docs/concepts.md +335 -0
- most_queue-2.6/docs/concepts.md → most_queue-2.8/docs/concepts.ru.md +22 -4
- most_queue-2.8/docs/custom_simulators.md +431 -0
- most_queue-2.8/docs/custom_simulators.ru.md +432 -0
- most_queue-2.8/docs/distributions.md +430 -0
- most_queue-2.6/docs/distributions.md → most_queue-2.8/docs/distributions.ru.md +5 -3
- most_queue-2.8/docs/epics/EPIC-001-queueing-models-gap-analysis.md +142 -0
- most_queue-2.8/docs/epics/EPIC-002-wave1-exact-models.md +86 -0
- most_queue-2.8/docs/epics/EPIC-003-qbd-map-ph.md +57 -0
- most_queue-2.8/docs/epics/EPIC-004-retrial-erlang-a.md +48 -0
- most_queue-2.8/docs/epics/EPIC-005-illustrated-catalog.md +45 -0
- most_queue-2.8/docs/epics/EPIC-006-english-docs.md +41 -0
- most_queue-2.8/docs/epics/README.md +48 -0
- most_queue-2.8/docs/examples.md +406 -0
- most_queue-2.6/docs/examples.md → most_queue-2.8/docs/examples.ru.md +5 -3
- most_queue-2.8/docs/figures/batch.png +0 -0
- most_queue-2.8/docs/figures/disciplines_timeline.png +0 -0
- most_queue-2.8/docs/figures/engset.png +0 -0
- most_queue-2.8/docs/figures/fifo_mmn.png +0 -0
- most_queue-2.8/docs/figures/fork_join.png +0 -0
- most_queue-2.8/docs/figures/generate_figures.py +814 -0
- most_queue-2.8/docs/figures/impatience.png +0 -0
- most_queue-2.8/docs/figures/lcfs_pr.png +0 -0
- most_queue-2.8/docs/figures/loss.png +0 -0
- most_queue-2.8/docs/figures/m_g_inf.png +0 -0
- most_queue-2.8/docs/figures/map_arrivals.png +0 -0
- most_queue-2.8/docs/figures/n_policy.png +0 -0
- most_queue-2.8/docs/figures/negative.png +0 -0
- most_queue-2.8/docs/figures/priority.png +0 -0
- most_queue-2.8/docs/figures/ps.png +0 -0
- most_queue-2.8/docs/figures/retrial.png +0 -0
- most_queue-2.8/docs/figures/slowdown.png +0 -0
- most_queue-2.8/docs/figures/slowdown_en.png +0 -0
- most_queue-2.8/docs/figures/unreliable.png +0 -0
- most_queue-2.8/docs/figures/vacations.png +0 -0
- most_queue-2.8/docs/getting_started.md +183 -0
- most_queue-2.6/docs/getting_started.md → most_queue-2.8/docs/getting_started.ru.md +6 -5
- most_queue-2.8/docs/models.md +1046 -0
- most_queue-2.8/docs/models.ru.md +996 -0
- most_queue-2.8/docs/models_gap_analysis.md +151 -0
- most_queue-2.8/docs/negative_disasters_time_characteristics.md +146 -0
- most_queue-2.8/docs/negative_disasters_time_characteristics.ru.md +147 -0
- most_queue-2.8/docs/negative_networks_calculation.md +301 -0
- most_queue-2.8/docs/negative_networks_calculation.ru.md +302 -0
- most_queue-2.8/docs/negative_rcs_time_characteristics.md +102 -0
- most_queue-2.8/docs/negative_rcs_time_characteristics.ru.md +103 -0
- most_queue-2.8/docs/networks.md +648 -0
- most_queue-2.6/docs/networks.md → most_queue-2.8/docs/networks.ru.md +279 -3
- most_queue-2.8/docs/priorities.md +331 -0
- most_queue-2.6/docs/priorities.md → most_queue-2.8/docs/priorities.ru.md +5 -3
- most_queue-2.8/docs/roadmaps/qbd_map_ph_roadmap.md +67 -0
- most_queue-2.8/docs/roadmaps/retrial_erlang_a_roadmap.md +62 -0
- most_queue-2.8/docs/roadmaps/srpt_spjf_roadmap.md +269 -0
- most_queue-2.8/docs/roadmaps/wave1_exact_models_roadmap.md +92 -0
- most_queue-2.8/docs/simulation.md +428 -0
- most_queue-2.6/docs/simulation.md → most_queue-2.8/docs/simulation.ru.md +54 -5
- most_queue-2.8/docs/srpt_spjf_methods.md +165 -0
- most_queue-2.8/docs/srpt_spjf_methods.ru.md +165 -0
- most_queue-2.8/docs/tesaurus.md +287 -0
- most_queue-2.6/docs/tesaurus.md → most_queue-2.8/docs/tesaurus.ru.md +3 -1
- most_queue-2.8/examples/custom_network_example.py +161 -0
- most_queue-2.8/examples/custom_simulator_example.py +143 -0
- most_queue-2.8/examples/srpt_table.py +153 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/__init__.py +1 -1
- {most_queue-2.6 → most_queue-2.8}/most_queue/io/plots.py +41 -5
- {most_queue-2.6 → most_queue-2.8}/most_queue/misc/calc_v_pls.py +1 -1
- {most_queue-2.6 → most_queue-2.8}/most_queue/random/distributions.py +62 -0
- most_queue-2.8/most_queue/random/map_ph.py +282 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/random/utils/create.py +9 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/__init__.py +2 -1
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/base.py +194 -45
- most_queue-2.8/most_queue/sim/base_core.py +87 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/batch.py +99 -99
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/finite_source.py +246 -241
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/flow_sum.py +240 -240
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/fork_join.py +264 -266
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/fork_join_delta.py +7 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/impatient.py +177 -184
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/negative.py +248 -75
- most_queue-2.8/most_queue/sim/networks/base_network_sim.py +311 -0
- most_queue-2.8/most_queue/sim/networks/negative_network.py +622 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/networks/network.py +28 -27
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/networks/priority_network.py +33 -35
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/priority.py +71 -58
- most_queue-2.8/most_queue/sim/retrial.py +79 -0
- most_queue-2.8/most_queue/sim/single_server_disciplines.py +225 -0
- most_queue-2.8/most_queue/sim/size_based.py +248 -0
- most_queue-2.8/most_queue/sim/unreliable.py +95 -0
- most_queue-2.8/most_queue/sim/utils/events.py +123 -0
- most_queue-2.8/most_queue/sim/utils/predictor.py +44 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/utils/qs_queue.py +12 -0
- most_queue-2.8/most_queue/sim/utils/queue_priority_size.py +112 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/utils/servers.py +45 -1
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/utils/stats_update.py +2 -2
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/utils/tasks.py +21 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/vacations.py +364 -339
- {most_queue-2.6 → most_queue-2.8}/most_queue/structs.py +32 -1
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/__init__.py +11 -7
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fifo/__init__.py +4 -0
- most_queue-2.8/most_queue/theory/fifo/erlang.py +249 -0
- most_queue-2.8/most_queue/theory/fifo/gi_g_approx.py +223 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fifo/gi_m_n.py +257 -258
- most_queue-2.8/most_queue/theory/fifo/gmc_takahasi.py +331 -0
- most_queue-2.8/most_queue/theory/fifo/hkhk_takahasi.py +475 -0
- most_queue-2.8/most_queue/theory/fifo/m_g_inf.py +114 -0
- most_queue-2.8/most_queue/theory/fifo/mg1_lcfs_pr.py +106 -0
- most_queue-2.8/most_queue/theory/fifo/mg1_ps.py +119 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fifo/mgn_takahasi.py +250 -61
- most_queue-2.8/most_queue/theory/fifo/takahasi_base.py +211 -0
- most_queue-2.8/most_queue/theory/impatience/mmn.py +147 -0
- most_queue-2.8/most_queue/theory/matrix/__init__.py +7 -0
- most_queue-2.8/most_queue/theory/matrix/map_ph1.py +190 -0
- most_queue-2.8/most_queue/theory/matrix/qbd.py +147 -0
- most_queue-2.8/most_queue/theory/negative/mg1_disasters.py +228 -0
- most_queue-2.8/most_queue/theory/negative/mgn_disaster.py +690 -0
- most_queue-2.8/most_queue/theory/negative/mgn_rcs.py +755 -0
- most_queue-2.8/most_queue/theory/networks/__init__.py +8 -0
- most_queue-2.8/most_queue/theory/networks/negative_network.py +247 -0
- most_queue-2.8/most_queue/theory/retrial/__init__.py +8 -0
- most_queue-2.8/most_queue/theory/retrial/mg1.py +102 -0
- most_queue-2.8/most_queue/theory/retrial/mm1.py +160 -0
- most_queue-2.8/most_queue/theory/srpt/__init__.py +22 -0
- most_queue-2.8/most_queue/theory/srpt/_base.py +136 -0
- most_queue-2.8/most_queue/theory/srpt/mg1_fb.py +68 -0
- most_queue-2.8/most_queue/theory/srpt/mg1_psjf.py +53 -0
- most_queue-2.8/most_queue/theory/srpt/mg1_sjf.py +46 -0
- most_queue-2.8/most_queue/theory/srpt/mg1_spjf.py +96 -0
- most_queue-2.8/most_queue/theory/srpt/mg1_srpt.py +61 -0
- most_queue-2.8/most_queue/theory/srpt/utils/__init__.py +12 -0
- most_queue-2.8/most_queue/theory/srpt/utils/load_below.py +123 -0
- most_queue-2.8/most_queue/theory/srpt/utils/predictor.py +153 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/busy_periods.py +1 -2
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/conditional.py +1 -1
- most_queue-2.8/most_queue/theory/utils/derivative.py +93 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/passage_time.py +4 -2
- most_queue-2.8/most_queue/theory/utils/restarts.py +241 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/timing.py +2 -2
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/vacations/m_h2_h2warm.py +1 -1
- most_queue-2.8/most_queue/theory/vacations/mg1_unreliable.py +159 -0
- most_queue-2.8/most_queue/theory/vacations/mg1_vacations.py +228 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/vacations/mg1_warm_calc.py +1 -1
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/vacations/mgn_with_h2_delay_cold_warm.py +1 -1
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/vacations/mmn_with_h2_cold_and_h2_warmup.py +1 -1
- {most_queue-2.6 → most_queue-2.8}/pyproject.toml +77 -69
- {most_queue-2.6 → most_queue-2.8}/tests/default_params.yaml +9 -0
- most_queue-2.8/tests/mgn_disaster_w_v_vs_l_neg.png +0 -0
- most_queue-2.8/tests/test_erlang.py +136 -0
- most_queue-2.8/tests/test_gi_g_approx.py +145 -0
- most_queue-2.8/tests/test_h2_h2_n_calc.py +159 -0
- most_queue-2.8/tests/test_h2_m_n_calc.py +140 -0
- most_queue-2.8/tests/test_m_g_inf.py +73 -0
- most_queue-2.8/tests/test_map_ph1.py +161 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_mg1_calc.py +3 -2
- {most_queue-2.6 → most_queue-2.8}/tests/test_mg1_disaster.py +1 -2
- most_queue-2.8/tests/test_mg1_fb.py +98 -0
- most_queue-2.8/tests/test_mg1_predictions_table.py +180 -0
- most_queue-2.8/tests/test_mg1_ps_lcfs.py +100 -0
- most_queue-2.8/tests/test_mg1_psjf.py +80 -0
- most_queue-2.8/tests/test_mg1_sjf.py +79 -0
- most_queue-2.8/tests/test_mg1_spjf.py +99 -0
- most_queue-2.8/tests/test_mg1_srpt.py +80 -0
- most_queue-2.8/tests/test_mg1_unreliable.py +109 -0
- most_queue-2.8/tests/test_mg1_vacations.py +152 -0
- most_queue-2.8/tests/test_mgn_disaster.py +309 -0
- most_queue-2.8/tests/test_mgn_rcs.py +255 -0
- most_queue-2.8/tests/test_negative_network.py +504 -0
- most_queue-2.8/tests/test_network_negative_calc.py +183 -0
- most_queue-2.8/tests/test_retrial_erlang_a.py +199 -0
- most_queue-2.8/tests/test_size_based_disciplines.py +89 -0
- most_queue-2.8/tests/test_size_based_fcfs_regression.py +56 -0
- most_queue-2.8/tests/test_srpt_vs_fcfs.py +104 -0
- most_queue-2.8/tests/test_tt_vs_sim_cv105.py +132 -0
- most_queue-2.8/tests/test_tt_vs_sim_gamma_cvl1.py +126 -0
- most_queue-2.8/tests/units/test_map_ph.py +101 -0
- most_queue-2.8/tests/units/test_queue_priority_size.py +89 -0
- most_queue-2.8/tests/units/test_size_based_rankers.py +86 -0
- {most_queue-2.6 → most_queue-2.8}/tests/units/test_weibull.py +1 -6
- most_queue-2.8/tutorials/disciplines_comparison.ipynb +471 -0
- {most_queue-2.6 → most_queue-2.8}/tutorials/m_h2_h2warm.ipynb +1 -1
- most_queue-2.8/tutorials/map_ph_correlation.ipynb +2437 -0
- {most_queue-2.6 → most_queue-2.8}/tutorials/mgn_takahasi_takami.ipynb +1 -1
- {most_queue-2.6 → most_queue-2.8}/tutorials/network_with_priorities.ipynb +1 -1
- {most_queue-2.6 → most_queue-2.8}/tutorials/priority_queue.ipynb +1 -1
- {most_queue-2.6 → most_queue-2.8}/tutorials/queue_sim.ipynb +1 -1
- most_queue-2.8/tutorials/srpt_basics.ipynb +407 -0
- most_queue-2.8/works/articles/habr_article_1.md +258 -0
- most_queue-2.8/works/articles/habr_article_1_tables.html +111 -0
- most_queue-2.8/works/articles/pics/1.png +0 -0
- most_queue-2.8/works/articles/pics/2.png +0 -0
- most_queue-2.8/works/articles/pics/3.png +0 -0
- most_queue-2.8/works/articles/pics/4.png +0 -0
- most_queue-2.8/works/articles/pics/5.png +0 -0
- most_queue-2.8/works/negative_queues/README_latex.md +45 -0
- most_queue-2.8/works/negative_queues/README_package.txt +32 -0
- most_queue-2.8/works/negative_queues/base_parameters.yaml +31 -0
- most_queue-2.8/works/negative_queues/citations.bib +175 -0
- most_queue-2.8/works/negative_queues/export_fixed_service_tables.py +181 -0
- most_queue-2.8/works/negative_queues/export_tables_from_results.py +248 -0
- most_queue-2.8/works/negative_queues/generate_transition_diagrams.py +1015 -0
- most_queue-2.8/works/negative_queues/generated_tables_fixed.tex +24 -0
- most_queue-2.8/works/negative_queues/most-queue.code-workspace +11 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/channels/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/channels/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/channels/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/channels/v_broken_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/channels/v_broken_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/channels/v_served_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/channels/v_served_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/channels/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/channels/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/v_broken_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/v_broken_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/v_served_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/v_served_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/coefs/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/combined/v1_n_cv1_2_oldstyle.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/combined/v1_n_fixed_cv1_2.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/v_broken_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/v_broken_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/v_served_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/v_served_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/channels/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels_cv0_8/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels_cv0_8/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels_cv0_8/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels_cv1_2/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels_cv1_2/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels_cv1_2/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/channels_cv_compare/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/coefs/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/coefs/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/coefs/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate/sigma_v.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate/sigma_w.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv0_8/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv0_8/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv0_8/sigma_v.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv0_8/sigma_w.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv0_8/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv0_8/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv0_8/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv0_8/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv1_2/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv1_2/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv1_2/sigma_v.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv1_2/sigma_w.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv1_2/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv1_2/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv1_2/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv1_2/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv_compare/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/negative_rate_cv_compare/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/utilization/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/utilization/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/clear/utilization/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/v_broken_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/v_broken_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/v_served_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/v_served_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/coefs/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/diagrams/disaster_arrivals.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/diagrams/disaster_arrivals_/321/201/321/203/320/277/320/265/321/200.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/diagrams/disaster_negative_arrivals_pretty.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/diagrams/disaster_negative_arrivals_pretty.svg +1137 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/diagrams/disaster_service.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/diagrams/disaster_transitions.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels_cv0_8/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels_cv0_8/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels_cv0_8/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels_cv1_2/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels_cv1_2/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels_cv1_2/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/channels_cv_compare/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/coefs/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/coefs/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/coefs/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate/sigma_v.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate/sigma_w.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv0_8/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv0_8/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv0_8/sigma_v.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv0_8/sigma_w.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv0_8/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv0_8/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv0_8/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv0_8/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv1_2/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv1_2/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv1_2/sigma_v.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv1_2/sigma_w.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv1_2/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv1_2/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv1_2/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv1_2/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv_compare/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/negative_rate_cv_compare/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/utilization/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/utilization/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue/utilization/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/channels_cv0_8/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/channels_cv0_8/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/channels_cv0_8/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/channels_cv1_2/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/channels_cv1_2/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/channels_cv1_2/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/channels_cv_compare/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv0_8/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv0_8/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv0_8/sigma_v.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv0_8/sigma_w.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv0_8/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv0_8/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv0_8/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv0_8/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv1_2/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv1_2/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv1_2/sigma_v.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv1_2/sigma_w.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv1_2/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv1_2/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv1_2/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv1_2/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv_compare/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/requeue_fixed/negative_rate_cv_compare/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/v_broken_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/v_broken_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/v_served_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/v_served_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/disaster/utilization/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/paper_fig2_delta_0_300/combined/v1_n_cv1_2_oldstyle.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/paper_fig2_delta_0_300/dis_clear/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/paper_fig2_delta_0_300/dis_requeue/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/paper_fig2_delta_0_300/rcs_remove/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/paper_fig2_delta_0_300/rcs_requeue/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/v_broken_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/v_broken_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/v_served_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/v_served_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/channels/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/v_broken_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/v_broken_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/v_served_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/v_served_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/coefs/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/Untitled Diagram.drawio +97 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrival.jpeg +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrival2.jpeg +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrival_/320/261/320/265/320/266/320/265/320/262/321/213/320/271.jpeg +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrival_/320/272/320/260/321/202.jpeg +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrivals.drawio +141 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrivals.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrivals_/320/272/320/260/321/202_/321/207/320/261.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrivals_/321/201/321/203/320/277/320/265/321/200.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/neg_arrivals_/321/207/320/261.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/rcs_arrivals.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/rcs_negative_arrivals_pretty.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/rcs_negative_arrivals_pretty.svg +1562 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/rcs_service.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/diagrams/rcs_transitions.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels_cv0_8/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels_cv0_8/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels_cv0_8/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels_cv1_2/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels_cv1_2/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels_cv1_2/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/channels_cv_compare/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/coefs/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/coefs/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/coefs/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate/sigma_v.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate/sigma_w.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv0_8/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv0_8/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv0_8/sigma_v.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv0_8/sigma_w.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv0_8/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv0_8/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv0_8/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv0_8/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv1_2/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv1_2/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv1_2/sigma_v.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv1_2/sigma_w.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv1_2/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv1_2/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv1_2/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv1_2/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv_compare/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/negative_rate_cv_compare/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/utilization/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/utilization/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/remove/utilization/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels_cv0_8/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels_cv0_8/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels_cv0_8/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels_cv1_2/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels_cv1_2/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels_cv1_2/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/channels_cv_compare/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/coefs/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/coefs/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/coefs/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate/sigma_v.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate/sigma_w.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv0_8/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv0_8/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv0_8/sigma_v.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv0_8/sigma_w.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv0_8/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv0_8/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv0_8/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv0_8/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv1_2/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv1_2/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv1_2/sigma_v.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv1_2/sigma_w.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv1_2/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv1_2/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv1_2/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv1_2/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv_compare/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/negative_rate_cv_compare/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/utilization/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/utilization/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue/utilization/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/channels_cv0_8/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/channels_cv0_8/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/channels_cv0_8/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/channels_cv1_2/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/channels_cv1_2/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/channels_cv1_2/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/channels_cv_compare/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv0_8/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv0_8/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv0_8/sigma_v.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv0_8/sigma_w.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv0_8/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv0_8/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv0_8/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv0_8/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv1_2/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv1_2/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv1_2/sigma_v.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv1_2/sigma_w.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv1_2/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv1_2/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv1_2/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv1_2/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv_compare/q.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/requeue_fixed/negative_rate_cv_compare/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/v_broken_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/v_broken_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/v_served_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/v_served_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/rcs/utilization/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/results.json +1 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/v_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/v_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/v_broken_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/v_broken_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/v_served_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/v_served_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/w_ave.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_figures/utilization/w_ave_err.png +0 -0
- most_queue-2.8/works/negative_queues/negative_queues_takahasi_takami.md +808 -0
- most_queue-2.8/works/negative_queues/negative_queues_takahasi_takami.tex +607 -0
- most_queue-2.8/works/negative_queues/negative_queues_takahasi_takami_v3.pdf +0 -0
- most_queue-2.8/works/negative_queues/plot_channels_4disciplines_oldstyle.py +136 -0
- most_queue-2.8/works/negative_queues/plot_channels_cv_compare.py +108 -0
- most_queue-2.8/works/negative_queues/plot_channels_fixed_2disciplines_cv1_2.py +106 -0
- most_queue-2.8/works/negative_queues/plot_negative_rate_cv_compare.py +131 -0
- most_queue-2.8/works/negative_queues/prompt_disaster_negative_arrival_3channels_4levels.md +55 -0
- most_queue-2.8/works/negative_queues/prompt_rcs_negative_arrival_up_3channels_4levels.md +98 -0
- most_queue-2.8/works/negative_queues/run_channels_for_paper_fig2.py +132 -0
- most_queue-2.8/works/negative_queues/run_table_cv_points.py +148 -0
- most_queue-2.8/works/negative_queues/work_mgn_negatives.py +688 -0
- most_queue-2.8/works/negative_queues//320/276/320/261/320/267/320/276/321/200_/320/273/320/270/321/202/320/265/321/200/320/260/321/202/321/203/321/200/321/2131.md +118 -0
- most_queue-2.8/works/negative_queues//320/276/320/261/320/267/320/276/321/200_/320/273/320/270/321/202/320/265/321/200/320/260/321/202/321/203/321/200/321/2132.md +120 -0
- most_queue-2.8/works/queueing_systems_review/RL.md +328 -0
- most_queue-2.8/works/queueing_systems_review/SRPT/SPJF.md +450 -0
- most_queue-2.8/works/queueing_systems_review/SRPT/shrage.md +193 -0
- most_queue-2.8/works/queueing_systems_review/Scheduling /321/201 /320/277/321/200/320/265/320/264/321/201/320/272/320/260/320/267/320/260/320/275/320/270/321/217/320/274/320/270 /320/270 LLM-/321/201/320/270/321/201/321/202/320/265/320/274/321/213.md" +401 -0
- most_queue-2.8/works/queueing_systems_review/general.md +238 -0
- most_queue-2.6/PKG-INFO +0 -247
- most_queue-2.6/README.md +0 -206
- most_queue-2.6/docs/models.md +0 -406
- most_queue-2.6/most_queue/sim/networks/base_network_sim.py +0 -111
- most_queue-2.6/most_queue/theory/negative/mg1_disasters.py +0 -134
- most_queue-2.6/most_queue/theory/negative/mgn_disaster.py +0 -456
- most_queue-2.6/most_queue/theory/negative/mgn_rcs.py +0 -321
- most_queue-2.6/most_queue/theory/negative/structs.py +0 -1
- most_queue-2.6/tests/test_mgn_disaster.py +0 -81
- most_queue-2.6/tests/test_mgn_rcs.py +0 -84
- most_queue-2.6/works/negative_queues/base_parameters.yaml +0 -21
- most_queue-2.6/works/negative_queues/work_mgn_negatives.py +0 -333
- {most_queue-2.6 → most_queue-2.8}/LICENSE +0 -0
- {most_queue-2.6 → most_queue-2.8}/assets/3.gif +0 -0
- {most_queue-2.6 → most_queue-2.8}/deploy.txt +0 -0
- {most_queue-2.6 → most_queue-2.8}/googleb31d3dccb40f969f.html +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/constants.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/io/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/io/tables.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/misc/approx_cdf_make.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/misc/compare_fj_calc.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/misc/flow_sum.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/misc/run_mgn_with_h2_delay_cold_warm.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/misc/tests/test_fj_delta.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/misc/tests/test_network_opt_approx.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/misc/tests/test_network_opt_plus.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/misc/vacations_paper_utils.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/random/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/random/distributions.yaml +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/random/utils/base.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/random/utils/fit.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/random/utils/load.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/random/utils/params.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/networks/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/utils/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/sim/utils/phase.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/base_queue.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/batch/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/batch/mm1.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/calc_params.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/closed/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/closed/engset.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fifo/ek_d_n.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fifo/gi_m_1.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fifo/m_d_n.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fifo/mg1.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fifo/mmnr.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fork_join/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fork_join/m_m_n.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/fork_join/split_join.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/impatience/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/impatience/mm1.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/negative/mg1_rcs.py +0 -0
- /most_queue-2.6/most_queue/theory/networks/__init__.py → /most_queue-2.8/most_queue/theory/negative/structs.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/networks/base_network_calc.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/networks/network_viewer.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/networks/open_network.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/networks/open_network_prty.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/networks/opt/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/networks/opt/transition.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/networks/opt/transition_approx.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/networks/opt/transition_plus.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/mgn_invar_approx.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/non_preemptive/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/non_preemptive/mg1.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/preemptive/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/preemptive/m_ph_n_busy_approx.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/preemptive/mg1.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/preemptive/mm2_3cls_busy_approx.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/priority/preemptive/mmn_2cls_pr_busy_approx.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/r_example.gexf +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/binom_probs.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/conv.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/diff5dots.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/flow_sum.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/max_dist.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/moments.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/q_poisson_arrival_calc.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/residual.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/student_stat.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/transforms.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/utilization_approx.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/utils/validation.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/most_queue/theory/vacations/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/requirements.txt +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/Dockerfile +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/run.sh +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_base_qs_sim.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_batch.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_ek_d_n.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_engset.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_fj_sim.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_gi_m_1_calc.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_gi_m_n_calc.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_impatience.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_m_d_n_calc.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_m_h2_h2warm.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_m_ph_n_prty.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_mg1_rcs.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_mg1_warmup.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_mgn_tt.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_mgn_with_h2_delay_cold_warm.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_mm2_3cls_prty_busy.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_mmn_h2cold_h2warm.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_mmn_prty_busy_approx.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_network_im_prty.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_network_no_prty.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_network_opt.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_qs_sim.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/test_qs_sim_prty.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/units/test_busy_moments_calc.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/units/test_central_moments.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/units/test_conditionals.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/units/test_h2_params_cv.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/units/test_queue_types.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/units/test_tt_up_probs.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/units/test_v1_on_channels.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/tests/units/test_v1_utlization_approx.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/works/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/works/negative_queues/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/works/vacations/__init__.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/works/vacations/base_parameters.yaml +0 -0
- {most_queue-2.6 → most_queue-2.8}/works/vacations/channels.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/works/vacations/cooling.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/works/vacations/cooling_delay.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/works/vacations/main.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/works/vacations/run_one_calc_vs_sim.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/works/vacations/service.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/works/vacations/utilization.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/works/vacations/utils.py +0 -0
- {most_queue-2.6 → most_queue-2.8}/works/vacations/warmup.py +0 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: lit-search
|
|
3
|
+
description: Поиск научной литературы по теории очередей (arXiv + OpenAlex + Crossref) для работ над most_queue. Use when searching for queueing theory papers, verifying references, or doing gap-analysis of models (EPIC-001 and beyond).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Поиск литературы для most_queue
|
|
7
|
+
|
|
8
|
+
## Быстрый поиск по трём базам
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
python .claude/skills/lit-search/lit_search.py "<запрос>" --max 10
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Опрашивает arXiv API, OpenAlex и Crossref (все бесплатные, без ключей), дедуплицирует по
|
|
15
|
+
названию и печатает markdown-таблицу, отсортированную по цитируемости. Опции:
|
|
16
|
+
`--source arxiv|openalex|crossref|all`, `--abstracts` (аннотации, только arXiv).
|
|
17
|
+
|
|
18
|
+
## Что чем искать
|
|
19
|
+
|
|
20
|
+
- **OpenAlex** — основной источник: покрывает журналы (Operations Research, Queueing Systems,
|
|
21
|
+
Performance Evaluation), даёт цитируемость и DOI. Классика теории очередей — здесь.
|
|
22
|
+
- **Crossref** — проверка/уточнение DOI и метаданных, широкий охват.
|
|
23
|
+
- **arXiv** — свежие препринты (категории math.PR, cs.PF); единственный источник с аннотациями
|
|
24
|
+
и бесплатными PDF: `https://arxiv.org/pdf/<id>`.
|
|
25
|
+
- **WebSearch/WebFetch** — обзорный поиск, страницы авторов, лекционные заметки
|
|
26
|
+
(например, Harchol-Balter публикует главы книг у себя на сайте).
|
|
27
|
+
- **Semantic Scholar API** — без ключа почти всегда 429, не использовать.
|
|
28
|
+
|
|
29
|
+
## Куда складывать найденное
|
|
30
|
+
|
|
31
|
+
- PDF первоисточников → `docs/статьи/` (используемые в документации) или `works/articles/`.
|
|
32
|
+
- Конспекты → `works/queueing_systems_review/<тема>/`.
|
|
33
|
+
- Ссылки в roadmap/эпике оформлять как «Автор, Название, Журнал, Год, DOI».
|
|
34
|
+
|
|
35
|
+
## Чтение PDF
|
|
36
|
+
|
|
37
|
+
arXiv PDF скачивать в scratchpad (`curl -L -o`), читать инструментом Read (постранично) или
|
|
38
|
+
скиллом pdf. Платные журнальные PDF недоступны — искать препринт на arXiv/author page через
|
|
39
|
+
WebSearch или опираться на конспекты в `works/`.
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Literature search helper: queries arXiv, OpenAlex and Crossref, prints a markdown table.
|
|
3
|
+
|
|
4
|
+
Usage:
|
|
5
|
+
python lit_search.py "retrial queue M/G/1" [--max 10] [--source arxiv|openalex|crossref|all]
|
|
6
|
+
python lit_search.py "MAP/PH/1" --max 5 --abstracts
|
|
7
|
+
|
|
8
|
+
Only stdlib is used. All APIs are free and keyless.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import argparse
|
|
12
|
+
import json
|
|
13
|
+
import sys
|
|
14
|
+
import time
|
|
15
|
+
import urllib.parse
|
|
16
|
+
import urllib.request
|
|
17
|
+
import xml.etree.ElementTree as ET
|
|
18
|
+
|
|
19
|
+
UA = {"User-Agent": "most-queue-lit-search/1.0 (mailto:xabarov1985@gmail.com)"}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _get(url: str) -> bytes:
|
|
23
|
+
req = urllib.request.Request(url, headers=UA)
|
|
24
|
+
with urllib.request.urlopen(req, timeout=30) as resp:
|
|
25
|
+
return resp.read()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def search_arxiv(query: str, limit: int) -> list[dict]:
|
|
29
|
+
"""Search arXiv Atom API, return normalized result dicts."""
|
|
30
|
+
q = urllib.parse.quote(f'all:"{query}"' if " " in query else f"all:{query}")
|
|
31
|
+
url = f"https://export.arxiv.org/api/query?search_query={q}&start=0&max_results={limit}&sortBy=relevance"
|
|
32
|
+
ns = {"a": "http://www.w3.org/2005/Atom"}
|
|
33
|
+
root = ET.fromstring(_get(url))
|
|
34
|
+
out = []
|
|
35
|
+
for e in root.findall("a:entry", ns):
|
|
36
|
+
out.append(
|
|
37
|
+
{
|
|
38
|
+
"source": "arxiv",
|
|
39
|
+
"title": " ".join((e.findtext("a:title", "", ns) or "").split()),
|
|
40
|
+
"year": (e.findtext("a:published", "", ns) or "")[:4],
|
|
41
|
+
"venue": "arXiv",
|
|
42
|
+
"citations": None,
|
|
43
|
+
"id": (e.findtext("a:id", "", ns) or "").replace("http://arxiv.org/abs/", "arXiv:"),
|
|
44
|
+
"abstract": " ".join((e.findtext("a:summary", "", ns) or "").split()),
|
|
45
|
+
}
|
|
46
|
+
)
|
|
47
|
+
return out
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def search_openalex(query: str, limit: int) -> list[dict]:
|
|
51
|
+
"""Search OpenAlex works API, return normalized result dicts."""
|
|
52
|
+
q = urllib.parse.quote(query)
|
|
53
|
+
url = (
|
|
54
|
+
f"https://api.openalex.org/works?search={q}&per-page={limit}"
|
|
55
|
+
"&select=title,publication_year,doi,cited_by_count,primary_location&sort=relevance_score:desc"
|
|
56
|
+
)
|
|
57
|
+
data = json.loads(_get(url))
|
|
58
|
+
out = []
|
|
59
|
+
for w in data.get("results", []):
|
|
60
|
+
loc = w.get("primary_location") or {}
|
|
61
|
+
src = (loc.get("source") or {}).get("display_name") or ""
|
|
62
|
+
out.append(
|
|
63
|
+
{
|
|
64
|
+
"source": "openalex",
|
|
65
|
+
"title": w.get("title") or "",
|
|
66
|
+
"year": str(w.get("publication_year") or ""),
|
|
67
|
+
"venue": src,
|
|
68
|
+
"citations": w.get("cited_by_count"),
|
|
69
|
+
"id": (w.get("doi") or "").replace("https://doi.org/", "doi:"),
|
|
70
|
+
"abstract": "",
|
|
71
|
+
}
|
|
72
|
+
)
|
|
73
|
+
return out
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def search_crossref(query: str, limit: int) -> list[dict]:
|
|
77
|
+
"""Search Crossref works API, return normalized result dicts."""
|
|
78
|
+
q = urllib.parse.quote(query)
|
|
79
|
+
url = (
|
|
80
|
+
f"https://api.crossref.org/works?query={q}&rows={limit}"
|
|
81
|
+
"&select=title,DOI,is-referenced-by-count,container-title,published"
|
|
82
|
+
)
|
|
83
|
+
data = json.loads(_get(url))
|
|
84
|
+
out = []
|
|
85
|
+
for w in data.get("message", {}).get("items", []):
|
|
86
|
+
pub = w.get("published", {}).get("date-parts", [[None]])
|
|
87
|
+
out.append(
|
|
88
|
+
{
|
|
89
|
+
"source": "crossref",
|
|
90
|
+
"title": (w.get("title") or [""])[0],
|
|
91
|
+
"year": str(pub[0][0] or ""),
|
|
92
|
+
"venue": (w.get("container-title") or [""])[0],
|
|
93
|
+
"citations": w.get("is-referenced-by-count"),
|
|
94
|
+
"id": "doi:" + w.get("DOI", ""),
|
|
95
|
+
"abstract": "",
|
|
96
|
+
}
|
|
97
|
+
)
|
|
98
|
+
return out
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
SOURCES = {"arxiv": search_arxiv, "openalex": search_openalex, "crossref": search_crossref}
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def main() -> None:
|
|
105
|
+
"""CLI entry point: query sources, dedup, print markdown table."""
|
|
106
|
+
ap = argparse.ArgumentParser(description=(__doc__ or "").splitlines()[0])
|
|
107
|
+
ap.add_argument("query")
|
|
108
|
+
ap.add_argument("--max", type=int, default=10, dest="limit", help="results per source")
|
|
109
|
+
ap.add_argument("--source", default="all", choices=[*SOURCES, "all"])
|
|
110
|
+
ap.add_argument("--abstracts", action="store_true", help="print abstracts (arXiv only)")
|
|
111
|
+
args = ap.parse_args()
|
|
112
|
+
|
|
113
|
+
names = list(SOURCES) if args.source == "all" else [args.source]
|
|
114
|
+
rows = []
|
|
115
|
+
for name in names:
|
|
116
|
+
try:
|
|
117
|
+
rows += SOURCES[name](args.query, args.limit)
|
|
118
|
+
except Exception as exc: # pylint: disable=broad-exception-caught
|
|
119
|
+
print(f"[warn] {name} failed: {exc}", file=sys.stderr)
|
|
120
|
+
time.sleep(0.5)
|
|
121
|
+
|
|
122
|
+
# dedup by normalized title, prefer entries with citation counts
|
|
123
|
+
seen: dict[str, dict] = {}
|
|
124
|
+
for r in rows:
|
|
125
|
+
key = "".join(ch for ch in r["title"].lower() if ch.isalnum())[:80]
|
|
126
|
+
if key not in seen or (r["citations"] or 0) > (seen[key]["citations"] or 0):
|
|
127
|
+
seen[key] = r
|
|
128
|
+
rows = sorted(seen.values(), key=lambda r: -(r["citations"] or 0))
|
|
129
|
+
|
|
130
|
+
print(f"## Результаты поиска: `{args.query}` ({len(rows)} уникальных)\n")
|
|
131
|
+
print("| Год | Название | Где | Цит. | ID | Источник |")
|
|
132
|
+
print("|-----|----------|-----|------|----|----------|")
|
|
133
|
+
for r in rows:
|
|
134
|
+
cit = "" if r["citations"] is None else str(r["citations"])
|
|
135
|
+
print(f"| {r['year']} | {r['title'][:100]} | {r['venue'][:40]} | {cit} | {r['id']} | {r['source']} |")
|
|
136
|
+
|
|
137
|
+
if args.abstracts:
|
|
138
|
+
for r in rows:
|
|
139
|
+
if r["abstract"]:
|
|
140
|
+
print(f"\n### {r['title']}\n{r['abstract']}")
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
if __name__ == "__main__":
|
|
144
|
+
main()
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Pytest quality standards � run after major edits, zero-tolerance failures, no silencing tricks
|
|
3
|
+
globs: **/*.py
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Pytest Quality Standards
|
|
8
|
+
|
|
9
|
+
## Run pytest after every significant code change
|
|
10
|
+
|
|
11
|
+
After editing simulation core, theory calculators, or utils, run:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
.venv/bin/pytest tests/ -q --tb=short
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
For quick feedback on a single changed file:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
.venv/bin/pytest tests/units/test_<module>.py -q --tb=short
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Passing threshold
|
|
24
|
+
|
|
25
|
+
All tests must pass. A session with any failures or errors is not acceptable.
|
|
26
|
+
|
|
27
|
+
## Forbidden workarounds
|
|
28
|
+
|
|
29
|
+
Never silence test failures with:
|
|
30
|
+
|
|
31
|
+
- `# noqa`
|
|
32
|
+
- `# type: ignore` (unless suppressing a genuine 3rd-party stub gap, not your code)
|
|
33
|
+
- `@pytest.mark.skip` / `@pytest.mark.xfail` without an explanation comment and a linked issue
|
|
34
|
+
- `filterwarnings = error` exceptions added silently
|
|
35
|
+
- Lowering tolerances (`rtol`, `atol`) below what the theory supports just to make a test pass
|
|
36
|
+
|
|
37
|
+
Fix the root cause instead.
|
|
38
|
+
|
|
39
|
+
## Tolerance conventions (`default_params.yaml`)
|
|
40
|
+
|
|
41
|
+
Simulation results are stochastic. Use the project tolerances from `tests/default_params.yaml`:
|
|
42
|
+
- `MOMENTS_RTOL` � relative tolerance for moment comparisons
|
|
43
|
+
- `MOMENTS_ATOL` � absolute tolerance fallback
|
|
44
|
+
|
|
45
|
+
Do **not** tighten tolerances below these values without justifying with sample-size analysis.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Python code quality standards — pylint 10/10, docstrings, ASCII, type hints, no lazy imports
|
|
3
|
+
globs: most_queue/**/*.py
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Python Code Quality Standards
|
|
8
|
+
|
|
9
|
+
## Pylint target: 10.00/10
|
|
10
|
+
|
|
11
|
+
After every substantive edit run pylint on changed files:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
.venv/bin/pylint <changed_file_or_package> --score=yes
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
If score drops below 10.00, fix all reported issues before finishing.
|
|
18
|
+
|
|
19
|
+
## Docstrings — required everywhere public
|
|
20
|
+
|
|
21
|
+
Every public module, class, and method must have a docstring.
|
|
22
|
+
Private helpers (`_name`) are exempt but encouraged.
|
|
23
|
+
|
|
24
|
+
```python
|
|
25
|
+
# BAD — missing docstring on public method
|
|
26
|
+
def run(self) -> QueueResults:
|
|
27
|
+
...
|
|
28
|
+
|
|
29
|
+
# GOOD
|
|
30
|
+
def run(self) -> QueueResults:
|
|
31
|
+
"""Compute E[T] and E[W] averaged over the job-size distribution."""
|
|
32
|
+
...
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## ASCII-only source files
|
|
36
|
+
|
|
37
|
+
Python source files must contain only ASCII characters.
|
|
38
|
+
Use ASCII equivalents in docstrings and comments — never paste Unicode math symbols:
|
|
39
|
+
|
|
40
|
+
| Instead of | Write |
|
|
41
|
+
|---|---|
|
|
42
|
+
| `ρ_x`, `λ`, `∫` | `rho_x`, `lam`, `int` |
|
|
43
|
+
| `≥`, `≤` | `>=`, `<=` |
|
|
44
|
+
| `→`, `—` | `->`, `--` |
|
|
45
|
+
|
|
46
|
+
## No imports inside functions
|
|
47
|
+
|
|
48
|
+
Lazy imports (`import` inside a function body) are forbidden.
|
|
49
|
+
Move all imports to the module top level.
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
# BAD
|
|
53
|
+
def get_pdf(t):
|
|
54
|
+
from scipy.stats import norm # C0415
|
|
55
|
+
return norm.pdf(t)
|
|
56
|
+
|
|
57
|
+
# GOOD — import at module level
|
|
58
|
+
from scipy.stats import norm
|
|
59
|
+
|
|
60
|
+
def get_pdf(t):
|
|
61
|
+
return norm.pdf(t)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Type hints on all public signatures
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
# BAD
|
|
68
|
+
def conditional_mean_response(self, x):
|
|
69
|
+
...
|
|
70
|
+
|
|
71
|
+
# GOOD
|
|
72
|
+
def conditional_mean_response(self, x: float) -> float:
|
|
73
|
+
...
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Distribution API consistency
|
|
77
|
+
|
|
78
|
+
All `Distribution` subclasses in `most_queue.random.distributions` must
|
|
79
|
+
expose `get_pdf(params, t: float) -> float` and `get_cdf(params, t: float) -> float`
|
|
80
|
+
as static methods. Do **not** add private PDF/CDF helpers elsewhere — extend
|
|
81
|
+
the distribution class instead.
|
|
82
|
+
|
|
83
|
+
## No nested quadrature for repeated inner integrals
|
|
84
|
+
|
|
85
|
+
When an inner integral appears inside an outer `quad` call, precompute it
|
|
86
|
+
on a grid with `cumulative_trapezoid` + `np.interp` instead of calling
|
|
87
|
+
`quad` again for every outer evaluation point.
|
|
88
|
+
|
|
89
|
+
```python
|
|
90
|
+
# BAD — O(n²) nested quad
|
|
91
|
+
def outer(x_max):
|
|
92
|
+
quad(lambda x: f(x) * quad(lambda t: ..., 0, x)[0], 0, x_max)
|
|
93
|
+
|
|
94
|
+
# GOOD — precompute grid, look up with np.interp
|
|
95
|
+
grid_xs = np.linspace(0, x_max, 2000)
|
|
96
|
+
grid_int = cumulative_trapezoid(integrand(grid_xs), grid_xs, initial=0)
|
|
97
|
+
quad(lambda x: f(x) * np.interp(x, grid_xs, grid_int), 0, x_max)
|
|
98
|
+
```
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: add-theory-calculator
|
|
3
|
+
description: >-
|
|
4
|
+
Add a new analytical/numerical queueing-theory calculator to most-queue:
|
|
5
|
+
subclass BaseQueue, wire set_sources / set_servers, return QueueResults from
|
|
6
|
+
run(), reuse shared utilities, expose via theory/__init__.py. Use whenever the
|
|
7
|
+
user asks to implement a new theoretical model (M/G/1 variant, priority,
|
|
8
|
+
network, fork-join, vacations, �).
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Adding a Theory Calculator
|
|
12
|
+
|
|
13
|
+
All analytical models in this repo follow the same contract. Stick to it so
|
|
14
|
+
the calculator interoperates with `io.tables`, the test pattern (see skill
|
|
15
|
+
`theory-vs-sim-test`), and downstream tooling.
|
|
16
|
+
|
|
17
|
+
## Where to put the file
|
|
18
|
+
|
|
19
|
+
| Model type | Directory |
|
|
20
|
+
|------------|-----------|
|
|
21
|
+
| Single class FIFO (M/G/1, GI/M/n, �) | `most_queue/theory/fifo/` |
|
|
22
|
+
| Priorities | `most_queue/theory/priority/` |
|
|
23
|
+
| Vacations / warm-up / cooling | `most_queue/theory/vacations/` |
|
|
24
|
+
| Negative customers / disasters | `most_queue/theory/negative/` |
|
|
25
|
+
| Fork�join | `most_queue/theory/fork_join/` |
|
|
26
|
+
| Closed networks | `most_queue/theory/closed/` |
|
|
27
|
+
| Open networks | `most_queue/theory/networks/` |
|
|
28
|
+
| Impatience | `most_queue/theory/impatience/` |
|
|
29
|
+
| Batch arrivals | `most_queue/theory/batch/` |
|
|
30
|
+
| Size-based scheduling (SRPT/SJF/SPJF/�) | `most_queue/theory/srpt/` |
|
|
31
|
+
|
|
32
|
+
## Required class skeleton
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
from most_queue.structs import QueueResults
|
|
36
|
+
from most_queue.theory.base_queue import BaseQueue
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class MyModelCalc(BaseQueue):
|
|
40
|
+
"""One-line summary. Cite the source paper / formula in the docstring."""
|
|
41
|
+
|
|
42
|
+
def __init__(self, n: int = 1, calc_params=None, buffer=None):
|
|
43
|
+
super().__init__(n=n, calc_params=calc_params, buffer=buffer)
|
|
44
|
+
# model-specific state
|
|
45
|
+
|
|
46
|
+
def set_sources(self, ...): # accept ?, or (params, kendall)
|
|
47
|
+
...
|
|
48
|
+
self.is_sources_set = True # MUST set the flag
|
|
49
|
+
|
|
50
|
+
def set_servers(self, ...): # accept moments b, or (params, kendall)
|
|
51
|
+
...
|
|
52
|
+
self.is_servers_set = True # MUST set the flag
|
|
53
|
+
|
|
54
|
+
def get_w(self, num_of_moments: int = 4) -> list[float]: ...
|
|
55
|
+
def get_v(self, num_of_moments: int = 4) -> list[float]: ...
|
|
56
|
+
def get_p(self) -> list[float]: ...
|
|
57
|
+
|
|
58
|
+
def run(self, num_of_moments: int = 4) -> QueueResults:
|
|
59
|
+
self._check_if_servers_and_sources_set()
|
|
60
|
+
start = self._measure_time()
|
|
61
|
+
|
|
62
|
+
w = self.get_w(num_of_moments)
|
|
63
|
+
v = self.get_v(num_of_moments)
|
|
64
|
+
p = self.get_p()
|
|
65
|
+
|
|
66
|
+
result = QueueResults(v=v, w=w, p=p, utilization=<your ?>)
|
|
67
|
+
self._set_duration(result, start)
|
|
68
|
+
return result
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Conventions to follow
|
|
72
|
+
|
|
73
|
+
1. **Set the flags.** `is_sources_set` / `is_servers_set` must be set to
|
|
74
|
+
`True` at the end of the corresponding setter � `_check_if_servers_and_sources_set`
|
|
75
|
+
relies on them.
|
|
76
|
+
2. **Return RAW moments.** `w` and `v` are raw (non-central) moments; the test
|
|
77
|
+
pattern compares raw. If you compute centrals internally, convert via
|
|
78
|
+
`most_queue.theory.utils.moments`.
|
|
79
|
+
3. **Always set `utilization`** on `QueueResults` � the standard test asserts
|
|
80
|
+
`abs(UTILIZATION_FACTOR - result.utilization) < PROBS_ATOL`.
|
|
81
|
+
4. **Time the run.** Use `start = self._measure_time()` and
|
|
82
|
+
`self._set_duration(result, start)` � `io.tables` printers display this.
|
|
83
|
+
5. **Return the right results dataclass:**
|
|
84
|
+
- `QueueResults` � single-class FIFO and most special models
|
|
85
|
+
- `PriorityResults` � priorities
|
|
86
|
+
- `NetworkResults` � networks
|
|
87
|
+
- `VacationResults` � vacations / warm-up / cooling
|
|
88
|
+
- `NegativeArrivalsResults` � negative customers / disasters
|
|
89
|
+
|
|
90
|
+
## Reuse, don't reinvent
|
|
91
|
+
|
|
92
|
+
Before writing math, check `most_queue/theory/utils/`:
|
|
93
|
+
|
|
94
|
+
| Module | Use for |
|
|
95
|
+
|--------|---------|
|
|
96
|
+
| `utils/conv.py` (`conv_moments`) | Convolution of two moment sequences |
|
|
97
|
+
| `utils/moments.py` | Raw ? central moments, factorial moments |
|
|
98
|
+
| `utils/transforms.py` (`lst_exp`, `lst_h2`, `lst_gamma`, �) | Laplace�Stieltjes transforms |
|
|
99
|
+
| `utils/busy_periods.py` | Busy-period moments via numerical differentiation of LST |
|
|
100
|
+
| `utils/residual.py` | Residual service-time distributions |
|
|
101
|
+
| `utils/flow_sum.py` | Combining renewal flows |
|
|
102
|
+
| `utils/q_poisson_arrival_calc.py` | PASTA-style state probabilities |
|
|
103
|
+
| `utils/conditional.py` | Conditional moments (e.g. `min(Exp, H2)`) |
|
|
104
|
+
|
|
105
|
+
## Distribution interface (when you need a PDF/CDF or to align with sim)
|
|
106
|
+
|
|
107
|
+
`most_queue.random.distributions` provides classes (Exp, H2, Gamma, Cox,
|
|
108
|
+
Erlang, Pareto, Normal, �) with the contract:
|
|
109
|
+
|
|
110
|
+
```python
|
|
111
|
+
ClassDist.get_params_by_mean_and_cv(mean, cv)
|
|
112
|
+
ClassDist.calc_theory_moments(params, k) # first k raw moments
|
|
113
|
+
inst = ClassDist(params, generator)
|
|
114
|
+
inst.generate() # sample one
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Use this to keep the simulation and the theory aligned (see skill
|
|
118
|
+
`theory-vs-sim-test`).
|
|
119
|
+
|
|
120
|
+
## Checklist before opening a PR
|
|
121
|
+
|
|
122
|
+
- [ ] Subclassed `BaseQueue`; both `is_*_set` flags set in setters
|
|
123
|
+
- [ ] `run()` returns the appropriate dataclass with `utilization` and
|
|
124
|
+
`duration`
|
|
125
|
+
- [ ] Reused `theory/utils/*` rather than reimplementing convolution / LST
|
|
126
|
+
- [ ] Added `from .<module> import MyModelCalc` to `theory/__init__.py` if
|
|
127
|
+
the class is part of the public API
|
|
128
|
+
- [ ] New test file in `tests/` following the `theory-vs-sim-test` skill
|
|
129
|
+
- [ ] `pytest tests/` is fully green (see `.cursor/rules/pytest-quality.mdc`)
|
|
130
|
+
- [ ] At least 2 distributions tested (e.g. Exp + H2 or Gamma)
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: theory-vs-sim-test
|
|
3
|
+
description: >-
|
|
4
|
+
Author or fix a sim-vs-theory pytest in most-queue: load default_params.yaml,
|
|
5
|
+
set up matched theory + QsSim, compare moments via np.allclose with shared
|
|
6
|
+
tolerances, print io.tables for diagnostics. Use whenever a new theory
|
|
7
|
+
calculator is added, an existing test fails, or simulation/theory results need
|
|
8
|
+
cross-validation in this repo.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Theory-vs-Sim Test Pattern
|
|
12
|
+
|
|
13
|
+
Every numerical model in `most_queue/theory/**` is validated against
|
|
14
|
+
discrete-event simulation (`QsSim` and friends). The pattern below is the
|
|
15
|
+
project-wide convention � follow it for any new test.
|
|
16
|
+
|
|
17
|
+
## Required imports
|
|
18
|
+
|
|
19
|
+
```python
|
|
20
|
+
import os
|
|
21
|
+
import numpy as np
|
|
22
|
+
import yaml
|
|
23
|
+
|
|
24
|
+
from most_queue.io.tables import print_sojourn_moments, print_waiting_moments, probs_print
|
|
25
|
+
from most_queue.sim.base import QsSim # or specialised sim
|
|
26
|
+
from most_queue.theory.<area>.<model> import <ModelCalc> # the theory class
|
|
27
|
+
from most_queue.random.distributions import H2Distribution # or whichever fits the test
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Load shared tolerances from `tests/default_params.yaml`
|
|
31
|
+
|
|
32
|
+
Always read these constants � never hard-code tolerances in the test:
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
params_path = os.path.join(os.getcwd(), "tests", "default_params.yaml")
|
|
36
|
+
with open(params_path, "r", encoding="utf-8") as f:
|
|
37
|
+
params = yaml.safe_load(f)
|
|
38
|
+
|
|
39
|
+
ARRIVAL_RATE = float(params["arrival"]["rate"])
|
|
40
|
+
SERVICE_TIME_CV = float(params["service"]["cv"])
|
|
41
|
+
NUM_OF_JOBS = int(params["num_of_jobs"])
|
|
42
|
+
UTILIZATION_FACTOR = float(params["utilization_factor"])
|
|
43
|
+
MOMENTS_ATOL = float(params["moments_atol"])
|
|
44
|
+
MOMENTS_RTOL = float(params["moments_rtol"])
|
|
45
|
+
PROBS_ATOL = float(params["probs_atol"])
|
|
46
|
+
PROBS_RTOL = float(params["probs_rtol"])
|
|
47
|
+
ERROR_MSG = params["error_msg"]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Standard test body
|
|
51
|
+
|
|
52
|
+
```python
|
|
53
|
+
def test_<model>():
|
|
54
|
+
# 1. Match service distribution moments between theory and sim.
|
|
55
|
+
b1 = UTILIZATION_FACTOR * NUM_OF_CHANNELS / ARRIVAL_RATE
|
|
56
|
+
h2_params = H2Distribution.get_params_by_mean_and_cv(b1, SERVICE_TIME_CV)
|
|
57
|
+
b = H2Distribution.calc_theory_moments(h2_params, 5)
|
|
58
|
+
|
|
59
|
+
# 2. Theory.
|
|
60
|
+
calc = <ModelCalc>(...) # any constructor args your model needs
|
|
61
|
+
calc.set_sources(ARRIVAL_RATE) # or (params, kendall) for non-Markovian arrivals
|
|
62
|
+
calc.set_servers(b)
|
|
63
|
+
calc_results = calc.run()
|
|
64
|
+
assert abs(UTILIZATION_FACTOR - calc_results.utilization) < PROBS_ATOL
|
|
65
|
+
|
|
66
|
+
# 3. Simulation with the SAME distribution.
|
|
67
|
+
qs = QsSim(NUM_OF_CHANNELS)
|
|
68
|
+
qs.set_sources(ARRIVAL_RATE, "M")
|
|
69
|
+
qs.set_servers(h2_params, "H")
|
|
70
|
+
sim_results = qs.run(NUM_OF_JOBS)
|
|
71
|
+
|
|
72
|
+
# 4. Diagnostics (always print � helps debugging when CI flips).
|
|
73
|
+
print_waiting_moments(sim_results.w, calc_results.w)
|
|
74
|
+
print_sojourn_moments(sim_results.v, calc_results.v)
|
|
75
|
+
probs_print(sim_results.p, calc_results.p, 10)
|
|
76
|
+
|
|
77
|
+
# 5. Assertions. Compare RAW moments. Higher moments are noisy at
|
|
78
|
+
# NUM_OF_JOBS=100k ? typically validate the first 2 only.
|
|
79
|
+
assert np.allclose(sim_results.w[:2], calc_results.w[:2],
|
|
80
|
+
rtol=MOMENTS_RTOL, atol=MOMENTS_ATOL)
|
|
81
|
+
assert np.allclose(sim_results.v[:2], calc_results.v[:2],
|
|
82
|
+
rtol=MOMENTS_RTOL, atol=MOMENTS_ATOL)
|
|
83
|
+
assert np.allclose(np.array(sim_results.p[:10]),
|
|
84
|
+
np.array(calc_results.p[:10]),
|
|
85
|
+
atol=PROBS_ATOL, rtol=PROBS_RTOL), ERROR_MSG
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Why each piece is non-negotiable
|
|
89
|
+
|
|
90
|
+
| Step | Reason |
|
|
91
|
+
|------|--------|
|
|
92
|
+
| Same distribution moments on both sides | Otherwise the comparison is meaningless. Use the distribution's `get_params_by_mean_and_cv` + `calc_theory_moments`. |
|
|
93
|
+
| `default_params.yaml` constants | Project-wide tolerances � changing them silently is forbidden (see rule `pytest-quality.mdc`). |
|
|
94
|
+
| Compare only first 2 moments by default | Sample 3rd/4th moments require >1M jobs to converge; doing fewer means false negatives. |
|
|
95
|
+
| Always print `io.tables` | When a test fails in CI you need the actual numbers, not just the assertion. |
|
|
96
|
+
|
|
97
|
+
## When defaults are not enough
|
|
98
|
+
|
|
99
|
+
- **High utilization (? ? 0.9)** or **heavy-tailed service (Pareto, large CV)**:
|
|
100
|
+
raise `NUM_OF_JOBS` to 500k�1M *in the test only*. Do **not** lower
|
|
101
|
+
`MOMENTS_RTOL` instead.
|
|
102
|
+
- **Multi-channel (n > 1)** with priorities or vacations: prefer the
|
|
103
|
+
specialised simulator (`QsSim` subclass in `most_queue/sim/`) over composing
|
|
104
|
+
with hooks.
|
|
105
|
+
- **Non-Markovian arrivals**: use `Gamma` for the sim side and pass the same
|
|
106
|
+
`(mean, cv)` to the theory class.
|
|
107
|
+
|
|
108
|
+
## Diagnostic helpers (in `most_queue/io/tables`)
|
|
109
|
+
|
|
110
|
+
- `print_waiting_moments(sim.w, calc.w)`
|
|
111
|
+
- `print_sojourn_moments(sim.v, calc.v)`
|
|
112
|
+
- `print_raw_moments(sim_moments, calc_moments)`
|
|
113
|
+
- `probs_print(sim.p, calc.p, n_states)`
|
|
114
|
+
|
|
115
|
+
## Reference tests in this repo
|
|
116
|
+
|
|
117
|
+
| File | What it validates |
|
|
118
|
+
|------|-------------------|
|
|
119
|
+
| `tests/test_mg1_calc.py` | Canonical M/G/1 vs sim � minimal, copy-as-template |
|
|
120
|
+
| `tests/test_gi_m_n_calc.py` | Non-Markovian arrivals (Gamma) |
|
|
121
|
+
| `tests/test_mgn_tt.py` | Takahashi�Takami M/G/n |
|
|
122
|
+
| `tests/test_mg1_warmup.py` | Vacation/warm-up extension to the pattern |
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# Keep GitHub's language statistics meaningful: the repo is a Python library,
|
|
2
|
+
# notebooks and research materials are documentation, not source code.
|
|
3
|
+
*.ipynb linguist-documentation
|
|
4
|
+
docs/** linguist-documentation
|
|
5
|
+
works/** linguist-documentation
|
|
6
|
+
tutorials/** linguist-documentation
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
pytest:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
strategy:
|
|
14
|
+
fail-fast: false
|
|
15
|
+
matrix:
|
|
16
|
+
python-version: ["3.10", "3.12"]
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
|
|
20
|
+
- uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: ${{ matrix.python-version }}
|
|
23
|
+
cache: pip
|
|
24
|
+
|
|
25
|
+
- name: Install package and test dependencies
|
|
26
|
+
run: |
|
|
27
|
+
python -m pip install -U pip
|
|
28
|
+
python -m pip install -e .
|
|
29
|
+
python -m pip install pytest pytest-rerunfailures
|
|
30
|
+
|
|
31
|
+
- name: Run tests (fast set)
|
|
32
|
+
# --reruns 1: simulation-vs-theory tests are statistical; a single
|
|
33
|
+
# rerun absorbs rare unlucky sample paths without hiding real breakage
|
|
34
|
+
run: pytest tests/ -m "not slow" -q --reruns 1 --only-rerun AssertionError
|
|
@@ -162,11 +162,40 @@ 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
|
|
|
194
|
+
# ignore article about negative queues
|
|
195
|
+
docs/negative_queues_takahasi_takami.md
|
|
196
|
+
docs/negative_queues_figures/
|
|
197
|
+
docs/books/
|
|
198
|
+
docs/статьи/
|
|
199
|
+
works/queueing_systems_review/SRPT/pdf/
|
|
200
|
+
works/experiments/rabbitmq_prefetch/
|
|
201
|
+
works/reviews/
|