decide op• Data kinds: any → table
• Call: import fullseye as fs; fs.ledger.dilemma_zone(v, *, reaction: 'float', decel: 'float', amber: 'float', intersection_width: 'float', car_length: 'float', accel: 'float' = 0.0) -> 'Dict[str, object]' (to call the implementation directly, import drivedecide; drivedecide.dilemma_zone(v, *, reaction: 'float', decel: 'float', amber: 'float', intersection_width: 'float', car_length: 'float', accel: 'float' = 0.0) -> 'Dict[str, object]'; from the registry, opsdrive.get("dilemma_zone"))
Dilemma zone of the amber (yellow) signal (Gazis, Herman, Maradudin 1960).
The amber light comes on while you are at distance x before the stop line at speed v:
can stop ⇔ x ≥ x_c = v δ + v²/(2a) (δ = reaction, a = decel)
can clear ⇔ x ≤ x_0 = v τ + ½ a₁ (τ − δ)² − (w + L) (τ = amber, a₁ = accel ≥ 0, w = intersection width, L = car length)
(a₁ = 0 is the basic form. Acceleration is taken to run from after the reaction to the end of the amber. If τ ≤ δ, the acceleration term is 0.) max(x_0, 0) < x < x_c is the dilemma zone (cannot stop and cannot clear. x < 0 is excluded because the stop line has already been passed), x_c ≤ x ≤ x_0 is the option zone (both are possible).
Reading of Japanese law: the Rules of the Road (Kyosoku) Appendix Table 1 (amber) says "if close to the stopping position and unable to stop safely, you may proceed" = it is enough to pass the stop line (there is no obligation to clear the intersection while the light is amber). Under that reading, call with intersection_width = car_length = 0 (x_0 = vτ). GHM's "clear the intersection" is a strict reading that assumes there is no all-red time.
Return values: x_stop_min = x_c, x_clear_max = x_0, dilemma ((lo, hi) or None), option (likewise), length (length of the dilemma zone, 0 if none), v_critical (the pair of speeds at which x_c = x_0 when a₁ = 0. If there is no real root it is empty = no dilemma at any speed). v is a single number (for arrays use np.vectorize or similar).
• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).
• Operator provenance and references — the sources of the research/methods this op family came from.
• The canonical algorithm (author, year) and its uses are named in the family usage guide above.
• poc_driving_decisions — py -3.11 examples/poc_driving_decisions.py
table as input)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
decide)mirror_reflection_matrix · mirror_virtual_camera · mirror_aim_normal · convex_mirror_fov · mirror_blind_zone · check_sequence_score · signal_phase_plan · signal_state
*Provenance: drivedecide.py — DRIVE operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.