# Real Battle Scoring Experiments

> Superseded: these results were generated before the simulator preserved explicit zero-size
> battalion slots. Saved-game configs with empty slots could therefore receive extra full-capacity
> units. Regenerate this subset after the zero-size battalion fix before comparing scoring changes.

These experiments use real battle creation payloads from `game_389ffb1901903118.zip`.
The extractor target converts each saved `new_battle_proto` plus the nearest prior Eagle
`GameState` snapshot into an AI battle simulator config, preserving:

- Shardok map name
- Player attacker/defender roles
- Real battalion type, size, training, and armament
- Real hero profession and stats
- Saved starting position indexes when present

The saved DB contains 40 `new_battle_proto` rows. This subset uses 8 battles chosen to cover
small, medium, large, attacker-favored, defender-favored, and near-even initial troop counts.
Rows where a side had no recoverable battalion troops in the prior snapshot were excluded.

All runs used `max_rounds = 20`, `random_seed = 1`, AI setup placement, and forced commands.

## Runtime

A large balanced real battle (`389ffb1901903118_7_5cf74e0`, 5 attacker units vs 6 defender
units) took 31.9 seconds for one baseline run. The 8-battle baseline subset took about 3.5
minutes, and the 8-battle normalized-attacker subset took about 4.3 minutes.

Estimated runtime for all 40 real battles:

- Baseline only: about 18-25 minutes
- Baseline plus one attacker scoring variant: about 40-50 minutes
- Baseline plus two attacker scoring variants: about 60-75 minutes

## Baseline: `STANDARD` Attacker vs `STANDARD` Defender

- Attacker wins: 1 / 8
- Defender wins: 6 / 8
- Draw/incomplete at max-round cutoff: 1 / 8
- Attacker win rate, excluding draws: 14.3%

Raw rows are recorded in `real_battle_standard_baseline_subset.csv`.

## Candidate: `NORMALIZED` Attacker vs `STANDARD` Defender

- Attacker wins: 0 / 8
- Defender wins: 5 / 8
- Draw/incomplete at max-round cutoff: 3 / 8
- Attacker win rate, excluding draws: 0%

Compared with baseline, normalized attacker converted:

- Battle `306`: baseline draw to defender win
- Battle `307`: baseline defender win to draw
- Battle `6408`: baseline attacker win to draw
- Battle `12765`: baseline defender win to draw

This is worse by direct win rate on the real subset. It may be making the attacker less decisive
rather than stronger.

## Candidate Raw Rows

```csv
shardok_game_id,action_seq,attacker_units,defender_units,attacker_initial_troops,defender_initial_troops,attacker_scoring,defender_scoring,winner,end_reason,total_rounds,total_commands,attacker_ai_commands,defender_ai_commands,attacker_avg_depth,defender_avg_depth,attacker_surviving_units,defender_surviving_units,attacker_surviving_troops,defender_surviving_troops
389ffb1901903118_1_b3e7d8ab,306,2,3,1600,2600,NORMALIZED,STANDARD,defender,last_player_standing,9,71,13,35,2.61538,4.08571,0,2,0,1563
389ffb1901903118_2_bf499d3c,307,2,1,1600,1000,NORMALIZED,STANDARD,draw,draw,21,85,40,20,2.40000,2.00000,1,1,800,1000
389ffb1901903118_7_5cf74e0,2437,5,6,3766,3787,NORMALIZED,STANDARD,defender,last_player_standing,14,187,41,121,2.70732,3.87603,0,6,0,3525
389ffb1901903118_10_c972d3e1,6408,5,2,4169,1223,NORMALIZED,STANDARD,draw,draw,21,196,126,47,3.46825,3.38298,3,2,2400,851
389ffb1901903118_11_e0611233,6705,5,5,3510,4400,NORMALIZED,STANDARD,defender,last_player_standing,7,67,20,30,3.45000,3.96667,0,5,0,3911
389ffb1901903118_16_3d6ec341,9975,5,11,4049,9110,NORMALIZED,STANDARD,defender,last_player_standing,19,450,37,377,2.70270,3.01592,0,11,0,6868
389ffb1901903118_21_c536f279,11754,3,3,2470,2400,NORMALIZED,STANDARD,defender,last_player_standing,8,65,23,26,3.30435,4.07692,0,3,0,1516
389ffb1901903118_27_c008989b,12765,2,2,1800,1800,NORMALIZED,STANDARD,draw,draw,21,91,45,20,2.33333,2.90000,1,2,1000,1800
```
