FA-67436 / Elevator dispatch scheduling / Open access
Trip flight time from a trapezoidal profile: profile regime threshold · case 01
Medium trips are timed as if the car reached contract speed.
ROOT CAUSE
The regime test uses the distance for a single acceleration phase.
VERIFIED REPAIR
Contract speed is reached only when the distance covers both acceleration and deceleration (v^2/a).
Unsuccessful approach: Doubling the threshold times some full-speed trips with the triangular formula.
Case contract
heights_mm[i] is the rise from floor i to floor i+1. The trip distance is the sum between the two floors (either direction). With speed vmax (mm/s) and acceleration acc (mm/s^2): if distance*acc >= vmax^2 the car reaches vmax and t = d/vmax + vmax/acc, otherwise t = 2*sqrt(d/acc). Return milliseconds rounded up; zero distance is 0.
Why this case matters
Lift group controllers make these decisions many times per minute; a wrong answer strands passengers, wastes trips or overrides a safety rule.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
lo, hi = sorted((x['from'], x['to']))
d = sum(x['heights_mm'][lo:hi])
if d == 0:
return 0
v = x['vmax']
a = x['acc']
if 2 * d * a >= v * v:
t = d / v + v / a
else:
t = 2 * math.sqrt(d / a)
return math.ceil(t * 1000 - 1e-9)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('boundary: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 38', {'heights_mm': [4200, 3500, 4200, 4200, 5000, 3000, 3500, 4200, 3500, 3000, 3500], 'from': 6, 'to': 3, 'vmax': 4000, 'acc': 1200}, 6378), ('control 3', {'heights_mm': [4200, 3000, 4200, 3000, 3000, 5000, 4200, 4200, 4200, 4200, 3000], 'from': 4, 'to': 6, 'vmax': 2500, 'acc': 1000}, 5700), ('boundary: one floor up', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 0, 'to': 1, 'vmax': 2500, 'acc': 1000}, 3465), ('control 1', {'heights_mm': [5000, 4200, 3500, 4200, 4200, 5000, 3000, 3500, 5000, 4200, 3500], 'from': 7, 'to': 0, 'vmax': 1600, 'acc': 1200}, 19521), ('control 4', {'heights_mm': [3500, 3500, 5000, 3500], 'from': 1, 'to': 1, 'vmax': 4000, 'acc': 600}, 0), ('control 7', {'heights_mm': [3500, 3500, 4200, 5000, 3500], 'from': 4, 'to': 1, 'vmax': 2500, 'acc': 1200}, 7164)], [('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('boundary: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 38', {'heights_mm': [4200, 3500, 4200, 4200, 5000, 3000, 3500, 4200, 3500, 3000, 3500], 'from': 6, 'to': 3, 'vmax': 4000, 'acc': 1200}, 6378), ('control 27', {'heights_mm': [4200, 4200, 5000, 3500, 4200, 5000, 4200, 5000, 3000], 'from': 2, 'to': 8, 'vmax': 4000, 'acc': 800}, 11725), ('boundary: long run at contract speed', {'heights_mm': [4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000], 'from': 0, 'to': 9, 'vmax': 2500, 'acc': 1000}, 16900), ('control 12', {'heights_mm': [3000, 5000, 3000, 5000, 4200, 5000, 3000, 4200, 4200, 3500], 'from': 5, 'to': 1, 'vmax': 1000, 'acc': 600}, 18867), ('control 15', {'heights_mm': [3000, 3500, 3000, 3000, 5000, 3000, 3500, 3000, 3000, 3500], 'from': 4, 'to': 7, 'vmax': 1000, 'acc': 600}, 13167), ('control 18', {'heights_mm': [4200, 3000, 3500, 5000, 3500], 'from': 3, 'to': 4, 'vmax': 1000, 'acc': 800}, 6250)], [('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('boundary: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 38', {'heights_mm': [4200, 3500, 4200, 4200, 5000, 3000, 3500, 4200, 3500, 3000, 3500], 'from': 6, 'to': 3, 'vmax': 4000, 'acc': 1200}, 6378), ('control 56', {'heights_mm': [3000, 5000, 5000, 5000, 4200, 4200, 3000, 5000, 4200, 3000], 'from': 7, 'to': 0, 'vmax': 4000, 'acc': 600}, 14017), ('boundary: same floor', {'heights_mm': [3000, 3000, 3000], 'from': 2, 'to': 2, 'vmax': 2500, 'acc': 1000}, 0), ('control 23', {'heights_mm': [5000, 3000, 3000, 4200, 4200, 3500, 3000], 'from': 1, 'to': 0, 'vmax': 1600, 'acc': 1000}, 4725), ('control 26', {'heights_mm': [4200, 5000, 4200, 4200, 3000, 3500, 3500, 3500], 'from': 7, 'to': 0, 'vmax': 4000, 'acc': 1000}, 10900), ('control 29', {'heights_mm': [3000, 3000, 3500, 3500, 3000, 4200, 3500, 3000, 3000, 4200, 3500, 5000], 'from': 0, 'to': 4, 'vmax': 1000, 'acc': 1000}, 14000)], [('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('boundary: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 38', {'heights_mm': [4200, 3500, 4200, 4200, 5000, 3000, 3500, 4200, 3500, 3000, 3500], 'from': 6, 'to': 3, 'vmax': 4000, 'acc': 1200}, 6378), ('control 8', {'heights_mm': [3000, 4200, 3500, 4200, 3000, 3000, 4200], 'from': 0, 'to': 4, 'vmax': 4000, 'acc': 1200}, 7059), ('boundary: fractional milliseconds', {'heights_mm': [3500, 3500, 3500, 3500], 'from': 0, 'to': 3, 'vmax': 1600, 'acc': 600}, 9230), ('control 34', {'heights_mm': [3000, 5000, 3500, 4200, 3500, 3000, 3500], 'from': 3, 'to': 5, 'vmax': 4000, 'acc': 800}, 6205), ('control 37', {'heights_mm': [3000, 3000, 5000, 3000, 5000], 'from': 2, 'to': 4, 'vmax': 1000, 'acc': 1200}, 8834), ('control 40', {'heights_mm': [3000, 3500, 3500, 5000], 'from': 0, 'to': 2, 'vmax': 1600, 'acc': 1000}, 5663)], [('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('boundary: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 38', {'heights_mm': [4200, 3500, 4200, 4200, 5000, 3000, 3500, 4200, 3500, 3000, 3500], 'from': 6, 'to': 3, 'vmax': 4000, 'acc': 1200}, 6378), ('control 32', {'heights_mm': [3500, 4200, 4200, 3500, 5000, 3500, 5000, 3500, 3000, 3000, 3500], 'from': 10, 'to': 2, 'vmax': 4000, 'acc': 1000}, 11675), ('boundary: long run at contract speed', {'heights_mm': [4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000], 'from': 0, 'to': 9, 'vmax': 2500, 'acc': 1000}, 16900), ('control 45', {'heights_mm': [5000, 3500, 3000, 3500, 4200, 3000, 3500, 3500, 3500, 4200], 'from': 3, 'to': 8, 'vmax': 1000, 'acc': 1200}, 18534), ('control 48', {'heights_mm': [5000, 3000, 3500, 3000, 3000, 3500, 3500, 3000, 5000, 3500], 'from': 9, 'to': 8, 'vmax': 4000, 'acc': 1000}, 4473), ('control 51', {'heights_mm': [4200, 4200, 3000, 5000, 5000, 5000, 3500], 'from': 6, 'to': 5, 'vmax': 4000, 'acc': 800}, 5000)]]
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 |
|---|---|---|---|
| regression: between the two regimes | 5925 | 5917 | Failed |
| boundary: downward trip | 5580 | 5580 | Passed |
| sampled regression 38 | 6384 | 6378 | Failed |
| control 3 | 5700 | 5700 | Passed |
| boundary: one floor up | 3465 | 3465 | Passed |
| control 1 | 19521 | 19521 | Passed |
| control 4 | 0 | 0 | Passed |
| control 7 | 7164 | 7164 | Passed |
SHA-256 / f831d7adf29508c55ffe2f9f2548b7364281b71ddf60e38293faf57c98d9ffe2
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
lo, hi = sorted((x['from'], x['to']))
d = sum(x['heights_mm'][lo:hi])
if d == 0:
return 0
v = x['vmax']
a = x['acc']
if d * a >= 2 * v * v:
t = d / v + v / a
else:
t = 2 * math.sqrt(d / a)
return math.ceil(t * 1000 - 1e-9)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('boundary: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 38', {'heights_mm': [4200, 3500, 4200, 4200, 5000, 3000, 3500, 4200, 3500, 3000, 3500], 'from': 6, 'to': 3, 'vmax': 4000, 'acc': 1200}, 6378), ('control 3', {'heights_mm': [4200, 3000, 4200, 3000, 3000, 5000, 4200, 4200, 4200, 4200, 3000], 'from': 4, 'to': 6, 'vmax': 2500, 'acc': 1000}, 5700), ('boundary: one floor up', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 0, 'to': 1, 'vmax': 2500, 'acc': 1000}, 3465), ('control 1', {'heights_mm': [5000, 4200, 3500, 4200, 4200, 5000, 3000, 3500, 5000, 4200, 3500], 'from': 7, 'to': 0, 'vmax': 1600, 'acc': 1200}, 19521), ('control 4', {'heights_mm': [3500, 3500, 5000, 3500], 'from': 1, 'to': 1, 'vmax': 4000, 'acc': 600}, 0), ('control 7', {'heights_mm': [3500, 3500, 4200, 5000, 3500], 'from': 4, 'to': 1, 'vmax': 2500, 'acc': 1200}, 7164)], [('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('boundary: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 38', {'heights_mm': [4200, 3500, 4200, 4200, 5000, 3000, 3500, 4200, 3500, 3000, 3500], 'from': 6, 'to': 3, 'vmax': 4000, 'acc': 1200}, 6378), ('control 27', {'heights_mm': [4200, 4200, 5000, 3500, 4200, 5000, 4200, 5000, 3000], 'from': 2, 'to': 8, 'vmax': 4000, 'acc': 800}, 11725), ('boundary: long run at contract speed', {'heights_mm': [4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000], 'from': 0, 'to': 9, 'vmax': 2500, 'acc': 1000}, 16900), ('control 12', {'heights_mm': [3000, 5000, 3000, 5000, 4200, 5000, 3000, 4200, 4200, 3500], 'from': 5, 'to': 1, 'vmax': 1000, 'acc': 600}, 18867), ('control 15', {'heights_mm': [3000, 3500, 3000, 3000, 5000, 3000, 3500, 3000, 3000, 3500], 'from': 4, 'to': 7, 'vmax': 1000, 'acc': 600}, 13167), ('control 18', {'heights_mm': [4200, 3000, 3500, 5000, 3500], 'from': 3, 'to': 4, 'vmax': 1000, 'acc': 800}, 6250)], [('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('boundary: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 38', {'heights_mm': [4200, 3500, 4200, 4200, 5000, 3000, 3500, 4200, 3500, 3000, 3500], 'from': 6, 'to': 3, 'vmax': 4000, 'acc': 1200}, 6378), ('control 56', {'heights_mm': [3000, 5000, 5000, 5000, 4200, 4200, 3000, 5000, 4200, 3000], 'from': 7, 'to': 0, 'vmax': 4000, 'acc': 600}, 14017), ('boundary: same floor', {'heights_mm': [3000, 3000, 3000], 'from': 2, 'to': 2, 'vmax': 2500, 'acc': 1000}, 0), ('control 23', {'heights_mm': [5000, 3000, 3000, 4200, 4200, 3500, 3000], 'from': 1, 'to': 0, 'vmax': 1600, 'acc': 1000}, 4725), ('control 26', {'heights_mm': [4200, 5000, 4200, 4200, 3000, 3500, 3500, 3500], 'from': 7, 'to': 0, 'vmax': 4000, 'acc': 1000}, 10900), ('control 29', {'heights_mm': [3000, 3000, 3500, 3500, 3000, 4200, 3500, 3000, 3000, 4200, 3500, 5000], 'from': 0, 'to': 4, 'vmax': 1000, 'acc': 1000}, 14000)], [('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('boundary: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 38', {'heights_mm': [4200, 3500, 4200, 4200, 5000, 3000, 3500, 4200, 3500, 3000, 3500], 'from': 6, 'to': 3, 'vmax': 4000, 'acc': 1200}, 6378), ('control 8', {'heights_mm': [3000, 4200, 3500, 4200, 3000, 3000, 4200], 'from': 0, 'to': 4, 'vmax': 4000, 'acc': 1200}, 7059), ('boundary: fractional milliseconds', {'heights_mm': [3500, 3500, 3500, 3500], 'from': 0, 'to': 3, 'vmax': 1600, 'acc': 600}, 9230), ('control 34', {'heights_mm': [3000, 5000, 3500, 4200, 3500, 3000, 3500], 'from': 3, 'to': 5, 'vmax': 4000, 'acc': 800}, 6205), ('control 37', {'heights_mm': [3000, 3000, 5000, 3000, 5000], 'from': 2, 'to': 4, 'vmax': 1000, 'acc': 1200}, 8834), ('control 40', {'heights_mm': [3000, 3500, 3500, 5000], 'from': 0, 'to': 2, 'vmax': 1600, 'acc': 1000}, 5663)], [('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('boundary: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 38', {'heights_mm': [4200, 3500, 4200, 4200, 5000, 3000, 3500, 4200, 3500, 3000, 3500], 'from': 6, 'to': 3, 'vmax': 4000, 'acc': 1200}, 6378), ('control 32', {'heights_mm': [3500, 4200, 4200, 3500, 5000, 3500, 5000, 3500, 3000, 3000, 3500], 'from': 10, 'to': 2, 'vmax': 4000, 'acc': 1000}, 11675), ('boundary: long run at contract speed', {'heights_mm': [4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000], 'from': 0, 'to': 9, 'vmax': 2500, 'acc': 1000}, 16900), ('control 45', {'heights_mm': [5000, 3500, 3000, 3500, 4200, 3000, 3500, 3500, 3500, 4200], 'from': 3, 'to': 8, 'vmax': 1000, 'acc': 1200}, 18534), ('control 48', {'heights_mm': [5000, 3000, 3500, 3000, 3000, 3500, 3500, 3000, 5000, 3500], 'from': 9, 'to': 8, 'vmax': 4000, 'acc': 1000}, 4473), ('control 51', {'heights_mm': [4200, 4200, 3000, 5000, 5000, 5000, 3500], 'from': 6, 'to': 5, 'vmax': 4000, 'acc': 800}, 5000)]]
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 |
|---|---|---|---|
| regression: between the two regimes | 5917 | 5917 | Passed |
| boundary: downward trip | 5550 | 5580 | Failed |
| sampled regression 38 | 6378 | 6378 | Passed |
| control 3 | 5657 | 5700 | Failed |
| boundary: one floor up | 3465 | 3465 | Passed |
| control 1 | 19521 | 19521 | Passed |
| control 4 | 0 | 0 | Passed |
| control 7 | 7164 | 7164 | Passed |
SHA-256 / 957a7ed97435345999e057614751cb4ee64d3f43dbb99a420af63d9cfae90c86
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
lo, hi = sorted((x['from'], x['to']))
d = sum(x['heights_mm'][lo:hi])
if d == 0:
return 0
v = x['vmax']
a = x['acc']
if d * a >= v * v:
t = d / v + v / a
else:
t = 2 * math.sqrt(d / a)
return math.ceil(t * 1000 - 1e-9)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('boundary: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 38', {'heights_mm': [4200, 3500, 4200, 4200, 5000, 3000, 3500, 4200, 3500, 3000, 3500], 'from': 6, 'to': 3, 'vmax': 4000, 'acc': 1200}, 6378), ('control 3', {'heights_mm': [4200, 3000, 4200, 3000, 3000, 5000, 4200, 4200, 4200, 4200, 3000], 'from': 4, 'to': 6, 'vmax': 2500, 'acc': 1000}, 5700), ('boundary: one floor up', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 0, 'to': 1, 'vmax': 2500, 'acc': 1000}, 3465), ('control 1', {'heights_mm': [5000, 4200, 3500, 4200, 4200, 5000, 3000, 3500, 5000, 4200, 3500], 'from': 7, 'to': 0, 'vmax': 1600, 'acc': 1200}, 19521), ('control 4', {'heights_mm': [3500, 3500, 5000, 3500], 'from': 1, 'to': 1, 'vmax': 4000, 'acc': 600}, 0), ('control 7', {'heights_mm': [3500, 3500, 4200, 5000, 3500], 'from': 4, 'to': 1, 'vmax': 2500, 'acc': 1200}, 7164)], [('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('boundary: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 38', {'heights_mm': [4200, 3500, 4200, 4200, 5000, 3000, 3500, 4200, 3500, 3000, 3500], 'from': 6, 'to': 3, 'vmax': 4000, 'acc': 1200}, 6378), ('control 27', {'heights_mm': [4200, 4200, 5000, 3500, 4200, 5000, 4200, 5000, 3000], 'from': 2, 'to': 8, 'vmax': 4000, 'acc': 800}, 11725), ('boundary: long run at contract speed', {'heights_mm': [4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000], 'from': 0, 'to': 9, 'vmax': 2500, 'acc': 1000}, 16900), ('control 12', {'heights_mm': [3000, 5000, 3000, 5000, 4200, 5000, 3000, 4200, 4200, 3500], 'from': 5, 'to': 1, 'vmax': 1000, 'acc': 600}, 18867), ('control 15', {'heights_mm': [3000, 3500, 3000, 3000, 5000, 3000, 3500, 3000, 3000, 3500], 'from': 4, 'to': 7, 'vmax': 1000, 'acc': 600}, 13167), ('control 18', {'heights_mm': [4200, 3000, 3500, 5000, 3500], 'from': 3, 'to': 4, 'vmax': 1000, 'acc': 800}, 6250)], [('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('boundary: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 38', {'heights_mm': [4200, 3500, 4200, 4200, 5000, 3000, 3500, 4200, 3500, 3000, 3500], 'from': 6, 'to': 3, 'vmax': 4000, 'acc': 1200}, 6378), ('control 56', {'heights_mm': [3000, 5000, 5000, 5000, 4200, 4200, 3000, 5000, 4200, 3000], 'from': 7, 'to': 0, 'vmax': 4000, 'acc': 600}, 14017), ('boundary: same floor', {'heights_mm': [3000, 3000, 3000], 'from': 2, 'to': 2, 'vmax': 2500, 'acc': 1000}, 0), ('control 23', {'heights_mm': [5000, 3000, 3000, 4200, 4200, 3500, 3000], 'from': 1, 'to': 0, 'vmax': 1600, 'acc': 1000}, 4725), ('control 26', {'heights_mm': [4200, 5000, 4200, 4200, 3000, 3500, 3500, 3500], 'from': 7, 'to': 0, 'vmax': 4000, 'acc': 1000}, 10900), ('control 29', {'heights_mm': [3000, 3000, 3500, 3500, 3000, 4200, 3500, 3000, 3000, 4200, 3500, 5000], 'from': 0, 'to': 4, 'vmax': 1000, 'acc': 1000}, 14000)], [('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('boundary: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 38', {'heights_mm': [4200, 3500, 4200, 4200, 5000, 3000, 3500, 4200, 3500, 3000, 3500], 'from': 6, 'to': 3, 'vmax': 4000, 'acc': 1200}, 6378), ('control 8', {'heights_mm': [3000, 4200, 3500, 4200, 3000, 3000, 4200], 'from': 0, 'to': 4, 'vmax': 4000, 'acc': 1200}, 7059), ('boundary: fractional milliseconds', {'heights_mm': [3500, 3500, 3500, 3500], 'from': 0, 'to': 3, 'vmax': 1600, 'acc': 600}, 9230), ('control 34', {'heights_mm': [3000, 5000, 3500, 4200, 3500, 3000, 3500], 'from': 3, 'to': 5, 'vmax': 4000, 'acc': 800}, 6205), ('control 37', {'heights_mm': [3000, 3000, 5000, 3000, 5000], 'from': 2, 'to': 4, 'vmax': 1000, 'acc': 1200}, 8834), ('control 40', {'heights_mm': [3000, 3500, 3500, 5000], 'from': 0, 'to': 2, 'vmax': 1600, 'acc': 1000}, 5663)], [('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('boundary: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 38', {'heights_mm': [4200, 3500, 4200, 4200, 5000, 3000, 3500, 4200, 3500, 3000, 3500], 'from': 6, 'to': 3, 'vmax': 4000, 'acc': 1200}, 6378), ('control 32', {'heights_mm': [3500, 4200, 4200, 3500, 5000, 3500, 5000, 3500, 3000, 3000, 3500], 'from': 10, 'to': 2, 'vmax': 4000, 'acc': 1000}, 11675), ('boundary: long run at contract speed', {'heights_mm': [4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000], 'from': 0, 'to': 9, 'vmax': 2500, 'acc': 1000}, 16900), ('control 45', {'heights_mm': [5000, 3500, 3000, 3500, 4200, 3000, 3500, 3500, 3500, 4200], 'from': 3, 'to': 8, 'vmax': 1000, 'acc': 1200}, 18534), ('control 48', {'heights_mm': [5000, 3000, 3500, 3000, 3000, 3500, 3500, 3000, 5000, 3500], 'from': 9, 'to': 8, 'vmax': 4000, 'acc': 1000}, 4473), ('control 51', {'heights_mm': [4200, 4200, 3000, 5000, 5000, 5000, 3500], 'from': 6, 'to': 5, 'vmax': 4000, 'acc': 800}, 5000)]]
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 |
|---|---|---|---|
| regression: between the two regimes | 5917 | 5917 | Passed |
| boundary: downward trip | 5580 | 5580 | Passed |
| sampled regression 38 | 6378 | 6378 | Passed |
| control 3 | 5700 | 5700 | Passed |
| boundary: one floor up | 3465 | 3465 | Passed |
| control 1 | 19521 | 19521 | Passed |
| control 4 | 0 | 0 | Passed |
| control 7 | 7164 | 7164 | Passed |
SHA-256 / 0009db2462aaee46258913631862453bf96f7418cf139ccd76c5bc3d34453989
Verification & scope
Stipulated toy lift-control contract for a bounded teaching model; it makes no claim of conformance to any lift code or vendor dispatcher and omits real safety 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:47:52.844341+00:00.
Case digest / 03987cd41aa38bf0e8e8312586ca9401f7da94267a5842ec2bfbe0877ebab167