Skip to content

Commit 10f432b

Browse files
xabarovclaude
andcommitted
docs: complete the model catalog and fix the network-optimization section
Systematic audit: enumerated every calculator class under most_queue/theory and checked it against the catalog. 28 models were implemented but absent from it, so they were effectively undiscoverable -- GI/M/c, M/D/n, Ek/D/n, the three Takahashi-Takami solvers, four warm-up/cooling variants, five priority approximations, M/M/1+M, Split-Join, multiserver bulk service, the four single-node negative-customer models, and six network models including the routing optimizers. The audit is now reproducible: no class under theory/ is missing from either catalog. The Russian catalog was also six rows shorter than the English one -- the MSJ calibration family (feature-conditional service, GPU resource envelope, queue-aware selection, joint marked arrivals, availability-aware arrivals, capacity calendar) existed only in English. Both are now 119 rows with identical class coverage. Separately, docs/networks.{md,ru.md} documented a class `TransitionOptimization` with an `optimize()` method. Neither exists -- the real API is NetworkOptimizer(network=..., maximum_rates_to_end=...).run(). The section is rewritten against the actual code, says what the optimizer does (load balancing after Ryzhikov 2019), lists the three variants and OptimizerDynamic, and explains why maximum_rates_to_end is what makes the problem non-trivial. The new example was executed before committing. Documentation only; no library code touched. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent c447f01 commit 10f432b

4 files changed

Lines changed: 156 additions & 33 deletions

File tree

