FA-92846 / EV charging session scheduling / Open access
Time-of-use cheapest slot plan: equal-price tie-break · case 01
With a flat tariff the plan charges at the end of the stay instead of as early as possible.
ROOT CAUSE
Equal-price slots are ranked latest-first, deferring energy toward the departure deadline.
VERIFIED REPAIR
Break price ties by ascending slot index.
Unsuccessful approach: Reversing a descending stable sort still orders tied slots latest-first.
Case contract
prices[i] is the tariff in cents/kWh of 15-minute slot i. The car is present for slots arrive..depart-1 (depart exclusive) clipped to the tariff horizon; arrive may be negative. Each slot delivers at most max_w//4 Wh. Fill the cheapest slots first (equal price: earlier slot first), the last slot partially. Return [[slot, wh] sorted by slot, cost in millicents (sum wh*price), unmet wh]. need_wh<=0 or max_w<=0 returns [[], 0, max(need_wh,0)].
Why this case matters
Depot, workplace and public EV chargers schedule sessions against prices, circuit limits and departure deadlines; a wrong decision silently strands a driver or overloads a feeder.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(prices, arrive, depart, need_wh, max_w):
if need_wh <= 0 or max_w <= 0:
return [[], 0, max(need_wh, 0)]
slot_wh = max_w // 4
lo = max(arrive, 0)
hi = min(depart, len(prices))
window = list(range(lo, hi))
ranked = sorted(window, key=lambda s: (prices[s], -s))
plan = []
left = need_wh
for s in ranked:
if left <= 0:
break
take = min(slot_wh, left)
plan.append([s, take])
left -= take
plan.sort()
cost = sum(wh * prices[s] for s, wh in plan)
return [plan, cost, left]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
['regression: equal-price tie-break',
[[12, 10, 8, 25, 30, 10, 20, 10, 8, 10, 10, 25, 25], 3, 16, 1500, 3700],
[[[5, 575], [8, 925]], 13150, 0]],
['regression: equal-price tie-break (partial repair)', [[30, 8, 15, 8, 20], -3, 4, 4000, 11000],
[[[1, 2750], [3, 1250]], 32000, 0]],
['control 1', [[25, 30, 20, 12, 12], 2, 2, 20000, 11000], [[], 0, 20000]],
['control 2', [[8, 15, 12, 10, 8, 25, 12, 8, 8, 20, 20, 25, 12, 8], -3, 15, 7000, 3700],
[[[0, 925], [2, 925], [3, 925], [4, 925], [6, 525], [7, 925], [8, 925], [13, 925]], 63650, 0]]],
[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
['regression: equal-price tie-break', [[30, 10, 8, 15, 12, 12, 30, 25, 12], -1, 8, 4000, 7400],
[[[1, 1850], [2, 1850], [4, 300]], 36900, 0]],
['regression: equal-price tie-break (partial repair)',
[[30, 10, 12, 15, 12, 12, 15, 15, 25, 30], -2, 13, 7000, 11000],
[[[1, 2750], [2, 2750], [4, 1500]], 78500, 0]],
['control 1', [[30, 12, 20, 30, 25, 30, 12, 30, 20, 10, 20, 8, 15], 7, 12, 4000, 11000],
[[[9, 1250], [11, 2750]], 34500, 0]],
['control 2', [[12, 12, 25, 30, 8, 20, 12, 12], 3, 11, 9000, 3700],
[[[3, 925], [4, 925], [5, 925], [6, 925], [7, 925]], 75850, 4375]]],
[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
['regression: equal-price tie-break',
[[12, 15, 10, 25, 30, 25, 10, 12, 10, 30, 15, 10, 10, 10], 8, 17, 4000, 7400],
[[[8, 1850], [11, 1850], [12, 300]], 40000, 0]],
['regression: equal-price tie-break (partial repair)',
[[20, 10, 30, 8, 20, 20, 30], 2, 10, 7000, 11000],
[[[3, 2750], [4, 2750], [5, 1500]], 107000, 0]],
['control 1', [[12, 10, 15, 25, 30], 4, 4, 12500, 7400], [[], 0, 12500]],
['control 2', [[30, 12, 15, 12, 30, 15, 12, 20, 20], -2, 1, 9000, 0], [[], 0, 9000]]],
[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
['regression: equal-price tie-break', [[10, 12, 10, 8, 10, 12, 12], 2, 5, 4000, 11000],
[[[2, 1250], [3, 2750]], 34500, 0]],
['regression: equal-price tie-break (partial repair)',
[[30, 10, 8, 12, 30, 12, 8, 8, 15, 8, 12, 8, 30], 8, 14, 1500, 11000], [[[9, 1500]], 12000, 0]],
['control 1', [[12, 20, 8, 15, 10, 8, 25, 12, 30, 12], 2, 12, 20000, 11000],
[[[2, 2750], [3, 2750], [4, 2750], [5, 2750], [6, 2750], [7, 2750], [8, 750], [9, 2750]], 270000,
0]],
['control 2', [[30, 30, 20, 12, 12, 15, 12, 10], -1, 8, 7000, 7400],
[[[3, 1850], [4, 1850], [6, 1450], [7, 1850]], 80300, 0]]],
[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
['regression: equal-price tie-break',
[[12, 20, 12, 12, 12, 12, 20, 15, 10, 12], 0, 11, 4000, 7400],
[[[0, 1850], [2, 300], [8, 1850]], 44300, 0]],
['regression: equal-price tie-break (partial repair)',
[[12, 15, 15, 8, 12, 15, 10, 25, 25, 20, 20], 0, 14, 9000, 3700],
[[[0, 925], [1, 925], [2, 925], [3, 925], [4, 925], [5, 925], [6, 925], [7, 675], [9, 925],
[10, 925]],
134350, 0]],
['control 1', [[12, 12, 8, 15, 10, 12, 20, 15, 12, 10, 12, 12, 15, 15], 12, 13, 1500, 3700],
[[[12, 925]], 13875, 575]],
['control 2', [[10, 12, 10, 8, 10, 12, 12], 2, 5, 4000, 11000],
[[[2, 1250], [3, 2750]], 34500, 0]]]]
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 |
|---|---|---|---|
| boundary: nothing needed | [[], 0, 0] | [[], 0, 0] | Passed |
| boundary: empty window | [[], 0, 5000] | [[], 0, 5000] | Passed |
| boundary: departure beyond tariff horizon | [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0] | [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0] | Passed |
| regression: equal-price tie-break | [[[8, 925], [10, 575]], 13150, 0] | [[[5, 575], [8, 925]], 13150, 0] | Failed |
| regression: equal-price tie-break (partial repair) | [[[1, 1250], [3, 2750]], 32000, 0] | [[[1, 2750], [3, 1250]], 32000, 0] | Failed |
| control 1 | [[], 0, 20000] | [[], 0, 20000] | Passed |
| control 2 | [[[0, 925], [3, 925], [4, 925], [6, 525], [7, 925], [8, 925], [12, 925], [13, 925]], 63650, 0] | [[[0, 925], [2, 925], [3, 925], [4, 925], [6, 525], [7, 925], [8, 925], [13, 925]], 63650, 0] | Failed |
SHA-256 / 0359e1894251b48847761843b72f36f18abdcca16e89c969748fdfed2c86566b
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(prices, arrive, depart, need_wh, max_w):
if need_wh <= 0 or max_w <= 0:
return [[], 0, max(need_wh, 0)]
slot_wh = max_w // 4
lo = max(arrive, 0)
hi = min(depart, len(prices))
window = list(range(lo, hi))
ranked = sorted(window, key=lambda s: -prices[s])[::-1]
plan = []
left = need_wh
for s in ranked:
if left <= 0:
break
take = min(slot_wh, left)
plan.append([s, take])
left -= take
plan.sort()
cost = sum(wh * prices[s] for s, wh in plan)
return [plan, cost, left]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
['regression: equal-price tie-break',
[[12, 10, 8, 25, 30, 10, 20, 10, 8, 10, 10, 25, 25], 3, 16, 1500, 3700],
[[[5, 575], [8, 925]], 13150, 0]],
['regression: equal-price tie-break (partial repair)', [[30, 8, 15, 8, 20], -3, 4, 4000, 11000],
[[[1, 2750], [3, 1250]], 32000, 0]],
['control 1', [[25, 30, 20, 12, 12], 2, 2, 20000, 11000], [[], 0, 20000]],
['control 2', [[8, 15, 12, 10, 8, 25, 12, 8, 8, 20, 20, 25, 12, 8], -3, 15, 7000, 3700],
[[[0, 925], [2, 925], [3, 925], [4, 925], [6, 525], [7, 925], [8, 925], [13, 925]], 63650, 0]]],
[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
['regression: equal-price tie-break', [[30, 10, 8, 15, 12, 12, 30, 25, 12], -1, 8, 4000, 7400],
[[[1, 1850], [2, 1850], [4, 300]], 36900, 0]],
['regression: equal-price tie-break (partial repair)',
[[30, 10, 12, 15, 12, 12, 15, 15, 25, 30], -2, 13, 7000, 11000],
[[[1, 2750], [2, 2750], [4, 1500]], 78500, 0]],
['control 1', [[30, 12, 20, 30, 25, 30, 12, 30, 20, 10, 20, 8, 15], 7, 12, 4000, 11000],
[[[9, 1250], [11, 2750]], 34500, 0]],
['control 2', [[12, 12, 25, 30, 8, 20, 12, 12], 3, 11, 9000, 3700],
[[[3, 925], [4, 925], [5, 925], [6, 925], [7, 925]], 75850, 4375]]],
[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
['regression: equal-price tie-break',
[[12, 15, 10, 25, 30, 25, 10, 12, 10, 30, 15, 10, 10, 10], 8, 17, 4000, 7400],
[[[8, 1850], [11, 1850], [12, 300]], 40000, 0]],
['regression: equal-price tie-break (partial repair)',
[[20, 10, 30, 8, 20, 20, 30], 2, 10, 7000, 11000],
[[[3, 2750], [4, 2750], [5, 1500]], 107000, 0]],
['control 1', [[12, 10, 15, 25, 30], 4, 4, 12500, 7400], [[], 0, 12500]],
['control 2', [[30, 12, 15, 12, 30, 15, 12, 20, 20], -2, 1, 9000, 0], [[], 0, 9000]]],
[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
['regression: equal-price tie-break', [[10, 12, 10, 8, 10, 12, 12], 2, 5, 4000, 11000],
[[[2, 1250], [3, 2750]], 34500, 0]],
['regression: equal-price tie-break (partial repair)',
[[30, 10, 8, 12, 30, 12, 8, 8, 15, 8, 12, 8, 30], 8, 14, 1500, 11000], [[[9, 1500]], 12000, 0]],
['control 1', [[12, 20, 8, 15, 10, 8, 25, 12, 30, 12], 2, 12, 20000, 11000],
[[[2, 2750], [3, 2750], [4, 2750], [5, 2750], [6, 2750], [7, 2750], [8, 750], [9, 2750]], 270000,
0]],
['control 2', [[30, 30, 20, 12, 12, 15, 12, 10], -1, 8, 7000, 7400],
[[[3, 1850], [4, 1850], [6, 1450], [7, 1850]], 80300, 0]]],
[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
['regression: equal-price tie-break',
[[12, 20, 12, 12, 12, 12, 20, 15, 10, 12], 0, 11, 4000, 7400],
[[[0, 1850], [2, 300], [8, 1850]], 44300, 0]],
['regression: equal-price tie-break (partial repair)',
[[12, 15, 15, 8, 12, 15, 10, 25, 25, 20, 20], 0, 14, 9000, 3700],
[[[0, 925], [1, 925], [2, 925], [3, 925], [4, 925], [5, 925], [6, 925], [7, 675], [9, 925],
[10, 925]],
134350, 0]],
['control 1', [[12, 12, 8, 15, 10, 12, 20, 15, 12, 10, 12, 12, 15, 15], 12, 13, 1500, 3700],
[[[12, 925]], 13875, 575]],
['control 2', [[10, 12, 10, 8, 10, 12, 12], 2, 5, 4000, 11000],
[[[2, 1250], [3, 2750]], 34500, 0]]]]
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 |
|---|---|---|---|
| boundary: nothing needed | [[], 0, 0] | [[], 0, 0] | Passed |
| boundary: empty window | [[], 0, 5000] | [[], 0, 5000] | Passed |
| boundary: departure beyond tariff horizon | [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0] | [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0] | Passed |
| regression: equal-price tie-break | [[[8, 925], [10, 575]], 13150, 0] | [[[5, 575], [8, 925]], 13150, 0] | Failed |
| regression: equal-price tie-break (partial repair) | [[[1, 1250], [3, 2750]], 32000, 0] | [[[1, 2750], [3, 1250]], 32000, 0] | Failed |
| control 1 | [[], 0, 20000] | [[], 0, 20000] | Passed |
| control 2 | [[[0, 925], [3, 925], [4, 925], [6, 525], [7, 925], [8, 925], [12, 925], [13, 925]], 63650, 0] | [[[0, 925], [2, 925], [3, 925], [4, 925], [6, 525], [7, 925], [8, 925], [13, 925]], 63650, 0] | Failed |
SHA-256 / f82f410ca0fa137cbe4e6924cf0e521362befdcfd6f81d22ce88507783ea339d
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(prices, arrive, depart, need_wh, max_w):
if need_wh <= 0 or max_w <= 0:
return [[], 0, max(need_wh, 0)]
slot_wh = max_w // 4
lo = max(arrive, 0)
hi = min(depart, len(prices))
window = list(range(lo, hi))
ranked = sorted(window, key=lambda s: (prices[s], s))
plan = []
left = need_wh
for s in ranked:
if left <= 0:
break
take = min(slot_wh, left)
plan.append([s, take])
left -= take
plan.sort()
cost = sum(wh * prices[s] for s, wh in plan)
return [plan, cost, left]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
['regression: equal-price tie-break',
[[12, 10, 8, 25, 30, 10, 20, 10, 8, 10, 10, 25, 25], 3, 16, 1500, 3700],
[[[5, 575], [8, 925]], 13150, 0]],
['regression: equal-price tie-break (partial repair)', [[30, 8, 15, 8, 20], -3, 4, 4000, 11000],
[[[1, 2750], [3, 1250]], 32000, 0]],
['control 1', [[25, 30, 20, 12, 12], 2, 2, 20000, 11000], [[], 0, 20000]],
['control 2', [[8, 15, 12, 10, 8, 25, 12, 8, 8, 20, 20, 25, 12, 8], -3, 15, 7000, 3700],
[[[0, 925], [2, 925], [3, 925], [4, 925], [6, 525], [7, 925], [8, 925], [13, 925]], 63650, 0]]],
[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
['regression: equal-price tie-break', [[30, 10, 8, 15, 12, 12, 30, 25, 12], -1, 8, 4000, 7400],
[[[1, 1850], [2, 1850], [4, 300]], 36900, 0]],
['regression: equal-price tie-break (partial repair)',
[[30, 10, 12, 15, 12, 12, 15, 15, 25, 30], -2, 13, 7000, 11000],
[[[1, 2750], [2, 2750], [4, 1500]], 78500, 0]],
['control 1', [[30, 12, 20, 30, 25, 30, 12, 30, 20, 10, 20, 8, 15], 7, 12, 4000, 11000],
[[[9, 1250], [11, 2750]], 34500, 0]],
['control 2', [[12, 12, 25, 30, 8, 20, 12, 12], 3, 11, 9000, 3700],
[[[3, 925], [4, 925], [5, 925], [6, 925], [7, 925]], 75850, 4375]]],
[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
['regression: equal-price tie-break',
[[12, 15, 10, 25, 30, 25, 10, 12, 10, 30, 15, 10, 10, 10], 8, 17, 4000, 7400],
[[[8, 1850], [11, 1850], [12, 300]], 40000, 0]],
['regression: equal-price tie-break (partial repair)',
[[20, 10, 30, 8, 20, 20, 30], 2, 10, 7000, 11000],
[[[3, 2750], [4, 2750], [5, 1500]], 107000, 0]],
['control 1', [[12, 10, 15, 25, 30], 4, 4, 12500, 7400], [[], 0, 12500]],
['control 2', [[30, 12, 15, 12, 30, 15, 12, 20, 20], -2, 1, 9000, 0], [[], 0, 9000]]],
[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
['regression: equal-price tie-break', [[10, 12, 10, 8, 10, 12, 12], 2, 5, 4000, 11000],
[[[2, 1250], [3, 2750]], 34500, 0]],
['regression: equal-price tie-break (partial repair)',
[[30, 10, 8, 12, 30, 12, 8, 8, 15, 8, 12, 8, 30], 8, 14, 1500, 11000], [[[9, 1500]], 12000, 0]],
['control 1', [[12, 20, 8, 15, 10, 8, 25, 12, 30, 12], 2, 12, 20000, 11000],
[[[2, 2750], [3, 2750], [4, 2750], [5, 2750], [6, 2750], [7, 2750], [8, 750], [9, 2750]], 270000,
0]],
['control 2', [[30, 30, 20, 12, 12, 15, 12, 10], -1, 8, 7000, 7400],
[[[3, 1850], [4, 1850], [6, 1450], [7, 1850]], 80300, 0]]],
[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
['regression: equal-price tie-break',
[[12, 20, 12, 12, 12, 12, 20, 15, 10, 12], 0, 11, 4000, 7400],
[[[0, 1850], [2, 300], [8, 1850]], 44300, 0]],
['regression: equal-price tie-break (partial repair)',
[[12, 15, 15, 8, 12, 15, 10, 25, 25, 20, 20], 0, 14, 9000, 3700],
[[[0, 925], [1, 925], [2, 925], [3, 925], [4, 925], [5, 925], [6, 925], [7, 675], [9, 925],
[10, 925]],
134350, 0]],
['control 1', [[12, 12, 8, 15, 10, 12, 20, 15, 12, 10, 12, 12, 15, 15], 12, 13, 1500, 3700],
[[[12, 925]], 13875, 575]],
['control 2', [[10, 12, 10, 8, 10, 12, 12], 2, 5, 4000, 11000],
[[[2, 1250], [3, 2750]], 34500, 0]]]]
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 |
|---|---|---|---|
| boundary: nothing needed | [[], 0, 0] | [[], 0, 0] | Passed |
| boundary: empty window | [[], 0, 5000] | [[], 0, 5000] | Passed |
| boundary: departure beyond tariff horizon | [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0] | [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0] | Passed |
| regression: equal-price tie-break | [[[5, 575], [8, 925]], 13150, 0] | [[[5, 575], [8, 925]], 13150, 0] | Passed |
| regression: equal-price tie-break (partial repair) | [[[1, 2750], [3, 1250]], 32000, 0] | [[[1, 2750], [3, 1250]], 32000, 0] | Passed |
| control 1 | [[], 0, 20000] | [[], 0, 20000] | Passed |
| control 2 | [[[0, 925], [2, 925], [3, 925], [4, 925], [6, 525], [7, 925], [8, 925], [13, 925]], 63650, 0] | [[[0, 925], [2, 925], [3, 925], [4, 925], [6, 525], [7, 925], [8, 925], [13, 925]], 63650, 0] | Passed |
SHA-256 / df6da9d3b445837ad5d49968419589c982d7884a3adcdfbbe9e499c5ff307609
Verification & scope
Deterministic stipulated toy contract for teaching; no claim of conformance with any standard, vendor protocol or production controller. 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:51:49.747584+00:00.
Case digest / a160b11c476cf8056c91511940652e53769ca6af36350b96047b7103c984693a