Used as the row prefix — e.g. "R" gives R01, R02, R03…
Labelled A, B, C… — total system strings available. Up to 15.
Give each string a custom display name (e.g. "A1") — leave blank to keep the default letter. Updates when you click Generate table.
Each row is a load that can span multiple strings at once. Up to 50.
Rebuilds the row list below to match Number of strings / Number of rows / Row name — nothing changes until you click this, so editing loads and K values below is safe.
Set each row's total load and how many strings it should span (K). The load splits evenly across whichever K strings the optimizer assigns.
Drag a row onto another to make it a subset (or equal to) that row. Drag it to the top area to unlink.
Useful for linking rows that are far apart in a long list, without dragging across the whole page. "Disjoint from" is available as a relationship type too, so a pair can never share any string.
Limit a range of rows to only certain strings — e.g. rows 1–5 can only use A–E, rows 6–10 only F–I.
Max number of separate taps allowed on each string. Rows linked by a constraint above share one tap. Leave blank for no limit — updates when you click Generate table.
Selecting more runs additional "what if N strings fail at once" scenarios and adds them as extra rows below the table. Higher levels take longer to compute — updates when you click Generate table.
Important: the optimizer always searches for the best arrangement against 1POF (single-string failure) only. 2POF, 3POF, etc. are not separately optimized for — they're calculated by testing that same 1POF-optimized arrangement against deeper failures, purely for reporting. If 2POF looks bad, that means this particular arrangement handles double failures poorly, not that a better arrangement doesn't exist for that specific scenario.
Extensive search
Off — 6 attempts (fast). On — 15 attempts from different random starting points, slower but finds an equal-or-better arrangement.
Each row's total load splits evenly across whichever strings it's assigned to.
If one of those strings fails, that row's share redistributes evenly across
the row's other assigned strings only — never to a string the row
wasn't already using. The optimizer searches for which strings each row
should use (keeping each row's load and string-count fixed) to make the
worst-case load (TCL-F) as low and as even as possible across every string.
Distribution table —
–
Peak TCL(F)
–
TCL(F) spread
Set your rows and click "Calculate distribution" to build the table.
Feedback
Bug, idea, or just a note — goes straight to the person who built this. Not posted anywhere.
Import from Excel
×
This file has multiple sheets — pick one:
Pick a mode above, then click a column letter (for Row Name / Load / K Range) or a row number (for Data Start / Data End).