most-queue 2.7__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/.gitattributes +6 -0
- most_queue-2.8/.github/workflows/tests.yml +34 -0
- {most_queue-2.7 → most_queue-2.8}/.gitignore +26 -1
- {most_queue-2.7 → 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.7/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.7/docs/calculation.md → most_queue-2.8/docs/calculation.ru.md +74 -4
- most_queue-2.8/docs/concepts.md +335 -0
- most_queue-2.7/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.7/docs/custom_simulators.md → most_queue-2.8/docs/custom_simulators.ru.md +2 -0
- most_queue-2.8/docs/distributions.md +430 -0
- most_queue-2.7/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.7/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.7/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.7/docs/negative_networks_calculation.md → most_queue-2.8/docs/negative_networks_calculation.ru.md +2 -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.7/docs/networks.md → most_queue-2.8/docs/networks.ru.md +6 -4
- most_queue-2.8/docs/priorities.md +331 -0
- most_queue-2.7/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.7/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.7/docs/tesaurus.md → most_queue-2.8/docs/tesaurus.ru.md +3 -1
- most_queue-2.8/examples/srpt_table.py +153 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/__init__.py +1 -1
- {most_queue-2.7 → most_queue-2.8}/most_queue/io/plots.py +41 -5
- {most_queue-2.7 → most_queue-2.8}/most_queue/misc/calc_v_pls.py +1 -1
- {most_queue-2.7 → 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.7 → most_queue-2.8}/most_queue/random/utils/create.py +9 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/__init__.py +2 -1
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/base.py +17 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/base_core.py +4 -6
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/batch.py +99 -95
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/finite_source.py +246 -242
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/flow_sum.py +240 -240
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/fork_join.py +264 -260
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/impatient.py +177 -181
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/negative.py +190 -35
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/networks/negative_network.py +3 -4
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/priority.py +4 -9
- 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/predictor.py +44 -0
- {most_queue-2.7 → 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.7 → most_queue-2.8}/most_queue/sim/utils/servers.py +45 -1
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/utils/stats_update.py +2 -2
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/utils/tasks.py +21 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/vacations.py +364 -316
- {most_queue-2.7 → most_queue-2.8}/most_queue/structs.py +32 -1
- 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.7 → most_queue-2.8}/most_queue/theory/fifo/gi_m_n.py +257 -258
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/fifo/gmc_takahasi.py +0 -1
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/fifo/hkhk_takahasi.py +475 -486
- 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.7 → most_queue-2.8}/most_queue/theory/fifo/mgn_takahasi.py +1 -1
- 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/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.7 → most_queue-2.8}/most_queue/theory/utils/busy_periods.py +1 -2
- {most_queue-2.7 → 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.7 → 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.7 → most_queue-2.8}/most_queue/theory/utils/timing.py +2 -2
- {most_queue-2.7 → 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.7 → most_queue-2.8}/most_queue/theory/vacations/mg1_warm_calc.py +1 -1
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/vacations/mgn_with_h2_delay_cold_warm.py +1 -1
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/vacations/mmn_with_h2_cold_and_h2_warmup.py +1 -1
- {most_queue-2.7 → most_queue-2.8}/pyproject.toml +77 -74
- {most_queue-2.7 → 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.7 → most_queue-2.8}/tests/test_mg1_calc.py +3 -2
- {most_queue-2.7 → 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.7 → most_queue-2.8}/tests/test_network_negative_calc.py +2 -1
- 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.7 → most_queue-2.8}/tests/test_tt_vs_sim_cv105.py +132 -149
- {most_queue-2.7 → most_queue-2.8}/tests/test_tt_vs_sim_gamma_cvl1.py +0 -2
- 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.7 → most_queue-2.8}/tests/units/test_weibull.py +1 -6
- most_queue-2.8/tutorials/disciplines_comparison.ipynb +471 -0
- {most_queue-2.7 → 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.7 → most_queue-2.8}/tutorials/mgn_takahasi_takami.ipynb +1 -1
- {most_queue-2.7 → most_queue-2.8}/tutorials/network_with_priorities.ipynb +1 -1
- {most_queue-2.7 → most_queue-2.8}/tutorials/priority_queue.ipynb +1 -1
- {most_queue-2.7 → 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.8/works/vacations/__init__.py +0 -0
- most_queue-2.7/PKG-INFO +0 -274
- most_queue-2.7/README.md +0 -233
- most_queue-2.7/docs/models.md +0 -459
- 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/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_mgn_disaster.py +0 -81
- most_queue-2.7/tests/test_mgn_rcs.py +0 -84
- 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 → most_queue-2.8}/.cursorrules +0 -0
- {most_queue-2.7 → most_queue-2.8}/LICENSE +0 -0
- {most_queue-2.7 → most_queue-2.8}/assets/3.gif +0 -0
- {most_queue-2.7 → most_queue-2.8}/deploy.txt +0 -0
- {most_queue-2.7 → most_queue-2.8}/examples/custom_network_example.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/examples/custom_simulator_example.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/googleb31d3dccb40f969f.html +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/constants.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/io/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/io/tables.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/misc/approx_cdf_make.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/misc/compare_fj_calc.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/misc/flow_sum.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/misc/run_mgn_with_h2_delay_cold_warm.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/misc/tests/test_fj_delta.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/misc/tests/test_network_opt_approx.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/misc/tests/test_network_opt_plus.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/misc/vacations_paper_utils.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/random/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/random/distributions.yaml +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/random/utils/base.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/random/utils/fit.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/random/utils/load.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/random/utils/params.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/fork_join_delta.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/networks/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/networks/base_network_sim.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/networks/network.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/networks/priority_network.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/utils/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/utils/events.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/sim/utils/phase.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/base_queue.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/batch/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/batch/mm1.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/calc_params.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/closed/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/closed/engset.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/fifo/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/fifo/ek_d_n.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/fifo/gi_m_1.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/fifo/m_d_n.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/fifo/mg1.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/fifo/mmnr.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/fifo/takahasi_base.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/fork_join/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/fork_join/m_m_n.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/fork_join/split_join.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/impatience/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/impatience/mm1.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/negative/mg1_rcs.py +0 -0
- /most_queue-2.7/most_queue/theory/networks/opt/__init__.py → /most_queue-2.8/most_queue/theory/negative/structs.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/networks/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/networks/base_network_calc.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/networks/negative_network.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/networks/network_viewer.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/networks/open_network.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/networks/open_network_prty.py +0 -0
- {most_queue-2.7/most_queue/theory/priority/non_preemptive → most_queue-2.8/most_queue/theory/networks/opt}/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/networks/opt/transition.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/networks/opt/transition_approx.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/networks/opt/transition_plus.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/priority/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/priority/mgn_invar_approx.py +0 -0
- {most_queue-2.7/most_queue/theory/priority/preemptive → most_queue-2.8/most_queue/theory/priority/non_preemptive}/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/priority/non_preemptive/mg1.py +0 -0
- {most_queue-2.7/most_queue/theory/vacations → most_queue-2.8/most_queue/theory/priority/preemptive}/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/priority/preemptive/m_ph_n_busy_approx.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/priority/preemptive/mg1.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/priority/preemptive/mm2_3cls_busy_approx.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/priority/preemptive/mmn_2cls_pr_busy_approx.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/r_example.gexf +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/utils/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/utils/binom_probs.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/utils/conv.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/utils/diff5dots.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/utils/flow_sum.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/utils/max_dist.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/utils/moments.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/utils/q_poisson_arrival_calc.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/utils/residual.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/utils/student_stat.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/utils/transforms.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/utils/utilization_approx.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/most_queue/theory/utils/validation.py +0 -0
- {most_queue-2.7/tests → most_queue-2.8/most_queue/theory/vacations}/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/requirements.txt +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/Dockerfile +0 -0
- {most_queue-2.7/works → most_queue-2.8/tests}/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/run.sh +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_base_qs_sim.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_batch.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_ek_d_n.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_engset.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_fj_sim.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_gi_m_1_calc.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_gi_m_n_calc.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_impatience.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_m_d_n_calc.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_m_h2_h2warm.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_m_ph_n_prty.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_mg1_rcs.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_mg1_warmup.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_mgn_tt.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_mgn_with_h2_delay_cold_warm.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_mm2_3cls_prty_busy.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_mmn_h2cold_h2warm.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_mmn_prty_busy_approx.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_negative_network.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_network_im_prty.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_network_no_prty.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_network_opt.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_qs_sim.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/test_qs_sim_prty.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/units/test_busy_moments_calc.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/units/test_central_moments.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/units/test_conditionals.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/units/test_h2_params_cv.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/units/test_queue_types.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/units/test_tt_up_probs.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/units/test_v1_on_channels.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/tests/units/test_v1_utlization_approx.py +0 -0
- {most_queue-2.7/works/negative_queues → most_queue-2.8/works}/__init__.py +0 -0
- {most_queue-2.7/works/vacations → most_queue-2.8/works/negative_queues}/__init__.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/works/vacations/base_parameters.yaml +0 -0
- {most_queue-2.7 → most_queue-2.8}/works/vacations/channels.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/works/vacations/cooling.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/works/vacations/cooling_delay.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/works/vacations/main.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/works/vacations/run_one_calc_vs_sim.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/works/vacations/service.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/works/vacations/utilization.py +0 -0
- {most_queue-2.7 → most_queue-2.8}/works/vacations/utils.py +0 -0
- {most_queue-2.7 → 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,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,7 @@ 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/
|