FA-95281 / Warehouse slotting and bin packing / Open access
Face sizing: needed cases floored · case 01
Faces are sized a case short and run out before the replenishment cycle.
ROOT CAUSE
Needed cases are floor-divided, dropping the partial case of demand.
VERIFIED REPAIR
Round needed cases up.
Unsuccessful approach: Rounding to nearest still drops partial cases below one half.
Case contract
weekly eaches demand, days of cover, case pack cp, slot_types [[type, capacity_cases, cost_rank]]. Needed cases = ceil(weekly*days / (7*cp)). Choose the smallest capacity that holds it (then cost_rank, type) using 1 slot. If none holds it, use the largest capacity type (then cost_rank, type) and ceil(need/capacity) slots. Zero demand -> ["NONE", 0, 0].
Why this case matters
Forward pick faces are sized to hold a target number of days of demand.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(weekly, days, cp, slot_types):
if weekly <= 0:
return ['NONE', 0, 0]
need = (weekly * days) // (7 * cp)
fits = [s for s in slot_types if s[1] >= need]
if fits:
t = min(fits, key=lambda s: (s[1], s[2], s[0]))
return [t[0], need, 1]
t = min(slot_types, key=lambda s: (-s[1], s[2], s[0]))
return [t[0], need, -(-need // t[1])]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['generated mix 7', [84, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 10, 2]], ['generated mix 15', [1400, 14, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 234, 24]], ['generated mix 23', [70, 5, 1, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 50, 9]]], [['generated mix 9', [350, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 13, 1]], ['generated mix 13', [1, 7, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split tie', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['generated mix 10', [70, 5, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 50, 5]], ['generated mix 19', [20, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 3, 1]], ['generated mix 27', [1, 3, 6, [['A', 10, 2], ['B', 10, 1]]], ['B', 1, 1]]], [['generated mix 17', [70, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 3, 1]], ['generated mix 18', [1400, 1, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 34, 1]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 22', [700, 14, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 1400, 35]], ['generated mix 30', [1400, 3, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 50, 5]], ['generated mix 38', [0, 14, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['NONE', 0, 0]]], [['generated mix 27', [1, 3, 6, [['A', 10, 2], ['B', 10, 1]]], ['B', 1, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split tie', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['generated mix 32', [1400, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 50, 5]], ['generated mix 40', [70, 5, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 50, 2]], ['generated mix 48', [700, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 84, 14]], ['generated mix 56', [1, 5, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 1, 1]]], [['generated mix 39', [1400, 7, 12, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 117, 20]], ['generated mix 44', [350, 1, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 5, 1]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 43', [20, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 7, 1]], ['generated mix 52', [0, 14, 24, [['A', 10, 2], ['B', 10, 1]]], ['NONE', 0, 0]], ['generated mix 60', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| smallest fit tie cost | ['FLOW', 5, 1] | ['FLOW', 6, 1] | Failed |
| tiny demand one case | ['SHELF', 0, 1] | ['SHELF', 1, 1] | Failed |
| exact capacity | ['SHELF', 4, 1] | ['SHELF', 4, 1] | Passed |
| zero demand | ['NONE', 0, 0] | ['NONE', 0, 0] | Passed |
| split | ['PAL', 233, 6] | ['PAL', 234, 6] | Failed |
| generated mix 7 | ['M', 10, 2] | ['M', 10, 2] | Passed |
| generated mix 15 | ['B', 233, 24] | ['B', 234, 24] | Failed |
| generated mix 23 | ['M', 50, 9] | ['M', 50, 9] | Passed |
SHA-256 / a33de4ed122ec15dcc2efae35ea1bac1e280b3fe6979138358f136f992e3f2fb
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(weekly, days, cp, slot_types):
if weekly <= 0:
return ['NONE', 0, 0]
need = round(weekly * days / (7 * cp))
fits = [s for s in slot_types if s[1] >= need]
if fits:
t = min(fits, key=lambda s: (s[1], s[2], s[0]))
return [t[0], need, 1]
t = min(slot_types, key=lambda s: (-s[1], s[2], s[0]))
return [t[0], need, -(-need // t[1])]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['generated mix 7', [84, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 10, 2]], ['generated mix 15', [1400, 14, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 234, 24]], ['generated mix 23', [70, 5, 1, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 50, 9]]], [['generated mix 9', [350, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 13, 1]], ['generated mix 13', [1, 7, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split tie', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['generated mix 10', [70, 5, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 50, 5]], ['generated mix 19', [20, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 3, 1]], ['generated mix 27', [1, 3, 6, [['A', 10, 2], ['B', 10, 1]]], ['B', 1, 1]]], [['generated mix 17', [70, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 3, 1]], ['generated mix 18', [1400, 1, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 34, 1]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 22', [700, 14, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 1400, 35]], ['generated mix 30', [1400, 3, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 50, 5]], ['generated mix 38', [0, 14, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['NONE', 0, 0]]], [['generated mix 27', [1, 3, 6, [['A', 10, 2], ['B', 10, 1]]], ['B', 1, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split tie', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['generated mix 32', [1400, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 50, 5]], ['generated mix 40', [70, 5, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 50, 2]], ['generated mix 48', [700, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 84, 14]], ['generated mix 56', [1, 5, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 1, 1]]], [['generated mix 39', [1400, 7, 12, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 117, 20]], ['generated mix 44', [350, 1, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 5, 1]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 43', [20, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 7, 1]], ['generated mix 52', [0, 14, 24, [['A', 10, 2], ['B', 10, 1]]], ['NONE', 0, 0]], ['generated mix 60', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| smallest fit tie cost | ['FLOW', 6, 1] | ['FLOW', 6, 1] | Passed |
| tiny demand one case | ['SHELF', 0, 1] | ['SHELF', 1, 1] | Failed |
| exact capacity | ['SHELF', 4, 1] | ['SHELF', 4, 1] | Passed |
| zero demand | ['NONE', 0, 0] | ['NONE', 0, 0] | Passed |
| split | ['PAL', 233, 6] | ['PAL', 234, 6] | Failed |
| generated mix 7 | ['M', 10, 2] | ['M', 10, 2] | Passed |
| generated mix 15 | ['B', 233, 24] | ['B', 234, 24] | Failed |
| generated mix 23 | ['M', 50, 9] | ['M', 50, 9] | Passed |
SHA-256 / 97fb41d1aa553fced7685bcd4d080c9c21dbd6de83a34d9580e11f0a71020e8d
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(weekly, days, cp, slot_types):
if weekly <= 0:
return ['NONE', 0, 0]
need = -(-(weekly * days) // (7 * cp))
fits = [s for s in slot_types if s[1] >= need]
if fits:
t = min(fits, key=lambda s: (s[1], s[2], s[0]))
return [t[0], need, 1]
t = min(slot_types, key=lambda s: (-s[1], s[2], s[0]))
return [t[0], need, -(-need // t[1])]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['generated mix 7', [84, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 10, 2]], ['generated mix 15', [1400, 14, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 234, 24]], ['generated mix 23', [70, 5, 1, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 50, 9]]], [['generated mix 9', [350, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 13, 1]], ['generated mix 13', [1, 7, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split tie', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['generated mix 10', [70, 5, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 50, 5]], ['generated mix 19', [20, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 3, 1]], ['generated mix 27', [1, 3, 6, [['A', 10, 2], ['B', 10, 1]]], ['B', 1, 1]]], [['generated mix 17', [70, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 3, 1]], ['generated mix 18', [1400, 1, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 34, 1]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 22', [700, 14, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 1400, 35]], ['generated mix 30', [1400, 3, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 50, 5]], ['generated mix 38', [0, 14, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['NONE', 0, 0]]], [['generated mix 27', [1, 3, 6, [['A', 10, 2], ['B', 10, 1]]], ['B', 1, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split tie', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['generated mix 32', [1400, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 50, 5]], ['generated mix 40', [70, 5, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 50, 2]], ['generated mix 48', [700, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 84, 14]], ['generated mix 56', [1, 5, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 1, 1]]], [['generated mix 39', [1400, 7, 12, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 117, 20]], ['generated mix 44', [350, 1, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 5, 1]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 43', [20, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 7, 1]], ['generated mix 52', [0, 14, 24, [['A', 10, 2], ['B', 10, 1]]], ['NONE', 0, 0]], ['generated mix 60', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| smallest fit tie cost | ['FLOW', 6, 1] | ['FLOW', 6, 1] | Passed |
| tiny demand one case | ['SHELF', 1, 1] | ['SHELF', 1, 1] | Passed |
| exact capacity | ['SHELF', 4, 1] | ['SHELF', 4, 1] | Passed |
| zero demand | ['NONE', 0, 0] | ['NONE', 0, 0] | Passed |
| split | ['PAL', 234, 6] | ['PAL', 234, 6] | Passed |
| generated mix 7 | ['M', 10, 2] | ['M', 10, 2] | Passed |
| generated mix 15 | ['B', 234, 24] | ['B', 234, 24] | Passed |
| generated mix 23 | ['M', 50, 9] | ['M', 50, 9] | Passed |
SHA-256 / 3358ad2cf7a3545720700f5c5d9726ae0da0dd33cb2a08a04af55b66f705d396
Verification & scope
Stipulated days-of-supply sizing with whole cases. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:52:12.305143+00:00.
Case digest / c7d8dea23c4d9f9217604fa39b4c6cea123f4478f71d743f9983e45848f42137