Skip to content

Post-AAMAS follow-ups F1, F2, F4 (9 Oct 2026)

These are three follow-ups to the submitted AAMAS paper, chosen by the user after submission. The rules were predeclared in goal.md (commit d75a1bd) before any run was launched.

Design

All three compare against the published OmSh: monotone floor, patience 512, tag successor_campaign_p512_v1, with the corrected imagined-rollout rewards.

  • Shared settings: the same world and opponent models (restored from the AAMAS archive into /vol/bitbucket/oja24/omsh_followups, now archived with every run in /vol/bitbucket/oja24/_archive/omsh_extra/followups_2026_10/exports/), the same trainer and evaluation seeds, and every published launch argument. That includes log_opponent_level_gap=True and, for Congestion, both roles shielded.
  • F1, opponent-level ablation: shield_retained_levels=1 keeps only IOP level 0, the behaviour-cloned opponent model, for both the certificate and the runtime posterior.
  • It tests the claim that recursive opponent modelling reduces conservatism at equal safety.
  • Rule: supported if M = 3 passes the gate and M = 1 fails it or the paired-by-seed ΔR = R(M=3) − R(M=1) has a 95% t interval above 0. Contradicted if M = 1 passes and the interval lies below 0. Inconclusive otherwise.
  • F2, Pursuit at 10 seeds: OmSh and CPO on trainer seeds 2205–2209 (evaluation streams 2,205,000 + 1000r), pooled with the published seeds 2200–2204. It re-reads the paper's Pursuit statements.
  • F4, oracle-kernel shield: shield_kernel=exact builds the certificate on the simulator's exact graph (true_shield/) with the learned M = 3 levels. It is descriptive: together with IPPO-TrueShielded (exact kernel and live opponents) it splits world-model error from opponent-model error.

Implementation

Branch followups: - src/opponent_model/checkpoints.py: load_iop_stack(..., retained_levels=k) keeps the first k levels and renormalises the stored mixture. - notebooks/utils/shielding.py: - load_or_build_transition_shield_bundle(..., retained_levels=, kernel=) gives each variant its own cache (transition_shield_bundle[_levels1|_exact_kernel].pkl) and report. - The default cache metadata is unchanged, so published caches stay valid. - The load result carries retained_levels, so each factory's runtime IOP matches its certificate. - shield_experiment_spec names the variants ippo_shielded_levels1 / OmSh-Monotone-Levels1 and ippo_shielded_exact_kernel / OmSh-Monotone-ExactKernel. - The six experiment notebooks accept shield_retained_levels and shield_kernel. - Launcher: notebooks/experiments/scripts/cpucluster_followups.sh (amd48, jobs 38218–38231). - Analysis: scripts/summarize_followups.py wrote /vol/bitbucket/oja24/omsh_followups/reports/followups_summary.{md,json}. - Archived on 18 Oct 2026 in _archive/omsh_extra/followups_2026_10/: the live report is under exports/reports/, and the copy regenerated from the archive is under tables/ (byte-identical). - The live root and the clone ~/Projects/omsh_followups were then deleted at the user's request.

Results

Environment F1 ΔR = R(M=3) − R(M=1) [95% CI] F1 gates (M=3 / M=1) F1 verdict F4 ΔR = R(exact) − R(learned) [95% CI]
Bertrand 0 (identical seed for seed) pass / pass inconclusive 0 (identical)
Chicken 0 (identical seed for seed) pass / pass inconclusive 0 (identical)
Congestion 0.0005 [−0.0010, 0.0019] pass / pass inconclusive 0 (identical)
Pursuit-Evasion 3.81 [−0.78, 8.40] pass / FAIL (worst U 0.662) supported +0.065 [−0.070, 0.200]
Gathering −0.0052 [−0.0118, 0.0013] pass / pass (U 0.012 / 0.027) inconclusive −0.0006 [−0.0034, 0.0022]
Markov Stag Hunt −0.011 [−0.041, 0.019] pass / pass inconclusive 0 (identical)
  • F1 Pursuit. With level 0 alone, 3 of 5 seeds become unsafe (U_200 0.36–0.66, R −5.4 to −7.6). The other two earn 0.35–0.38, above M = 3's 0.251.
  • So the behaviour-cloned model alone under-predicts the intruder.
  • Retaining best-responding levels is what keeps the shield safe in the one environment where level structure matters.
  • F1 elsewhere. The matrix games and Congestion are identical or within 0.0005. Their opponents sit near level 0, or the extra levels never bind.
  • Gathering's 3-seed lean towards "contradicted" disappeared at 5 seeds. Level 0 alone runs at higher risk (0.027 against 0.012).
  • F4. The learned kernel matches the exact one where the dynamics are deterministic. Bertrand, Chicken, Congestion and Markov Stag Hunt reproduce the published OmSh seed for seed.
  • In Pursuit the exact kernel lifts every seed to 0.26–0.35, against the published 0.251 ± 0.123 with two seeds at 0.116. The interval includes 0, but the published low seeds look like world-model error.
  • Pursuit read with TrueSh: learned kernel 0.251 → exact kernel 0.315 → exact kernel with live opponents −1.666. OmSh's advantage over the oracle comes from the imagined best-responding levels, not the kernel.
  • Gathering: 0.0334 → 0.0328 → TrueSh 0.047. The opponent model, not the world model, is what costs reward there.
  • F2. Pursuit OmSh at 10 seeds gives 0.278 ± 0.101 with U_200 = 0 on every seed (largest Wilson upper limit 0.004). CPO at 10 seeds gives −3.21 ± 1.03 with worst U 0.988 and still fails.
  • IPPO and IPPO-Lagrangian already fail on 5 seeds, and added seeds cannot lower a worst-seed U.
  • So OmSh remains the only gate-passing non-oracle method, and its reward stays above TrueSh's −1.666.