mirror of
https://github.com/nolen777/eagle0.git
synced 2026-07-28 20:55:44 +00:00
3.7 KiB
3.7 KiB
Shardok AI Experiment Tooling Plan
Summary
Build a reusable workflow for Shardok AI battle baselines and scoring experiments. The goal is to turn the current one-off benchmark process into repeatable commands that extract real battles, run baseline and candidate configurations, capture detailed per-command traces, and write comparable reports.
This work starts with the target-aware archery scoring experiment: attacker EXPERIMENTAL against
defender STANDARD.
Key Changes
-
Add simulator trace support to
ai_battle_simulator_main.- New flag:
--trace-jsonl=<path>. - Emit one JSONL row per AI-selected command.
- Include run label, config path, state file, phase, sequence, round, player, side, command type, actor unit, target coords, chosen index, available command count, search depth, commands evaluated, completion reason, forced commands posted afterward, and pre/post side troop totals.
- Keep existing summary output unchanged.
- New flag:
-
Add reusable benchmark tooling under
src/main/cpp/net/eagle0/shardok/ai_battle_simulator/benchmarks/.real_battle_suite.py: shared helpers for readinggame.db, materializing battle/state/result blobs, extracting configs, running simulator binaries, parsing summaries, and collecting real-game metadata.run_real_battle_experiment.py: CLI orchestration for baseline/candidate runs.- Outputs:
summary.csv,comparison.csv,report.md, generated configs, and per-run trace JSONL files.
-
Add a clean EXPERIMENTAL switch for target-aware archery value.
- Use a new experiment id.
- Change only archery-availability scoring.
- Replace the flat archery-possible value with a target-sensitive value based on the best enemy unit value.
- Do not include the previous fear-value change from experiment
27.
Execution Plan
- Create a feature branch from fetched
origin/main. - Commit this plan document first.
- Implement simulator trace output and reusable benchmark tooling.
- Add the target-aware archery-only EXPERIMENTAL switch.
- Run the new tool first on battle
6248, then on the all-40 saved-battle suite if local runtime is acceptable. - Compare baseline attacker
STANDARD/ defenderSTANDARDwith candidate attackerEXPERIMENTAL/ defenderSTANDARD. - Record the results under the existing benchmark results area and call out battle
6248in the generated report. - Push the branch and create a PR after local validation.
Tests
- Build:
bazel build //src/main/cpp/net/eagle0/shardok/ai_battle_simulator:ai_battle_simulator_mainbazel build //src/main/cpp/net/eagle0/shardok/ai_battle_simulator:real_battle_config_extractorbazel build //src/main/cpp/net/eagle0/shardok/ai_battle_simulator:real_battle_smoke_metadata
- Unit/integration:
bazel test //src/test/cpp/net/eagle0/shardok/ai_battle_simulator:ai_battle_simulator_test- Add or extend a simulator test that verifies trace output is created and contains required command fields.
python3 -m py_compileon the new benchmark scripts.
- Validation:
- Run the new tool on battle
6248. - Run the new tool on all 40 battles if feasible locally.
- Run
bazel test //src/test/cpp/...before push if local time allows; otherwise open the PR promptly and continue validation while CI starts.
- Run the new tool on battle
Assumptions
- "Experiment 3" means target-aware archery value from the previous recommendation list.
- The first experiment compares attacker-only candidate behavior against unchanged defender
STANDARD. - JSONL is the trace format because command diagnostics will evolve over time.
- Python benchmark scripts follow the existing executable-script pattern rather than adding Python Bazel targets.