Artifacts¶
Generated data lives under exports/ and is intentionally not versioned. The
environment registry supplies the canonical root.
exports/<family>/<environment>/
exports/<family>/<environment>/<n_agents>/ # Gathering, Pursuit, Congestion
Examples:
Common Layout¶
<root>/
├── wm/
│ ├── D.pkl
│ ├── legal_joint_graph.pkl
│ ├── legal_joint_graph.metadata.pkl
│ ├── world_model.pt
│ ├── env_transition_graph.pkl
│ ├── models.pkl
│ ├── wm_history.pkl
│ └── wm_report.txt
├── om/
│ ├── iop_stack.pt
│ ├── policy_after_imagination.pt
│ └── *_report.{json,txt}
├── shield/
│ ├── transition_shield_bundle.pkl
│ └── *_report.{json,txt}
├── true_shield/
│ ├── true_transition_graph.pkl
│ ├── true_transition_graph.metadata.pkl
│ └── exact_anytime/
│ ├── certificate.pkl
│ └── report.json
├── experiments/
│ ├── histories/*.pkl
│ ├── tables/*.csv.gz
│ ├── metrics/*.{json,csv.gz}
│ ├── diagnostics/*.{json,txt}
│ ├── checkpoints/*.pkl
│ ├── manifests/*.json
│ ├── traces/*.jsonl.gz
│ ├── runs/<tag>/...
│ └── *.png
├── timings.json
└── timings_hardware.json
Not every run creates every file. Baseline-only experiments do not need model or shield artifacts, and exact/learned graph outputs may be absent when a stage has not completed.
Cache Validity¶
Legal and true-transition graph caches have metadata sidecars. Learned shield bundles package metadata with the pickle. Identity checks cover relevant source semantics, environment dimensions, builder parameters, artifact modification metadata, focal agent, and value-iteration settings. Rebuild upstream artifacts after changing agent count, state layout, action semantics, safety labels, or graph construction.
The exact_anytime/ pair is created only by the opt-in arbitrary-opponent
diagnostic. report.json is the portable paper-facing summary;
certificate.pkl contains the checked state values, exact robust action risks,
and worst-case opponent witnesses used by the strict runtime wrapper.
Histories and Figures¶
Canonical algorithm histories live in experiments/histories/ with names such
as ippo_histories.pkl and ippo_shielded_histories.pkl. Loaders still accept
some older flat history paths, but new exports use the subfolder.
The normal figure set includes cumulative and episodic views, post-WM timeline
variants, no-legend copies, shield telemetry, Bayesian opponent-level views,
and structured per-metric episode graphs. Separate legend assets live under
exports/legends/.
Every completed algorithm condition also writes compressed episode tables,
optimizer/update metrics, aggregate JSON/text diagnostics, final checkpoints,
and a manifest. The manifest is published last, so report readers do not treat
partially written condition artifacts as complete. Raw trace files appear only
when verbose_data=true.
Tagged Campaigns and Reports¶
Setting experiment_tag redirects histories, diagnostics, checkpoints,
manifests, and timings to experiments/runs/<normalized-tag>/. It does not
overwrite the corresponding canonical stage outputs. Notebook-level aggregate
plots still use the ordinary experiments/ plot paths, so concurrent tagged
jobs for one environment can replace those derived images. Non-default shield
action/opponent/reward conditions receive stable filename suffixes in either
layout.
scripts/summarize_evaluation.py <tag> discovers tagged runs across export
roots and writes the cross-environment summary to exports/reports/<tag>/.
Only conditions with their final manifest are counted as complete.
Timing Sidecars¶
timings.json stores stage totals and per-run entries. Each entry references a
deduplicated hardware record in timings_hardware.json. Hardware describes the
resources available to the process: CPU affinity/scheduler allocation, enforced
memory limit, and visible GPUs—not the whole physical cluster node.
Writers use per-file locks, merge stage keys with the latest file, and replace the JSON atomically so concurrent algorithm jobs do not discard one another’s records.