Reward screen: 2026-08-10¶
Purpose¶
This is the first reward-optimisation pass over every curated environment. It
screens IPPO_CER and PR2_IPPO_CER before changing objectives or tuning
environment-specific hyperparameters.
Configuration¶
The screen runs on the DoC CPU Slurm cluster, partition amd48, through the
CPU-specific ~/py_cpu.sh runner. Every algorithm-environment pair is a
separate job. Each job uses:
num_runs=2
num_env_steps=250000
calculate_conv=False
calculate_alpharank=False
calculate_satisfaction=True
satisfaction_eval_episodes=500
nashconv_auto_resume=False
resume_partial_runs=False
NashConv is deferred until a profile has useful satisfaction probability. Outputs are isolated under:
The exact launcher shape was:
SUBMIT_DELAY_SECONDS=0 JOB_SCRIPT="$HOME/py_cpu.sh" \
bash ~/scripts/pltlf/env.sh <environment> amd48 \
algorithms=ippo_cer,pr2_ippo_cer bundles=2 \
num_runs=2 num_env_steps=250000 \
calculate_conv=False calculate_alpharank=False \
calculate_satisfaction=True satisfaction_eval_episodes=500 \
nashconv_auto_resume=False resume_partial_runs=False \
save_dir=exports/optimisations/reward-screen-20260810/<environment>
Job manifest¶
| Environment | IPPO_CER | PR2_IPPO_CER |
|---|---|---|
classic_2 |
6604 | 6605 |
capture_2 |
6606 | 6607 |
classic_3 |
6608 | 6609 |
capture_3 |
6610 | 6611 |
own_coin_first_2 |
6612 | 6613 |
sustained_stag_2 |
6614 | 6615 |
food_4 |
6616 | 6617 |
food_then_xy_4 |
6618 | 6619 |
safe_harvest_4 |
6620 | 6621 |
role_claim_2 |
6622 | 6623 |
consume_6 |
6624 | 6625 |
refined_then_consume_6 |
6626 | 6631 |
An additional replacement-candidate screen uses the same configuration:
| Candidate | IPPO_CER | PR2_IPPO_CER | Partition |
|---|---|---|---|
Territory Claim_4 |
6628 | 6629 | amd24 |
Matrix Stag Hunt also has the one non-PPO comparison justified by the task's small tabular state space:
| Environment | Algorithm | Job | Partition |
|---|---|---|---|
sustained_stag_2 |
NASHQ_CER |
6632 | amd48 |
A reward-discount variant was started for the hardest 1000-step terminal task:
| Environment | Variant | IPPO_CER | PR2_IPPO_CER | Memory |
|---|---|---|---|---|
refined_then_consume_6 |
ippo.gamma=1.0 |
6633 | 6634 | 8 GB / 16 GB |
This changes only return discounting. Objective-mode training emits a terminal
0/1 satisfaction bit, so the baseline gamma=0.99 weights a reward 1000 steps
away by about 0.99^1000 = 4.3e-5. The variant preserves the same objective,
threshold, budgets, and seeds, and writes to exports/o/rtc-g1/.
The same controlled discount comparison was later extended to the other
objective-reward tasks whose notebook default is gamma=0.99:
| Environment | IPPO_CER | PR2_IPPO_CER | Output |
|---|---|---|---|
food_4 |
6668 | 6669 | exports/o/food-g1/ |
safe_harvest_4 |
6670 | 6671 | exports/o/harv-g1/ |
candidate claim_4 |
6672 | 6678 | exports/o/claim-g1/ |
These jobs change only ippo.gamma to 1.0. This is especially material for
the 1000-step Harvest and Claim horizons, where an undiscounted terminal
satisfaction bit avoids the baseline 0.99^1000 attenuation. Food has a
250-step horizon and provides the shorter-horizon control.
The original Claim PR2 submission 6673 remained resource-pending on amd24
without starting. It was cancelled and replaced by identical job 6678 on
amd48; no seed or artifact was produced by 6673.
Two formula-decomposition reward variants run alongside the objective-reward screen:
| Environment | Training reward | Initial IPPO / PR2 attempts | Output |
|---|---|---|---|
food_then_xy_4 |
own food, then own XY | 6636 / 6637 | exports/o/fxy-h/ |
refined_then_consume_6 |
own refined receipt, then own consumption | 6638 / 6639 | exports/o/rtc-h/ |
These variants set reward_mode=handcrafted only during training. They retain
agent-indexed rewards, do not credit an agent for another agent's completion,
and use the unchanged PLTLF formula under objective mode for every frozen-
policy satisfaction rollout. They are therefore optimisation variants, not
alternative success criteria. Refined PR2 keeps the measured 16 GB allocation;
the other three use 8 GB.
Initial jobs 6636--6639 stopped after 38 seconds, before environment creation,
because the notebooks did not expose the experiment layer's existing
reward_mode setting through their CLI config. The notebook surface was fixed
with an explicit reward_mode="objective" default and coverage across every
training notebook. These failed attempts contain no training result and are
retained in the manifest rather than silently reused.
Replacement jobs after the interface fix:
| Environment | IPPO_CER | PR2_IPPO_CER |
|---|---|---|
food_then_xy_4, handcrafted training reward |
6640 | 6641 |
refined_then_consume_6, handcrafted training reward |
6642 | 6643 |
The six-agent PR2 variants spend multiple CPU-hours in XLA compilation before
their first update and require about 9 GB at compile peak. A purported
shorter-unroll matrix was submitted with ippo.num_steps=256 for dense
handcrafted training rewards:
| Environment | IPPO_CER | PR2_IPPO_CER | Output |
|---|---|---|---|
consume_6 |
6701 | 6702 | exports/o/con-h256/ |
refined_then_consume_6 |
6703 | 6704 | exports/o/rtc-h256/ |
The PR2 jobs request 16 GB based on the measured compilation footprint; IPPO
uses the default allocation. A later source-history audit found that the
notebooks' PPO default was already num_steps=256, so this is not an
optimisation-horizon comparison. Job 6701 duplicates 6665, and jobs 6703/6704
duplicate 6642/6643 except for their output paths; 6702 is the first Consume
PR2 execution but does not represent a distinct unroll setting. Job 6703's
exact duplicate result is not counted as independent evidence. Still-running
PR2 duplicate 6704 was cancelled at 21:22:41; authoritative job 6643
continues. Satisfaction in every case is evaluated on the unchanged 512-step
Consume or 1,000-step Refined-Then-Consume objective-mode environment.
The objective wrapper audit showed that objective mode deliberately pays only the terminal satisfaction bit. To compare this sparse signal with existing agent-local domain rewards, an additional shaped-reward matrix was submitted after the runner fix:
| Environment | IPPO_CER | PR2_IPPO_CER | Output |
|---|---|---|---|
own_coin_first_2 |
6679 | 6680 | exports/o/coin-h/ |
food_4 |
6666 | 6667 | exports/o/food-h/ |
safe_harvest_4 |
6661 | 6662 | exports/o/harv-h/ |
candidate claim_4 |
6663 | 6664 | exports/o/claim-h/ |
consume_6 |
6665 | -- | exports/o/con-h/ |
These jobs use reward_mode=handcrafted for training and the same two seeds,
250,000 steps, and 500 evaluation episodes as the primary screen. Coins uses
its explicit own-coin/avoid-interference reward. Food uses a new objective-
aligned helper that pays each agent once for its own food-metabolism label and
ignores the native XY payoff. The initial Safe Harvest, Claim, and Consume
variants exposed native per-agent rewards whose signs/events were thought to
define their corresponding labels. The later baseline audits below invalidate
the Safe Harvest and Consume interpretation. No
reward is copied across learners. As in the earlier shaped variants, final
satisfaction is evaluated by a separately reconstructed objective-mode
environment with the original PLTLF formulas and threshold. Consume only
starts an IPPO variant because its objective IPPO run was already promising
and six-agent PR2 incurs a measured 9 GB compilation footprint.
Initial shaped submissions 6648--6656 exposed deployment drift in the CPU
runner: the checked-in version had the filename bound but lacked the deployed
copy's JAX_PLATFORMS=cpu safeguard and per-project setup lock. All nine were
cancelled at zero environment steps after the CUDA-plugin traceback appeared.
The safeguards were restored upstream in nightly/setup commit 7b0e47a, the
combined runner was deployed, and replacement jobs 6657--6665 started without
the device-probe error. The cancelled attempts contain no training result.
Food attempts 6659 and 6660 were then cancelled at zero environment steps when
the native-reward audit identified the unrelated +10 XY payoff. Commit
30fd9ae added the one-time, own-food-only shaping reward with unit coverage;
replacement jobs 6666 and 6667 run that exact helper. Other replacement IDs
remain unchanged.
Early training from both Chemistry tasks continued to show zero learner return
under terminal-only or one-shot milestone rewards. The native substrate also
emits agent-owned vesicle-reaction events for the six X/Y cycle stages. Commit
2860674 exposes those stages as per-agent labels and bounds their shaping:
each distinct own-agent stage pays +0.1 once per episode, so all intermediate
credit totals at most 0.6, while the own target milestone still pays +1.
Unowned ground reactions and other agents' events pay nothing. This avoids
coordinates, map state, and seed knowledge while providing semantic subgoal
credit. A controlled two-seed screen keeps every other setting unchanged:
| Environment | IPPO_CER | PR2_IPPO_CER | Output |
|---|---|---|---|
food_4 |
6723 | 6724 | exports/o/food-p/ |
food_then_xy_4 |
6725 | 6726 | exports/o/fxy-p/ |
The jobs still evaluate the original personal PLTLF formulas in a reconstructed objective-mode environment; intermediate shaping atoms are not added to the success condition.
Coin attempts 6657 and 6658 used the historical prosocial helper, whose
repeated partner-harm penalty is outside the selected until formula; their
large negative learner returns made the mismatch visible before either seed
completed. Commit 2124c8b replaced that helper with a one-shot automaton-
aligned signal (+1 for matching first, -1 for mismatching first, then
resolved). The old jobs were cancelled at 100,000/250,000 steps with no frozen-
policy report. Jobs 6679 and 6680 restart the same two seeds and budget without
a resumable completed seed, using the corrected reward.
The one-shot aligned IPPO job completed at (0.450, 0.478) and
(0.542, 0.506) across its two seeds, for means (0.496, 0.492). The winner
changes by seed and the aggregate matches the (0.484, 0.498) random baseline,
so this variant is rejected. One decisive learner reward per 256-step episode
is a visible credit bottleneck. Commit 7e3f407 adds a denser collector-local
comparison: every matching collection pays its collector +1, every
mismatching collection pays that collector -1, and partner-harm labels still
pay nothing. Repeating colour-preference credit cannot change the frozen
first-collection objective. The otherwise identical jobs are:
| Variant | IPPO_CER | PR2_IPPO_CER | Output |
|---|---|---|---|
| repeated own-colour preference | 6727 | 6728 | exports/o/coin-d/ |
One-shot PR2 completes at (0.328, 0.336) and (0.010, 0.002), for means
(0.169, 0.169), and is rejected. Repeated-reward IPPO completes at (0.512,
0.526) and (0.494, 0.494), for means (0.503, 0.510); that is still the
uniform-random result rather than evidence of optimisation. Repeated-reward
PR2 completes at (0.400, 0.000) and (0.346, 0.358), for means (0.373,
0.179), and also fails the gate. A controlled IPPO-only follow-up, job 6737 at
exports/o/coin-e0/, changes only ippo.ent_coef from 0.01 to 0.0 while
keeping the repeated own-colour reward, two seeds, and all screen/evaluation
budgets. This tests whether entropy pressure is masking colour preference
without changing observations, dynamics, or the success formula.
The zero-entropy job completes cleanly in 03:07:44 at (0.022, 0.012) and
(0.428, 0.470), for fixed-agent means (0.225, 0.241). Removing exploration
therefore worsens the aggregate and does not clear the gate; job 6737 is
rejected.
Job 6765 adds an orthogonal stability control at exports/o/coin-a/: it
restores the default 0.01 entropy coefficient and changes only
ippo.anneal_lr to true. It otherwise uses the same dense collector-local
reward, global observation, two contiguous 250,000-step seeds, and 500 frozen-
policy episodes. This tests whether constant late PPO updates erase an earlier
colour preference; success is still the unchanged own-coin-first formula.
Job 6765 completes cleanly in 03:06:03 at (0.464, 0.494) and (0.520,
0.508), for means (0.492, 0.501). This is indistinguishable from the
(0.484, 0.498) random baseline, so learning-rate annealing is rejected. The
local-observation profile remains the only Coin candidate in long validation.
The global Coin policy input is an absolute categorical grid, whereas its
movement actions are avatar-relative. The substrate already provides an
agent-centric local observation that contains the learner's own colour and
nearby coin colours. Commit a375407 exposes the existing fully_observable
setting through the Coins experiment config so this representation can be
screened as a hyperparameter. Local observation changes neither hidden state
nor dynamics: it removes distant global cells and rotates the visible grid
with the avatar. The experiment config now exposes this setting, and the
follow-up keeps the repeated own-colour reward and all
other optimisation/evaluation settings fixed. IPPO-CER job 6751 runs the two
predeclared 250,000-step seeds with 500 frozen-policy episodes each and writes
to exports/o/coin-local/. It completes cleanly in 02:54:54 at (0.522,
0.478) and (0.516, 0.462), giving fixed-agent means (0.519, 0.470).
Player 0 is stable and clears both 0.5 and its 0.484 random baseline, but the
small +0.035 margin and mean marginal interval [0.4583, 0.5797] are screen
evidence only. The profile is promoted unchanged to job 6768 at
exports/o/coin-lv/, with three seeds, 1,000,000 steps, and 1,000 frozen-
formula episodes per seed.
Validation completes at (0.493, 0.465), (0.496, 0.473), and (0.494,
0.492). Fixed-agent means are (0.4943, 0.4767), so neither role clears the
0.5 gate; player 0 is only +0.0103 above its 0.484 random baseline. Its
mean marginal interval is [0.4514, 0.5373] and simultaneous interval is
[0.4475, 0.5411]. Job 6768 completes cleanly in 16:23:08; the 250k trend
is rejected. Two orthogonal long controls retain local
observations, dense collector-local reward, three contiguous 1,000,000-step
seeds, and 1,000 frozen episodes: job 6772 (exports/o/coin-la/) changes only
ippo.anneal_lr=True, while job 6773 (exports/o/coin-ll/) changes only
ippo.lr=1e-4. Both run as one Slurm task with two allocated CPUs and 8 GB.
They test late-update policy erosion without changing dynamics, formulas, or
seed selection.
The controls remain close to the decision boundary. Annealing gives (0.498,
0.495) and (0.484, 0.510), for provisional fixed-agent means (0.491,
0.5025). The lower learning rate gives (0.486, 0.502) and (0.521, 0.511),
for provisional means (0.5035, 0.5065). These margins are only a few
successes per 1,000 episodes, so neither is a selection. Both predeclared
third seeds continue; the campaign compares the fixed-agent three-seed
estimates rather than selecting whichever role happens to win one near-tied
evaluation.
The third seeds resolve the comparison. Annealing gives (0.500, 0.504), for
final means (0.494, 0.503) and a player-1 minimum of 0.495. It completes
cleanly in 17:28:49. Fixed lr=1e-4 gives (0.484, 0.517), for final means
(0.497, 0.510); player 1 clears 0.5 in every seed at (0.502, 0.511, 0.517)
and exceeds its 0.498 random baseline. Its marginal mean interval is
[0.4671, 0.5529] and simultaneous interval is [0.4632, 0.5568], so the
evidence meets the requested point-estimate criterion but is deliberately
reported as narrow rather than statistically separated from 0.5. Job 6773
completes cleanly in 17:17:46. The local-observation, dense handcrafted,
fixed-1e-4 IPPO-CER profile is selected over annealing on mean, worst seed,
and consistency with the gate.
The OwnCoinFirst_2_mo.py visible defaults now encode this selected training
profile: local observations, reward_mode="handcrafted", and IPPO learning
rate 1e-4. The formula, 256-step trace, regrowth rate, and objective-mode
frozen evaluator are unchanged; CLI overrides can still recover every control.
Chemistry, Commons Harvest, and Gift Refinements use the same absolute-global
grid with avatar-relative actions. Their experiment configs now expose the
same existing fully_observable switch. Setting it false gives each learner
only its rotated local field plus its existing private scalar state; it does
not add privileged information or centralise execution. Local-mode controls
retain each task's formulas, maps, horizon, agent-local shaping, algorithms,
and contiguous seeds. They compare representation only against the matched
global-observation reward screen.
The flattened base-policy dimensions change from global to local as follows:
Coin 1446 -> 606, Chemistry 1402 -> 486, Harvest 1729 -> 485, and Gift
Refinements 2920 -> 488. These counts exclude the monitor-state suffix added
by the objective wrapper. The controls therefore test a smaller, action-
aligned input rather than a larger source of privileged state.
| Local-observation control | IPPO_CER | Matched reward settings | Output |
|---|---|---|---|
| Food | 6752 | bounded reaction-progress shaping | exports/o/food-local/ |
| Food-Then-XY | 6753 | bounded reaction-progress shaping | exports/o/fxy-local/ |
| Safe Harvest | 6754 | safe-apple shaping, gamma=gae_lambda=1 |
exports/o/harv-local/ |
| Refined-Then-Consume | 6755 | handcrafted reward, 256-step updates | exports/o/ref-local/ |
Every control uses two 250,000-step seeds and 500 frozen-policy episodes per seed. All five local-mode jobs, including Coin 6751, started with two CPUs and one scheduler task.
Chemistry's first higher-entropy opposed-cycle checkpoint discovered assigned
reaction credit (return_mean=0.1 at 25,000 steps), while its matched
default-entropy IPPO and PR2 jobs remained at zero through 50,000 steps. Food
job 6766 therefore applies the same one-factor control at
exports/o/food-e5/: local observations, bounded progress shaping, two seeds,
250,000 steps, and 500 formula evaluations are unchanged, while
ippo.ent_coef increases from 0.01 to 0.05. Food satisfaction remains
F player_i_food_metabolized; learner return is only an early exploration
diagnostic and cannot promote the profile.
A 1,000-step Chemistry horizon was considered as a final sparsity control. The local fixed-random diagnostic was stopped without a result when its first 100-episode block proved too slow for an interactive process. No 1,000-step training job is launched: without a completed chance baseline, extending the trace could silently make reachability easy and would not meet the campaign's nontriviality rule.
Refined-Then-Consume has an additional local IPPO control, job 6760 at
exports/o/ref-local-g1/, that changes only gamma and gae_lambda from
0.99/0.95 to 1.0/1.0. Its refinement and consumption milestones can be
hundreds of steps apart; the undiscounted setting tests long-range credit
without changing either event, their agent ownership, or the satisfaction
formula. It retains the same two seeds, 250,000 steps, 256-step updates, and
500 evaluation episodes.
The first objective-IPPO seed (job 6626) evaluates at (0.174, 0.212, 0.218,
0.090, 0.212, 0.162). This is a real increase over the corresponding random
range of 0.076--0.102, but the best agent remains far below 0.5. The result
is retained as optimisation evidence, not promoted; its second predeclared
seed and the discount/handcrafted controls continue.
The objective-IPPO second seed is (0.156, 0.218, 0.208, 0.156, 0.150,
0.152). Fixed-agent means are (0.165, 0.215, 0.213, 0.123, 0.181, 0.157),
so job 6626 is rejected. Slurm reports FAILED after 20:12:34 only because
the old runner cannot write its overlong final Marimo filename; both frozen
reports and checkpoints were already written and are valid.
Handcrafted IPPO job 6642 gives (0.046, 0.038, 0.026, 0.060, 0.054, 0.070)
and (0.154, 0.168, 0.138, 0.296, 0.294, 0.192). Fixed-agent means are
(0.100, 0.103, 0.082, 0.178, 0.174, 0.131), so even its best role is far
below 0.5 and the profile is rejected. It completes cleanly in 21:24:43.
Purported shorter-unroll job 6703 completes in 20:25:57 with exactly the
same per-seed values because 256 was already the notebook default; it is a
duplicate execution, not replication under a distinct hyperparameter.
The first local-observation handcrafted seed (job 6755) is lower still, at
(0.020, 0.034, 0.022, 0.042, 0.026, 0.026). Every role is below its random
baseline; the second predeclared seed continues, but the local representation
provides no seed-0 rescue signal.
Its second seed is (0.148, 0.076, 0.038, 0.118, 0.078, 0.054). The best
fixed-agent mean is only 0.084; job 6755 completes cleanly in 13:05:44 and
is rejected. Local observations alone are not the source of the stronger
combined local/undiscounted result.
Combining local observations with undiscounted gamma=gae_lambda=1 changes
that result materially: job 6760 seed 0 gives (0.308, 0.288, 0.164, 0.320,
0.174, 0.208). The best role remains below 0.5, but the broad improvement over
the 0.076--0.102 random range is the strongest Refined seed-0 signal so far.
Seed 1 regresses to (0.156, 0.228, 0.234, 0.240, 0.230, 0.220); its best
fixed-agent mean is only 0.280, so the 250,000-step profile is rejected.
Because this environment takes hours per frozen evaluation, the unchanged
profile had already started a long-horizon scale check as job 6774 at
exports/o/ref-lv/: three contiguous 1,000,000-step seeds and 1,000 formula
episodes per seed, one Slurm task, two CPUs, and 8 GB. This is not a one-seed
promotion; retaining the environment requires the long evidence to clear the
0.5 gate.
Long seed 0 gives (0.145, 0.131, 0.109, 0.128, 0.145, 0.164). Its best role
is only 0.164, below the strongest 250,000-step seed and far below the gate;
scaling has therefore supplied no rescue evidence. Long seed 1 is similarly
low at (0.165, 0.176, 0.145, 0.119, 0.165, 0.140). Even if seed 2 gave one
fixed role perfect p=1, the best possible three-seed mean would be below
0.437; the long profile is mathematically unable to clear the aggregate
gate. Job 6774 was therefore stopped before seed 2 at 2-01:44:29.
The three remaining PR2 screens were also stopped at 70% of seed-0 training
after 2-16:50:53--2-17:32:30. The objective, undiscounted-objective, and
handcrafted profiles had no sustained terminal-return signal and would each
have required several additional node-days before even beginning their second
seed. This early stop is not seed selection: no PR2 frozen result was counted
as success or failure. It follows completed failures for objective IPPO,
undiscounted IPPO, handcrafted IPPO, local handcrafted IPPO, and combined
local/undiscounted IPPO, plus the two conclusive long seeds. No viable profile
reaches 0.5, so refined_then_consume_6 is removed from the curated launcher;
its notebook and Python APIs remain available by direct path. The final
all-environments suite has 8 tasks.
Undiscounted terminal-objective job 6633 completes cleanly in 20:21:26 at
(0.156, 0.136, 0.124, 0.104, 0.116, 0.178) and (0.174, 0.102, 0.180,
0.152, 0.138, 0.168). Its best fixed-agent mean is only 0.173, so changing
discounting without the local shaped-reward combination is rejected.
Two fixed 500-episode uniform-random diagnostics exposed tasks that must not be credited merely for clearing 0.5:
- Safe Harvest, environment seeds 0--499 and action RNG seed 20260810, gives
per-agent satisfaction
0.978, 0.980, 0.094, 0.088. No agent receives the nominal punishment in any episode. Source inspection confirms why: all native avatars default to role"none", but the hidden-10tile only affects"putative_cooperator". The original safety conjunct is inert. - Consume, using the same fixed seeds/RNG and its 512-step horizon, gives
0.912, 0.926, 0.948, 0.932, 0.918, 0.930. This agent-indexed reachability task is an environment smoke check rather than an optimisation benchmark. In contrast, Refined-Then-Consume at its 1,000-step horizon gives only0.076, 0.102, 0.086, 0.090, 0.084, 0.096.
The same fixed seed/RNG protocol confirms that the Chemistry objectives are
not chance-level shortcuts. Food gives per-agent probabilities 0.054, 0.062,
0.044, 0.052 over its 250-step horizon, while Food-Then-XY produces zero
successes for all four agents in 500 episodes. These values justify retaining
both tasks and using the aligned decomposition rewards to address sparse
credit rather than changing their success criteria.
A separate 100-episode diagnostic counted agent-owned vesicle progress under
the same fixed random policy. Summed across the six R1/R2/R3 X-or-Y atoms, the
per-agent agent-stage episode-hit counts were 19, 19, 21, 22; individual
atoms ranged from zero to nine episode hits. Food events were 6, 5, 4, 5, and
XY events remained all-zero. Thus reaction progress is observable and
nontrivial rather than ubiquitous. If the food targets remain unlearnable,
these data identify a defensible agent-local objective boundary for a later
replacement task; no running task has been credited against that weaker
boundary.
ChemOpposedCyclesConstraint and OpposedCycles_4_mo.py provide that bounded
replacement candidate without weakening to a shared objective. Players 0 and
2 have F player_i_reaction_r3x; players 1 and 3 have
F player_i_reaction_r3y. An R3x reaction produces iy, which inhibits the Y
cycle, while R3y produces the X inhibitor ix; the two objective families
therefore impose opposing externalities. Satisfaction remains agent-owned.
Handcrafted training credit pays each assigned R1/R2 stage 0.2 once and the
assigned R3 target 1.0 once, for a maximum 1.4 per agent and no reward for
the other branch or another learner's event. Its 500-episode fixed-random
baseline gives (0.036, 0.038, 0.034, 0.028), so R3 completion is neither an
automatic nor a chance-level pass. Local-observation IPPO-CER job 6758 and
PR2-IPPO-CER job 6759 therefore screen two 250,000-step seeds with 500 frozen-
policy episodes each at exports/o/opp-local/. The candidate is not counted
as a retained task unless a screen and long validation justify replacing
Food-Then-XY.
Because both initial opposed-cycle learners still report zero return at the
first 25,000-step checkpoint, job 6763 is a predeclared exploration control:
it changes only ippo.ent_coef from 0.01 to 0.05, while retaining local
observations, handcrafted credit, two contiguous seeds, 250,000 steps, and
500 objective-mode evaluation episodes. It writes to exports/o/opp-e5/.
The higher entropy coefficient is not a weaker success condition; it tests
whether premature policy concentration prevents discovery of the rare
assigned reactions whose random baseline is only 0.028--0.038.
Initial submissions 6756 and 6757 exited in one second with code 66 and zero environment steps. The shared runner checks that a notebook exists before its normal repository pull, so the newly added path was not visible in the older cluster checkout. A clean fast-forward made the file visible; replacements 6758 and 6759 are the only valid opposed-cycle jobs.
Default-entropy IPPO job 6758 completes cleanly in 07:16:35 at (0.004, 0,
0, 0) and all-zero. It is below every role's (0.036, 0.038, 0.034, 0.028)
random baseline and is rejected. The PR2 and predeclared higher-entropy IPPO
controls remain before deciding whether the candidate can replace
Food-Then-XY.
Higher-entropy IPPO job 6763 also fails. It completes cleanly in 06:53:17
at (0.010, 0.002, 0.016, 0.004) and (0.010, 0.014, 0.016, 0.044), for
fixed-agent means (0.010, 0.008, 0.016, 0.024). Every mean is below the
corresponding random baseline, and none approaches 0.5. Only the running PR2
control remains before the replacement candidate is closed.
PR2 job 6759 closes the candidate all-zero in both seeds and completes cleanly
in 07:55:47. Default IPPO, higher-entropy IPPO, and PR2 all fail their random
baselines and the 0.5 gate, so Opposed Cycles cannot replace Food-Then-XY.
Both food_4 and food_then_xy_4 are removed from the curated launcher under
the task's removal allowance. Their notebooks and explicit direct paths remain
available; the all-environments suite drops from 11 to 9 tasks pending the
separate Refined-Then-Consume decision.
The primary objective screens complete without a promotable result. Food IPPO
gives (0.046, 0.056, 0.094, 0.008) and (0.012, 0, 0.044, 0.044), for a
best fixed-agent mean of 0.069; Food PR2 is all-zero twice. Food-Then-XY is
all-zero for both algorithms and both seeds. Jobs 6616--6619 are marked
FAILED after 07:42:48--08:27:41 only because the old runner's final
Marimo filename is too long; both checkpoints and two-run reports were already
written and are valid. Every primary profile is rejected because it remains
far below 0.5.
Three earlier PR2 controls subsequently complete both seeds and are rejected.
Food's one-shot own-food shaping (job 6667) is all-zero in both seeds; its
undiscounted objective reward (job 6669) gives (0.002, 0, 0, 0) then all-zero;
and Food-Then-XY milestone shaping (job 6641) is all-zero in both seeds. Their
clean wall times are 08:41:39, 08:39:24, and 09:22:00, respectively.
The local/high-entropy IPPO controls remain relevant because their training
logs at least show agent-owned reaction discovery, but no learner-return
checkpoint can substitute for frozen formula evaluation.
The corresponding earlier IPPO jobs also complete and are rejected.
Food-Then-XY milestone shaping (job 6640) is all-zero twice. Food one-shot
shaping (job 6666) gives (0, 0.044, 0.038, 0.038) and (0.056, 0.006, 0.058,
0.032); undiscounted objective reward (job 6668) gives (0.016, 0.052, 0.022,
0.062) and (0.006, 0, 0.014, 0.008). Neither Food profile improves on the
per-agent random baseline in aggregate, and all are far below the gate. Their
clean wall times are 08:42:39, 07:58:35, and 08:04:27.
The denser six-stage progress reward does not rescue Food-Then-XY under IPPO:
job 6725 completes cleanly in 07:43:06 and is all-zero in both seeds. It is
rejected. Its PR2 counterpart, job 6726, also completes all-zero in both seeds
and cleanly exits in 08:26:10. Every original Food-Then-XY reward/algorithm
profile is therefore rejected; the separate opposed-cycle candidate retains
its predeclared seeds.
The final original-task representation control, local-observation IPPO job
6753, is also all-zero in both seeds and completes cleanly in 06:58:40.
Changing representation cannot rescue Food-Then-XY. Every original objective,
reward, algorithm, discount, and observation profile screened in this campaign
is now rejected; only the explicitly separate opposed-cycle replacement
candidate remains to close.
Food's progress-reward IPPO job 6723 also completes cleanly in 07:54:01, at
(0.038, 0.004, 0.046, 0.058) and (0.028, 0.016, 0.050, 0.014). Its fixed-
agent means are at or below the random baseline and nowhere near 0.5, so this
profile is rejected as well. The matching PR2 job 6724 is all-zero in both
seeds and completes cleanly in 08:35:18. Every original Food profile is now
rejected; only the predeclared local-observation and higher-entropy controls
remain, and neither can be promoted without its own frozen-policy evidence.
The local-observation progress-reward control (job 6752) is all-zero in both
seeds and completes cleanly in 06:54:13. The action-aligned representation
does not rescue Food. Only the predeclared higher-entropy local control remains
before the curated task's removal decision.
The final higher-entropy local control, job 6766, completes cleanly in
06:48:54 at (0.052, 0.032, 0.022, 0.010) and (0.014, 0.014, 0.014,
0.024). Its fixed-agent means (0.033, 0.023, 0.018, 0.017) are all below
the corresponding random baselines and far below 0.5. Food has no viable
profile after objective, one-shot and progress rewards, discount, both primary
algorithms, global/local observations, and entropy controls. It is therefore
removed from the curated launcher under the task's explicit removal allowance;
the direct notebook remains available for diagnostics.
Plain Consume is therefore removed from the curated launcher under the task's explicit removal allowance; its notebook remains runnable by direct path. Jobs 6624, 6625, 6665, 6701, and 6702 were cancelled without a completed seed, and none can count as optimisation evidence.
Safe Harvest is repaired rather than removed. Its objective now uses the native per-agent zap target event:
This remains agent-indexed and general-sum because any other player can make
an agent fail by zapping it. The final 500-episode fixed random baseline is
0.570, 0.582, 0.032, 0.028; an earlier 200-episode pilot also found
0.965/0.975 for the weaker "apple before first zap" alternative. The
global safety formula is retained because it leaves room to demonstrate
optimisation above random while keeping the required best-agent point estimate
near the 0.5 gate. Its aligned shaped reward pays the first safe apple +1,
pays the first zap -1, cancels a previously paid apple on later failure, and
never credits one learner for another learner's event. Pre-fix jobs 6620,
6621, 6661, 6662, 6670, and 6671 were cancelled without a completed seed and
are invalid for the revised objective.
The fresh zap-avoidance screen uses:
| Training reward | IPPO_CER | PR2_IPPO_CER | Output |
|---|---|---|---|
| terminal objective | 6710 | 6711 | exports/o/harv-z-o/ |
| aligned handcrafted | 6712 | 6713 | exports/o/harv-z-h1/ |
All four jobs retain two seeds, 250,000 steps, and 500 objective-mode frozen-
policy episodes per seed. Both pairs use gamma=1.0 and gae_lambda=1.0 over
the existing 1,000-step unroll. This is essential for shaped alignment too: an
early apple +1 and a later zap -1 must cancel without discounting or GAE
attenuation. Jobs 6705--6708 were cancelled at zero environment steps when
this late-failure credit issue was caught; they produced no report.
Seed 0 now separates the reward variants. Objective IPPO gives (0.580,
0.434, 0.024, 0.018), which matches the 0.570 best-role random baseline.
Aligned-handcrafted IPPO gives (0.814, 0.366, 0.050, 0.060): player 0 clears
both the 0.5 gate and its baseline by 0.244. This is provisional optimisation
evidence, not a promotion from a selected seed; both predeclared second seeds
remain mandatory before choosing a validation profile.
The aligned-handcrafted IPPO second seed gives (0.634, 0.580, 0.018,
0.052). Player 0 therefore passes in both predeclared seeds and has a fixed-
agent mean of 0.724, versus its 0.570 random baseline. Its two-seed mean
marginal interval is [0.6633, 0.7847] and simultaneous interval is [0.6528,
0.7952]. Job 6712 completes cleanly in 09:15:45. This profile is promoted
unchanged to validation job 6769 at exports/o/harv-v/: three seeds,
1,000,000 steps, and 1,000 frozen objective-mode episodes per seed. Slurm
confirms one task, two allocated CPUs, and 8 GB RAM on amd48 despite the
site wrapper's known misleading submission warning.
Long-validation seed 0 gives (0.602, 0.577, 0.014, 0.034). Both safe-apple
roles clear 0.5 while the two opposed roles remain low; player 0 is also above
its 0.570 same-role random baseline. This is a valid first seed, not final
selection: seeds 1 and 2 continue under the same 1,000,000-step and
1,000-episode protocol.
Seed 1 gives (0.372, 0.591, 0.036, 0.048). The successful safe role changes:
player 0 falls below 0.5 while player 1 clears it. Two-seed fixed-agent means
are (0.487, 0.584, 0.025, 0.041); player 1 is only +0.002 above its 0.582
same-role random baseline. Seed 2 is therefore decisive for both the requested
gate and evidence of optimisation beyond chance.
Seed 2 gives (0.650, 0.493, 0.139, 0.012). Final fixed-agent means are
(0.5413, 0.5537, 0.0630, 0.0313). Player 1 has the best mean; its marginal
interval [0.5107, 0.5966] and simultaneous interval [0.5033, 0.6040] both
clear 0.5. Job 6769 completes cleanly in 1-22:40:35, so the profile meets
the formal success gate. However, neither safe-role mean improves on its
same-role random baseline (0.570, 0.582), so this is not yet accepted as a
reward-optimisation win.
Two three-seed, 1,000,000-step stability controls retain global observations,
the aligned handcrafted reward, gamma=gae_lambda=1, unchanged formulas, and
1,000 frozen episodes: job 6810 (exports/o/harv-ha/) enables linear learning-
rate annealing, while job 6811 (exports/o/harv-hl/) fixes lr=1e-4. Both
start as one Slurm task with two CPUs on amd48. A control must clear 0.5 and
beat the corresponding random role before it can replace the formal-but-
chance-level validation profile.
The first two annealed-control seeds give (0.554, 0.616, 0.031, 0.037) and
(0.550, 0.585, 0.022, 0.031). Its fixed-agent means are therefore (0.552,
0.6005, 0.0265, 0.034): player 1 is +0.0185 above its 0.582 same-role
random baseline. The corresponding fixed-1e-4 seeds give (0.690, 0.545,
0.030, 0.015) and (0.561, 0.524, 0.056, 0.027), with fixed-agent means
(0.6255, 0.5345, 0.043, 0.021): player 0 is +0.0555 above its 0.570
baseline. Both predeclared seed-2 runs continue because the controls currently
improve different fixed roles; no profile is selected from this two-seed
checkpoint.
Seed 2 gives (0.629, 0.595, 0.030, 0.022) with annealing and (0.510,
0.608, 0.025, 0.026) with fixed 1e-4. The final annealed fixed-agent means
are (0.5777, 0.5987, 0.0277, 0.0300). Player 1 clears 0.5 in every seed at
(0.616, 0.585, 0.595), beats its 0.582 same-role random baseline in every
seed, and has marginal mean interval [0.5557, 0.6416] and simultaneous mean
interval [0.5483, 0.6490]. The fixed-1e-4 means are (0.587, 0.559, 0.037,
0.0227); its best fixed role has a lower mean and a 0.510 worst seed. The
annealed profile is selected on best-agent mean, worst seed, and per-seed
baseline consistency. SafeHarvest_4_mo.py now defaults to the aligned
handcrafted reward, gamma=gae_lambda=1, and linear IPPO learning-rate
annealing. Objective formulas and frozen evaluation are unchanged.
Jobs 6810 and 6811 complete with exit code zero in 1-23:15:19 and
1-23:02:21, respectively. Each used one Slurm task, two allocated CPUs, and
8 GB on amd48. Transient live-notebook refreshes reported home-filesystem
quota errors during evaluation, but both logs end successfully after writing
all checkpoints, three-run JSON reports, arrays, and final notebooks; scheduler
and report state, rather than those optional live refreshes, is authoritative.
The terminal-objective IPPO control (job 6710) also completes cleanly in
09:13:38; its second seed is (0.294, 0.690, 0.068, 0.026). Its fixed-agent
means are (0.437, 0.562, 0.046, 0.022), below the corresponding random
baselines (0.570, 0.582, 0.032, 0.028) for both roles near the gate. It is
rejected in favour of the shaped profile on predeclared aggregate evidence,
not because either individual seed was selected after inspection.
Both PR2 controls are rejected as well. Terminal-objective job 6711 completes
in 09:37:37 at (0.508, 0.460, 0, 0) and (0.494, 0, 0, 0). Its player-0
mean of 0.501 nominally clears the point gate by 0.001 but is below the same
role's 0.570 random baseline. Aligned-handcrafted job 6713 completes in
09:40:10 at (0, 0.016, 0, 0) and (0.484, 0, 0, 0), with no fixed-agent
mean above 0.242. Safe Harvest's complete two-algorithm screen therefore
selects shaped IPPO on its stable 0.724 aggregate, not merely on a threshold
crossing.
The local-observation shaped IPPO control (job 6754) completes in 06:59:45
at (0.222, 0.356, 0.030, 0.410) and (0.530, 0.140, 0.044, 0). Its fixed-
agent means are (0.376, 0.248, 0.037, 0.205), so no role clears 0.5 and the
profile is rejected. This closes the representation comparison in favour of
the selected global-observation shaped IPPO profile.
All 24 jobs entered RUNNING state immediately. Slurm resolved each request
to one task, two allocated CPUs, and 8 GB RAM. Initial logs confirmed the
current checkout, shared PLTLF environment, CPU JAX backend, and notebook/CLI
arguments. The Marimo runner warned that some live snapshot filenames were too
long; experiment artifacts are written independently under the save directory,
so this is monitored as a presentation-artifact issue rather than assumed to
invalidate training.
The warning is caused by the runner incorporating every CLI override into the
adjacent notebook artifact name. Experiment reports are written before the
final notebook export, but the overlong final name can still make Slurm report
an otherwise-complete job as failed. Validation launches therefore use a short
exports/o/... save path and omit overrides that already match notebook
defaults; the JSON report and checkpoint manifest, rather than the auxiliary
notebook export, remain the completion evidence.
The shared cluster runner was subsequently fixed in nightly/setup commit
204ef5c: stems longer than 180 characters now keep a readable prefix plus a
16-hex SHA-256 suffix. The updated py_cpu.sh and common helper were deployed
to cpucluster with the previous files retained as before-204ef5c backups.
Jobs already running keep the runner state from their launch, while later jobs
produce bounded, collision-resistant final and live artifact names.
The original Refined-Then-Consume PR2_IPPO_CER job 6627 reached the 8 GB
limit and lost its training worker, leaving only the waiting Marimo parent.
After inspecting the allocation and node process tree, it was cancelled.
Attempt 6630 showed that SBATCH_MEM=16G was ignored by the local wrapper
and was cancelled before training. Replacement job 6631 was submitted with
an explicit submit --mem=16G request; Slurm confirmed ReqTRES mem=16G.
Prior evidence used for triage¶
The canonical exports predate explicit learned-policy satisfaction evaluation,
so their IPPO_CER and PR2_IPPO_CER satisfaction_report.json files contain
zero evaluated runs. Their final 64 training episodes nevertheless provide a
useful, non-certifying signal:
| Environment | Algorithm | Best-agent final-window mean |
|---|---|---|
| Classic pursuit (2) | IPPO_CER | 0.583 |
| Classic pursuit (2) | PR2_IPPO_CER | 0.995 |
| Capture pursuit (2) | IPPO_CER | 0.984 |
| Capture pursuit (2) | PR2_IPPO_CER | 0.995 |
| Matrix Stag Hunt | IPPO_CER | 1.000 |
| Matrix Stag Hunt | PR2_IPPO_CER | 0.667 |
| Safe Harvest | IPPO_CER | 0.979 |
| Safe Harvest | PR2_IPPO_CER | 0.510 |
| Territory Role Claim | IPPO_CER | 0.000 |
| Territory Role Claim | PR2_IPPO_CER | 0.000 |
The paper repository additionally reports frozen-profile estimates of 0.573
for the classic intruder, 0.979 for the capture intruder, 1.000 for Sustained
Stag, and 0.609 averaged over Safe Harvest agents. Its strongest non-
handcrafted Territory result is only 0.344 with PR2_IQL_CER. These values are
historical evidence, not substitutes for the new pass.
Territory Claim_4 was submitted alongside the primary matrix because it
already provides four agent-indexed F player_i_resource_claimed objectives
in a contested substrate. It is a candidate replacement for Role Claim if the
primary task remains both unsuccessful and unsuitable as a general-sum
satisfaction game.
Source inspection then established that historical RoleClaim_2 was not a
valid candidate at all: its player-1 formula was only a reordered copy of
player 0's formula, and its handcrafted reward was shared. Commit 4959d62
first revised the task into an opposed claim/abstention contest:
player_0: (F player_0_resource_claimed) & (G !player_1_resource_claimed)
player_1: (F player_1_resource_claimed) & (G !player_0_resource_claimed)
The interim shaped reward was equal-and-opposite (+1 to the claimant, -1
to the opponent, once per player's first claim). The old common-objective jobs
6622 and 6623 were cancelled after one and zero completed training seeds,
respectively, and none of their results can count. An interim two-seed,
250,000-step screen used:
| Corrected Role Claim reward | IPPO_CER | PR2_IPPO_CER | Output |
|---|---|---|---|
| terminal objective | 6674 | 6675 | exports/o/role-c/ |
| competitive shaped | 6676 | 6677 | exports/o/role-ch/ |
Claim_4 stayed a diagnostic candidate rather than silently replacing the
benchmark with an easier four-player reachability objective. The later event-
semantics diagnostic below superseded the interim claim/abstention formulation
before any fresh seed completed.
A fixed 50-episode uniformly random diagnostic (environment seeds 0--49,
action RNG seed 20260810, 256-step horizon) initially produced p_hat=0.0 for
both corrected Role Claim objectives. The later label audit established that
this diagnostic measured delayed payout rather than the substrate's
claimed_resource event, so the value is retained only as pre-fix provenance
and is not a valid baseline for the corrected atom.
All four corrected 256-step runs still had zero learner return at the 50,000-step checkpoint. Because the historical task also failed at that horizon, a controlled full-trace variant was started rather than waiting for a likely all-zero terminal signal:
| Role Claim 1000-step variant | IPPO_CER | PR2_IPPO_CER | Output |
|---|---|---|---|
| terminal objective | 6681 | 6682 | exports/o/role1k-c/ |
| competitive shaped | 6683 | 6684 | exports/o/role1k-h/ |
These jobs preserve the corrected formulas, seeds, 250,000-step budget, and
500-episode evaluator. They set max_cycles=1000, ippo.num_steps=1000,
gamma=1.0, and gae_lambda=1.0, so every PPO rollout contains one complete
finite trace and the terminal bit can propagate without temporal discount or
GAE attenuation. The original 256-step matrix continues in parallel; this is
a horizon/credit-assignment comparison, not a replacement chosen after seeing
final seed outcomes.
The ensuing source audit found a more fundamental issue before any of these
Territory jobs completed a seed: TerritoryLabelMixin derived
player_i_resource_claimed from positive native reward. Territory ownership
changes immediately through an explicit claimed_resource event, whereas the
native payout begins only after a 25-frame delay and then occurs stochastically
at rate 0.01. A payout is neither a reliable claim timestamp nor guaranteed to
identify the current ownership transition. The label now consumes the
deduplicated native event and maps its one-based player_index to the agent;
positive reward without that event does not satisfy the claim atom.
This semantic correction invalidates every Territory screen launched before the fix: candidate Claim jobs 6628, 6629, 6663, 6664, 6672, and 6678, plus competitive Role Claim jobs 6674--6677 and 6681--6684. They are cancelled and retained in the manifest rather than interpreted as failed learning. Fresh fixed-seed diagnostics and screens use the event-defined proposition. Claim-4 remains diagnostic only: an easy raw claim event is not by itself evidence that it is an acceptable replacement for the contested Role objective.
The first event-defined claim/abstention replacements were:
| Event-defined reward | IPPO_CER | PR2_IPPO_CER | Output |
|---|---|---|---|
| terminal objective | 6693 | 6694 | exports/o/role-evt/ |
| competitive shaped | 6695 | 6696 | exports/o/role-evh/ |
All four were cancelled at zero environment steps after the event-defined
random diagnostic completed. Across 500 fixed episodes (environment seeds
0--499, action RNG seed 20260810), both agents claimed at least once in every
episode. The interim objectives therefore remained p_hat=0.0 for both
players for a structural reason: two agents who each rationally seek a claim
make the other's permanent abstention implausible.
The curated task is consequently revised to a first-sole-claim race:
player_0: (!player_1_resource_claimed) U
(player_0_resource_claimed & !player_1_resource_claimed)
player_1: (!player_0_resource_claimed) U
(player_1_resource_claimed & !player_0_resource_claimed)
A first step containing only one player's claim satisfies that player and
irreversibly fails the opponent; a simultaneous first-claim step is a tie and
satisfies neither. The shaped reward now resolves on that same step: +1/-1
for a sole claimant/opponent and zero for a tie, with later claims ignored.
This preserves mutually exclusive, competitive payoffs while removing the
irrational requirement that a losing agent abstain forever.
The same 500-episode fixed random diagnostic gives player 0 p_hat=0.490,
player 1 p_hat=0.486, ties 0.024, and no episode without a claim. These
values are the chance baseline for promotion: a learned result that merely
rounds to 0.5 is not treated as reward optimisation evidence.
The fresh two-seed race screen uses:
| Race reward | IPPO_CER | PR2_IPPO_CER | Output |
|---|---|---|---|
| terminal objective | 6697 | 6698 | exports/o/role-race-o/ |
| first-claim shaped | 6699 | 6700 | exports/o/role-race-h/ |
All four logs confirm checkout e9d9d75, one task, two CPUs, the unchanged
250,000-step/two-seed budget, and 500 frozen-policy episodes per seed.
Objective-IPPO completes at (0.416, 0.414) and (0.890, 0.098), giving fixed-
agent means (0.653, 0.256). Player 0 therefore exceeds both the 0.5 gate and
its 0.490 random baseline in aggregate, although the wide seed spread must be
resolved by long validation. Shaped IPPO flips its winner across seeds:
(0.648, 0.142) then (0.236, 0.592), whose fixed-agent means (0.442,
0.367) fail the gate. The objective-IPPO profile is promoted to job 6744 at
exports/o/role-v/, with three seeds, 1,000,000 steps, and 1,000 evaluation
episodes per seed. Validation seed 0 gives (0.999, 0.000), decisively above
player 0's 0.490 random baseline. Seeds 1 and 2 give (0.859, 0.101) and
(0.977, 0.006). Player 0's final mean is 0.945, its minimum seed is
0.859, its marginal mean interval is [0.9021, 0.9673], and its simultaneous
interval is [0.8982, 0.9686]. Job 6744 completes cleanly in 20:09:13;
objective-reward IPPO is the validated Territory selection. Neither PR2
variant produced a success in seed 0.
Objective PR2 is in fact all-zero across both seeds. Shaped PR2 gives
(0.000, 0.000) and (0.000, 0.004). Both PR2 profiles are rejected without
long validation.
Jobs 6685--6688 and 6689--6692 were two zero-training submission attempts for
this same matrix. The shared runner resolves notebook paths relative to
~/Projects: the first batch incorrectly used a repository-relative path and
the second an absolute path, so both exited with code 66 before repository
setup. The valid batch uses the canonical project-qualified path
pltlf/notebooks/... and reaches repository setup and training normally.
CX3 was inspected as overflow capacity but was not used for this pass. Its checkout was current yet contained untracked live Marimo snapshots, so the clean-checkout requirement for scheduler runners was not satisfied. The DoC CPU cluster had sufficient immediate capacity.
Results¶
Final retained-suite outcome¶
Every retained task below was validated over the three contiguous training
seeds 0--2, 1,000,000 environment steps per seed, and 1,000 frozen-policy
objective episodes per seed. p is the best fixed agent's mean across all
three seeds; the interval is the report's 95% marginal mean interval. No
threshold was lowered from 0.5.
| Retained task | Selected training profile | Fixed role | p (95% interval) |
Worst seed | Same-role random | Decision |
|---|---|---|---|---|---|---|
| Sustained Stag 2 | IPPO_CER, objective | both | 1.000 ([0.9571, 1]) |
1.000 |
0.106 |
pass; shared-objective review exception |
| Classic Pursuit 2 | IPPO_CER, objective | player 0 | 0.651 ([0.6084, 0.6823]) |
0.185 |
0.560 |
pass; role swaps across seeds |
| Capture Pursuit 2 | PR2_IPPO_CER, objective | player 1 | 0.943 ([0.8997, 0.9653]) |
0.853 |
0.716 |
pass |
| Classic Pursuit 3 | PR2_IPPO_CER, objective | player 0 | 0.671 ([0.6320, 0.6910]) |
0.030 |
0.638 |
pass; role swaps across seeds |
| Capture Pursuit 3 | IPPO_CER, aligned role reward | players 1/2 | 0.883 ([0.8404, 0.9263]) |
0.822 |
0.334 |
pass |
| Own Coin First 2 | IPPO_CER, local view, aligned reward, lr=1e-4 |
player 1 | 0.510 ([0.4671, 0.5529]) |
0.502 |
0.498 |
pass; narrow point-estimate margin |
| Safe Harvest 4 | IPPO_CER, aligned reward, undiscounted, annealed LR | player 1 | 0.5987 ([0.5557, 0.6416]) |
0.585 |
0.582 |
pass |
| Territory Role Claim 2 | IPPO_CER, objective | player 0 | 0.945 ([0.9021, 0.9673]) |
0.859 |
0.490 |
pass |
All eight retained environments therefore satisfy the requested fixed-agent point-estimate gate. The narrow Coin result is not claimed as interval- certified improvement over 0.5; its point estimate and every individual seed meet the stated criterion. Classic Pursuit's role-swapping minima are retained rather than selecting favourable seeds.
Four original curated tasks were removed under the explicit removal allowance:
| Removed task | Decisive evidence |
|---|---|
| Gift Refinements Consume 6 | uniform random already reaches 0.912--0.948 |
| Chemistry Food 4 | best screened fixed-agent mean 0.069 after all declared controls |
| Chemistry Food-Then-XY 4 | all declared objective and shaped profiles remain at zero |
| Refined-Then-Consume 6 | strongest 1M profile has best fixed mean 0.155 over two completed seeds; even a perfect third seed is bounded below 0.437 |
The agent-owned, cross-inhibiting Opposed Cycles replacement candidate also
failed: its best fixed mean was 0.024, so it did not replace either Chemistry
task. Removed notebooks and Python APIs remain directly runnable and no saved
artifact was deleted.
Matrix Stag Hunt completed its two-seed screen. IPPO_CER produced
p_hat = 1.0 for both agents on both seeds. PR2_IPPO_CER produced 0.0 on
seed zero and 1.0 on seed one, so its per-agent aggregate is 0.5 but is not
stable. NASHQ_CER also produced 1.0 for both agents on both seeds.
Its fixed 500-episode uniform-random diagnostic (environment seeds 0--499,
action RNG seed 20260810, unchanged 20-round trace) gives 0.106 for each
agent. Sustained Stag is therefore not a chance-level objective despite the
shared-satisfaction exception recorded in assumptions.md.
The stable Stag IPPO_CER profile was promoted immediately to a three-seed,
1,000,000-step validation with 1,000 frozen-policy episodes per seed. Job 6635
runs on amd48 and writes to exports/o/stag-v/.
Validation job 6635 completed cleanly in 03:44:40. Both Stag agents remain at
p_hat=1.0 in every one of the three 1,000,000-step seeds, with 1,000 frozen-
policy episodes per seed. The per-agent marginal Hoeffding interval is
[0.9571, 1.0]; the simultaneous Bonferroni-Hoeffding interval is
[0.9532, 1.0]. Training took 13,380.57 seconds in aggregate and frozen
satisfaction evaluation took 72.30 seconds. Stag is therefore fully validated,
not merely screened.
The initial Pursuit seed-zero snapshot below showed at least one provisional profile above the gate for every task. Promotions use the later two-seed aggregates, not this snapshot alone:
A fixed uniform-random diagnostic closes the chance-baseline gap for these tasks. Each task uses environment seeds 0--499, action RNG seed 20260810, its unchanged 100-step trace, and 500 episodes. Per-agent probabilities are:
| Pursuit task | Uniform-random p_hat |
|---|---|
| Classic, 2 agents | (0.560, 0.418) |
| Capture, 2 agents | (0.284, 0.716) |
| Classic, 3 agents | (0.638, 0.326, 0.326) |
| Capture, 3 agents | (0.142, 0.334, 0.334) |
The final selected-agent means for the first three tasks are 0.651, 0.943,
and 0.671, respectively, so all exceed both 0.5 and their same-role random
baseline. Classic-3's +0.033 margin over its random guard is modest and is
reported as such; its validation evidence is strengthened by the fact that
every seed has some opposed role at p >= 0.835, not by pretending the guard
is uniformly dominant. Capture-3's first validation profile improves on its
random intruders but remains below 0.5 and therefore still fails.
| Task | IPPO_CER best | PR2_IPPO_CER best |
|---|---|---|
| Classic, 2 agents | 0.868 | 0.990 |
| Capture, 2 agents | 0.780 | 0.992 |
| Classic, 3 agents | 0.806 | 1.000 |
| Capture, 3 agents | 0.938 | 0.088 |
Capture-3 is the clearest algorithm split: its IPPO profile credits both
intruders at 0.938, while the corresponding PR2 profile fails the screen.
Classic-2 IPPO_CER completed with a best-agent mean of 0.792; both seeds
pass individually (0.716 and 0.868). It was promoted to three seeds,
1,000,000 steps, and 1,000 frozen-policy episodes in job 6644, writing to
exports/o/c2-v/. Validation completes at (0.993, 0.476), (0.185, 0.807),
and (0.776, 0.132). The winning role swaps in seed 1, but the final fixed-
agent means are (0.651, 0.472), so player 0 clears the gate. Its reported
mean marginal Hoeffding interval is [0.6084, 0.6823] and simultaneous mean
interval is [0.6045, 0.6849]; player 1's are [0.4287, 0.5146] and
[0.4249, 0.5185]. Job 6644 completed cleanly in 05:38:35; aggregate
training and satisfaction-evaluation times are 17,558.55 and 2,721.16
seconds. Classic-2 is fully validated.
Capture-2 IPPO_CER completed at a best per-agent mean of only 0.509. The
successful role swaps across seeds: player 0 is 0.780 then 0.238, while
player 1 is 0.220 then 0.762. This clears the aggregate point-estimate gate
but is not promoted while the PR2 screen remains available as a potentially
more stable choice.
Capture-2 PR2_IPPO_CER subsequently completed with player 1 at 0.992 and
0.860 across the two seeds (0.926 mean). That stable intruder result was
promoted to a three-seed, 1,000,000-step validation with 1,000 evaluation
episodes in job 6645, writing to exports/o/cap2-v/.
Validation completes at (0.000, 1.000), (0.147, 0.853), and (0.770,
0.975). Fixed-agent means are (0.306, 0.943) and player 1 never falls below
0.853. Its reported mean marginal Hoeffding interval is [0.8997, 0.9653]
and simultaneous mean interval is [0.8959, 0.9666]; player 0's corresponding
intervals are [0.2770, 0.3486] and [0.2745, 0.3525]. Aggregate training
and satisfaction-evaluation times are 17,874.16 and 6,180.83 seconds. Job
6645 completed cleanly in 06:41:18. Capture-2 is fully validated.
Both three-player screens also completed. Classic-3 PR2_IPPO_CER gives the
guard a 0.998 mean, versus a best-agent 0.798 for IPPO_CER; PR2 was
promoted in validation job 6646 (exports/o/cl3-v/). Capture-3 reverses that
ordering: IPPO_CER gives each intruder a 0.792 mean, while PR2's best agent
is only 0.369; IPPO was promoted in job 6647 (exports/o/ca3-v/). Both jobs
use three seeds, 1,000,000 steps, and 1,000 frozen-policy episodes per seed.
Classic-3 validation seeds 0 and 1 are (0.999, 0.000, 0.000) and (0.983,
0.098, 0.098). Capture-3 validation seeds 0 and 1 are (0.288, 0.712, 0.712)
and (0.289, 0.697, 0.697).
Classic-3 job 6646 completes cleanly in 07:59:26; its third seed switches
the successful role to the intruders at (0.030, 0.835, 0.835). Across all
three predeclared seeds the fixed-agent means are (0.671, 0.311, 0.311), so
the guard still clears the gate. Its reported mean marginal Hoeffding interval
is [0.6320, 0.6910] and simultaneous mean interval is [0.6280, 0.6930].
Aggregate training and satisfaction-evaluation times are 27,894.64 and 835.12
seconds. Classic-3 is fully validated; the role switch is retained rather
than selecting only the two guard-dominant seeds.
Capture-3 job 6647 then completed cleanly in 07:04:44, but its predeclared
third seed collapsed to (0.001, 0.003, 0.003). The final fixed-agent means
are consequently (0.193, 0.471, 0.471), so this profile fails the p >= 0.5
gate despite its first two seeds. The intruders' reported mean marginal
Hoeffding interval is [0.4410, 0.5136] and their simultaneous mean interval
is [0.4370, 0.5196]; neither establishes success. Aggregate training and
satisfaction-evaluation times are 25,377.48 and 57.41 seconds.
Three robustness controls keep the same three training seeds, 1,000,000
steps, 1,000 frozen-policy episodes, unchanged temporal satisfaction
evaluator, and IPPO_CER algorithm:
| Capture-3 control | Job | Output |
|---|---|---|
| linear learning-rate annealing | 6761 | exports/o/ca3-va/ |
fixed learning rate 1e-4 |
6762 | exports/o/ca3-lr/ |
| formula-aligned handcrafted role reward | 6764 | exports/o/ca3-hv/ |
The first tests whether the constant 3e-4 update destabilises a useful late
policy; the second isolates update size without changing the entropy bonus or
rollout geometry. Both retain objective-mode training. The third changes only
the training reward: the guard receives capture credit and each intruder
receives collision-free terminal credit from the existing role-local helper.
It neither shares success across opposing roles nor changes the frozen-policy
formulas. Capture-3 remains unvalidated until a predeclared control clears the
gate.
The first control seeds are encouraging but non-final. Learning-rate annealing
gives (0.012, 0.988, 0.988), and fixed lr=1e-4 gives (0.216, 0.777,
0.777), while the handcrafted role reward gives (0.068, 0.930, 0.930).
Every control's intruder result exceeds the 0.334 random baseline. Every
remaining seed is retained because the original constant-rate profile failed
only on its third predeclared seed.
Seed 1 separates the two learning-rate controls. Annealing collapses to (0,
0.001, 0.001), while fixed lr=1e-4 remains stable at (0.154, 0.806,
0.806). Both third seeds continue: seed 2 is mandatory because it was exactly
where the original constant-rate validation collapsed. No two-seed snapshot
is promoted as final evidence.
The aligned role-reward control is stable in seed 1 as well, at (0.100,
0.898, 0.898) after seed 0's (0.068, 0.930, 0.930). Its third seed has
started. This is the strongest two-seed point estimate, but it remains
provisional under the same seed-2 rule.
The fixed lr=1e-4 control completes seed 2 at (0.016, 0.981, 0.981) and
finishes cleanly in 06:34:58. Across all three 1,000,000-step seeds its
fixed-agent means are (0.129, 0.855, 0.855). Each intruder's reported mean
marginal interval is [0.8117, 0.8896] and simultaneous interval is [0.8057,
0.8936]; both decisively exceed the 0.334 same-role random baseline. Training
took 7,953.26, 7,783.01, and 7,859.70 seconds, while the corresponding
1,000-episode evaluations took only 17.92, 18.01, and 12.74 seconds.
Capture-3 is therefore validated. The annealed and aligned-reward third seeds
continue only to determine whether either is a preferable final default.
The annealed control then completes seed 2 at (0.059, 0.936, 0.936) and
finishes cleanly in 06:43:14. Its fixed intruder mean is 0.642, with
marginal interval [0.6127, 0.6743] and simultaneous interval [0.6087,
0.6783]; it formally passes. However, its seed-1 intruder result is only
0.001, versus a 0.777 minimum for fixed lr=1e-4. Annealing is therefore
rejected as the final default on stability and aggregate performance, not
because its point mean fails the gate.
The aligned role-reward control is stronger still. Seed 2 gives (0.178,
0.822, 0.822) and job 6764 completes cleanly in 06:36:50. Across all three
seeds its fixed-agent means are (0.115, 0.883, 0.883), with intruder minimum
0.822, marginal interval [0.8404, 0.9263], and simultaneous interval
[0.8344, 0.9323]. Training takes 8,089.89, 7,893.69, and 7,728.67
seconds; evaluations take 14.76, 14.67, and 12.66 seconds. This profile
beats fixed lr=1e-4 in both mean (0.883 versus 0.855) and worst seed
(0.822 versus 0.777). Formula-aligned handcrafted-reward IPPO is therefore
the final Capture-3 selection; frozen evaluation continues to use the
unchanged opposed guard/intruder formulas.
Capture_3_mo.py now defaults to reward_mode="handcrafted" so an IPPO-CER
run reproduces the selected reward profile. The experiment layer continues to
construct a separate objective-mode environment for frozen satisfaction and
Nash checks, so this default does not change either agent's formula.
For Coins, a separate fixed-policy diagnostic sampled uniform random actions
for 500 episodes using environment seeds 0--499, action RNG seed 20260810, the
same 256-step horizon, and regrow_rate=0.005. It produced p_hat=0.484 for
player 0 and 0.498 for player 1. Objective-IPPO job 6612 completed both seeds:
seed 0 gave (0.498, 0.522) and seed 1 gave (0.524, 0.472), for means
(0.511, 0.497). The apparent winner swaps with the seed and remains at the
random baseline, so this variant is rejected rather than promoted. Slurm marks
the job FAILED only because the old runner attempted to write an auxiliary
Marimo snapshot with an overlong filename after the authoritative report and
checkpoints were written; the full two-seed report is valid. Objective PR2 and
the aligned handcrafted-reward pair were retained at this stage. Objective-PR2 job 6613
also completed: seed 0 gave (0.004, 0.378) and seed 1 gave (0.322, 0.000),
for means (0.163, 0.189). It is both below the gate and strongly seed-
dependent, so it is rejected. Its Slurm FAILED state has the same post-report
auxiliary-filename cause as job 6612. The later one-shot, repeated, zero-
entropy, and annealed global-observation controls all failed as documented
above. Only the local-observation IPPO profile cleared its random baseline and
gate, and it is now in long validation job 6768.
For each completed pair, record per-seed and mean p_hat, confidence
intervals, wall time, and the highest agent probability. A pass only advances
to long validation if the objective is also legitimate under the assumptions
in assumptions.md.