‎docs/models.md‎

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,23 +68,41 @@ daily VC GPU counts do not establish intraday hard quotas or actual placement.
6868
| M/G/n PS | MGnPSCalc | - | - | n-server egalitarian sharing; reduces to M/G/1 PS at n=1; queue length matches M/M/n |
6969
| M/G/1 LCFS-PR | MG1LcfsPrCalc | LcfsPRSim | - | Sojourn = busy period |
7070
| GI/M/1 | GIM1Calc | QsSim | - | General arrivals |
71+
| GI/M/c | GiMn | QsSim | - | General arrivals, c servers; embedded chain at arrival epochs |
72+
| M/D/n | MDn | QsSim | - | Deterministic service, n servers |
73+
| Ek/D/n | EkDn | QsSim | - | Erlang arrivals, deterministic service |
74+
| M/H2/n (Takahashi-Takami) | MGnCalc | QsSim | - | General service via an H2 fit; numerical matrix-geometric iteration |
75+
| H2/M/n (Takahashi-Takami) | H2MnCalc | QsSim | - | H2 arrivals, exponential service |
76+
| Hk/Hk/n (Takahashi-Takami) | HkHkNCalc | QsSim | - | Hyperexponential arrivals AND service |
7177
| GI/M/2, busy-server-dependent rate | GiM2StateDependentCalc | - | - | A lone busy server may work at a different rate (helped by the idle one, or slowed down); exact state, arrival-observed and waiting-time distributions (Bhat 1966) |
7278
| GI/G/1, GI/G/m (approx) | GIG1ApproxCalc, GIGmApproxCalc | QsSim | - | Kingman/KLB/Allen–Cunneen, w1 only |
7379
| M/G/c/PR | MGnInvarApproximation | PriorityQueueSimulator | Yes | Preemptive priority |
7480
| M/G/c/NP | MGnInvarApproximation | PriorityQueueSimulator | Yes | Non-preemptive priority |
81+
| M/G/1 preemptive priority | MG1PreemptiveCalc | PriorityQueueSimulator | Yes | Exact, single server |
82+
| M/G/1 non-preemptive priority | MG1NonPreemptiveCalc | PriorityQueueSimulator | Yes | Exact, single server |
7583
| M/G/1 multiple vacations | MG1MultipleVacationsCalc | VacationQueueingSystemSimulator | - | Fuhrmann–Cooper |
84+
| M/G/1 with warm-up | MG1WarmCalc | VacationQueueingSystemSimulator | - | The server needs warming up after an idle period |
85+
| M/H2/n with H2 warm-up | MH2nH2Warm | QsSim | - | Multi-server warm-up, Takahashi-Takami |
86+
| M/M/n with H2 cooling and warm-up | MMnHyperExpWarmAndCold | QsSim | - | Both cooling down and warming up |
87+
| M/H2/n, cooling + warm-up + delay | MGnH2ServingColdWarmDelay | QsSim | - | Cooling, warm-up and a cooling-start delay |
7688
| M/G/1 N-policy | MG1NPolicyCalc | NPolicyQueueSim | - | Activation threshold N |
7789
| M/G/1 unreliable | MG1UnreliableCalc | UnreliableQueueSim | - | Breakdowns+repairs, completion time |
7890
| M/M/c breakdowns & repairs | MMcBreakdownsCalc | MMcBreakdownsSim | - | Independent failures, availability, R repairmen |
7991
| Machine repair problem | MachineRepairCalc | MachineRepairSim | - | Finite park, warm spares, R repairmen (Palm) |
8092
| Machine repair, 2 heterogeneous repairmen | MachineRepairHeterogeneousCalc | MachineRepairHeterogeneousSim | - | Different repair rates, exact non-birth-death CTMC (Krishnamoorthi 1963) |
8193
| M/M/1 working breakdowns | MM1WorkingBreakdownsCalc | MM1WorkingBreakdownsSim | - | Degraded rate during repair (Kalidass-Kasturi) |
8294
| M/M/1 disasters + repair | MM1DisasterRepairCalc | MM1DisasterRepairSim | - | Queue flush, repair phase, P(down)=δ/(δ+η) |
95+
| M/G/1 with negative customers (RCS) | MG1NegativeCalcRCS | NegativeServiceQueueSim | - | A negative arrival removes the customer in service |
96+
| M/G/1 with disasters | MG1Disasters | NegativeServiceQueueSim | - | A negative arrival flushes the whole queue |
97+
| M/G/n with negative customers (RCS) | MGnNegativeRCSCalc | NegativeServiceQueueSim | - | Multi-server, via an H2 fit |
98+
| M/G/n with disasters | MGnNegativeDisasterCalc | NegativeServiceQueueSim | - | Multi-server queue flush |
8399
| M/M/1 retrial unreliable | MM1RetrialUnreliableCalc | MM1RetrialUnreliableSim | - | Active breakdowns, orbit, availability |
84100
| Fork-Join | ForkJoinMarkovianCalc | ForkJoinSim | - | Parallel service |
85101
| Fork-Join, series-parallel DAG | ForkJoinDAGCalc | - | - | Heterogeneous branches, nested series/parallel task graph |
102+
| Split-Join | SplitJoinCalc | ForkJoinSim | - | A new batch starts only after the previous one fully completes |
86103
| Mˣ/M/1 | BatchMM1 | QueueingSystemBatchSim | - | Batch arrivals |
87104
| Erlang-A (M/M/n+M) | MMnImpatienceCalc | ImpatientQueueSim | - | Abandonment, staffing helper |
105+
| M/M/1+M (impatience) | MM1Impatience | ImpatientQueueSim | - | Exponential patience, single server |
88106
| M/M/1 retrial | MM1RetrialCalc | RetrialQueueSim | - | Orbit, exact truncated chain |
89107
| M/G/1 retrial | MG1RetrialCalc | RetrialQueueSim | - | Falin–Templeton closed form |
90108
| MAP/PH/1 | MapPh1Calc | QsSim("MAP", "PH") | - | Correlated arrivals, QBD |
@@ -97,6 +115,9 @@ daily VC GPU counts do not establish intraday hard quotas or actual placement.
97115
| M/M/k, m classes (exact) | MMkPriorityExact | PriorityQueueSimulator | Yes | Exact CTMC + per-class response variance |
98116
| M/M/2, 2 classes, heterogeneous servers | MM2PriorityHeterogeneousCalc | MM2PriorityHeterogeneousSim | Yes | Exact CTMC, non-birth-death (Krishnamoorthi 1963 technique) |
99117
| M/PH/k, m classes | RDRAPriorityPH, MPhPhK2Class | PriorityQueueSimulator | Yes | Phase-type service (RDR §2.3) |
118+
| M/Ph/n, priorities (busy-period approx) | MPhNPrty | PriorityQueueSimulator | Yes | Busy-period approximation |
119+
| M/M/2, 3 classes (busy-period approx) | MM2BusyApprox3Classes | PriorityQueueSimulator | Yes | Three priority classes, two servers |
120+
| M/M/n, 2 classes preemptive (approx) | MMnPR2ClsBusyApprox | PriorityQueueSimulator | Yes | Busy-period approximation |
100121
| M/G/1 accumulating priority | MG1AccumulatingPriorityCalc | AccumulatingPrioritySim | Yes | Kleinrock/APQ, FIFO <-> strict priority spectrum |
101122
| M/M/n+M priority + impatience | MMnPriorityImpatienceCalc | MMnPriorityImpatienceSim | Yes | Priority Erlang-A, per-class abandonment |
102123
| MMAP/PH/1 priority | MapPh1PriorityCalc | PriorityQueueSimulator("MAP") | Yes | Correlated arrivals, NP/PR/RS, exact CTMC |
@@ -124,6 +145,7 @@ daily VC GPU counts do not establish intraday hard quotas or actual placement.
124145
| M/M^[a,b]/1 bulk service | BulkServiceMM1Calc | BulkServiceSim | - | Batch service, LLM inference batching; exact N/W moments and exact SLA tail `get_tail`/`get_cdf` at a=1 |
125146
| M/Erlang(k)^[a,b]/1 bulk service | BulkServiceErlangCalc | - | - | General (Erlang-fitted, CV≤1) batch-service time; reduces to k=1 above; exact `get_tail`/`get_cdf` at a=1 |
126147
| M/H2^[a,b]/1 bulk service | BulkServiceH2Calc | - | - | General (H2-fitted, CV≥1) batch-service time; reduces to p1=1 above; exact `get_tail`/`get_cdf` at a=1 |
148+
| Multiserver bulk service | BulkServiceMultiserverCalc | BulkServiceSim | - | c independent servers sharing one queue, batch-size-dependent rate |
127149
| Occupancy-dependent continuous batching | OccupancyDependentQueueCalc | - | - | LLM-serving continuous batching; occupancy-dependent rate, hard concurrency cap; exact W moments/tail, exact regression to M/M/k/N |
128150
| Occupancy-modulated two-branch batching | OccupancyDependentH2QueueCalc | - | - | Heterogeneous output lengths; exact level distribution and mean wait; reduces to the row above at p1=1 or mu1=mu2 |
129151
| M/M/c, delay-dependent service rate | MMcDelayDependentServiceCalc | MMcDelayDependentServiceSim | - | Service rate switches at a threshold on the customer's OWN experienced delay (slowdown/speedup); exact VQT distribution, density and mean; reduces exactly to Erlang-C at mu1=mu2 (D'Auria, Adan, Bekker & Kulkarni, EJOR 2022) |
@@ -142,7 +164,13 @@ daily VC GPU counts do not establish intraday hard quotas or actual placement.
142164
| Open network QNA (Whitt) | OpenNetworkCalcQNA | NetworkSimulator | - | Two-moment internal flows, KLB correction |
143165
| Closed network | ClosedNetworkCalc | ClosedNetworkSim | - | Exact MVA / Buzen convolution / Schweitzer, delay stations |
144166
| G-network (Gelenbe) | GNetworkCalc | NegativeNetwork | - | Negative customers/signals, exact product form |
167+
| Multi-class G-network | GNetworkMulticlassCalc | NegativeNetwork | - | Several customer classes with signals |
168+
| Network with negative customers | NegativeNetworkCalc | NegativeNetwork | - | Negative arrivals at the nodes (RCS/disasters) |
169+
| Non-stationary network | TimeVaryingNetworkCalc | - | - | Time-varying arrival rates across the nodes (PSA/MOL) |
170+
| Routing optimization | NetworkOptimizer, NetworkOptimizerPlus, NetworkOptimizerWithApprox, OptimizerDynamic | - | - | Pick the routing matrix that minimises sojourn time; exact, extended, approximate and dynamic variants |
145171
| BCMP multi-class network | BCMPOpenNetworkCalc, BCMPClosedNetworkCalc | - | - | FCFS/PS/LCFS-PR/IS, multi-chain MVA |
172+
| Open network with blocking | TandemBlockingCalc | NetworkSimulator | - | Tandem with finite buffers, blocking-after-service |
173+
| Network with Fork-Join stations | OpenNetworkCalcForkJoin | NetworkSimulator | - | A node may fork a job into parallel subtasks |
146174

147175
## Choosing a model
148176

0 commit comments

Comments
 (0)