You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 8ec381c
Browse filesBrowse the repository at this point in the historyBrowse files
Analysis C from the AIRBRAKE exit: Q_TRANS_DECEL searched, ArduPilot Z loop, overshoot and sink flags (C spec 5-10)
restricted.py: run_c / evaluate_c / capability_ceiling / optimise_c on C_BOUNDS (T_bt, theta_A,
spin_min, q). q places the stopping point and is the cascade limit; an overshoot past os_tol_m
and an end sink beyond sink_tol_ms are failures. The old scopes stay, marked legacy.
stages.py: exit_params shared by D and C; task_c writes C_params, C_search, C_runs, C_q_curve,
C_sens. settings.py: CCfg (a_plan_source removed and rejected with a message). assemble.py: the
C section. configs, READMEs and the frozen placeholder study.yaml follow.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018QKS75nmeebgQ4roJCLSfM
Copy file name to clipboardExpand all lines: configs/README.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -235,7 +235,8 @@ recommendation. Add scenarios by adding lines; refer to them by name in `study.y
235
235
| `D` (more) | Entry is the AIRBRAKE exit at `max(AIRSPEED_MIN - 2, q_assist_speed_ms)` (`entry_convention` `tas`/`eas`). `ff_mode` (`lift_aware` is an oracle at tau 0 and scale 1), `theta_fw0_deg` (placeholder), `pit_lim_mode`, `enforce_alpha` (report-only checks always run), `alpha_gate_ms`, `sink_tol_ms`, `rotor_lag_s`, `v0_eas_ms` (diagnostic grid), `sens` (sensitivity sweeps), `recommendation` (`ensemble_n` a power of two, `percentile`, `corners`, `n_boot`, `design_ground_speed_ms` inside the curve or null), `curve.ground_speeds_ms` (the `D_a_rec_curve` speeds, each above the 1 m/s end speed), `trade`. `E.a_plan_fallback_ms2` is used when D gives no recommendation |
236
236
| `Q2`, `E` (more) | `Q2` also takes `soc`, `conventions` (`tas`, `eas`: how `AIRSPEED_MIN` is read) and `feed_convention` (the one E reads), `isa_offset_k`, `n_speed`, `write_profile`. `E.a_fwd_mode` is `case` (Q2 at E's own site), `worst` (the Q2 grid) or `mission` (`a_fwd` in `mission.yaml`); `E.a_fwd_metric` is `min` or `equiv` |
237
237
| `E` (sites) | `E.sites_amsl_m` (airfield elevations; the cruise altitude is the site plus `mission.profile.climb_height_m`) and `E.missions` (`round_trip`, `one_way`). The range is an output; `ranges_km` and the requirements are report points. `mission.yaml` no longer holds `cruise_amsl_m`, `ground_amsl_m`, `v_climb` or `v_glide` (omit the last two to use the cruise speed) and gains `climb_height_m`, `v_cruise_ref_amsl_m`, `payload_kg`, `t_drop_s` and `battery_window.soc_start` |
238
-
| `C`, `B2` | ensemble size and seed, search seeds, population, iterations (`C` also `a_plan_source`) |
238
+
| `C` | analysis C from the AIRBRAKE exit (entry from the `D` block). Ensemble size and seed, search `seeds`, `popsize`, `maxiter`; `rotor_lag_s` (0.25, D's lumped lag); `rotor_start` (`idle` is O-13, unverified, or `carry`); `os_tol_m` and `sink_tol_ms` (the overshoot and end-sink tolerances that make a run fail; PROPOSED, and the overshoot tolerance decides the answer); `weights` (the normalisers `h_ref`, `E_ref`, `x_ref`); `bounds` for `T_bt`, `theta_A_deg`, `spin_min` and `q` (`Q_TRANS_DECEL`, a searched variable); `z` (ArduPilot's vertical-loop gains); `q_curve` and `sens` (the grids of `C_q_curve` and `C_sens`). `a_plan_source` was removed and is rejected |
is CMA-ES from the register values with `q = 2`. `result.at_bound` names every variable within 10 %
634
+
of its range of a bound (`theta_A` and `q` are the ones to watch). Evaluations are serial (CasADi
635
+
functions are not picklable across processes) and cached per vector; one ensemble evaluation of 32 runs
636
+
takes 5 to 14 s, so the shipped search (8 seeds, `popsize` 8, `maxiter` 20) is a few hours on one core.
637
+
Record `result.search.spread` as `search_spreads={"C": …}` so the release gate can check it.
638
+
639
+
**Tables.**
640
+
641
+
| Table | Content |
642
+
| --- | --- |
643
+
|`C_params`| the optimum and the register values at `q = 2`: the four variables, `J`, `J_start`, seed spread, `at_bound`, p95 excursion, mean energy (kJ), p95 distance, max overshoot, flag counts |
644
+
|`C_search`| per seed: best cost, evaluations |
645
+
|`C_runs`| per ensemble member at the optimum: inputs, `x_tgt`, `x_end`, overshoot, energy, excursion, end sink rate, flags, `a_cap_ms2`, `q_over_a_cap`, and D's `braking_flags` (alpha above the 0.8 C_L,max band, VRS ratio; reporting only, not in `J`) |
646
+
|`C_q_curve`| the optimum's `T_bt`, `theta_A`, `spin_min` with `q` varied (`C.q_curve`): the energy-against-distance curve, from which any overshoot tolerance can be read |
647
+
|`C_sens`| one at a time at the optimum: `rotor_lag_s`, `rotor_start`, `z_vel_p`, `z_acc_p`, `theta_fw0_deg`|
648
+
649
+
**What is no longer optimised:**`AIRSPEED_MIN`, `Q_TRANSITION_MS` and `TKOFF_THR_MAX` (Q2 and E
650
+
cover part of the forward side; nothing optimises `AIRSPEED_MIN` now, and if it comes back it is a
651
+
fifth variable of this search, with the entry speed following it). Also not in the vector:
652
+
`PTCH_LIM_MAX_DEG` (fixed at 35°), `Q_TRANS_FAIL` (off), `BATT_WATT_MAX` (not modelled).
0 commit comments