feat(snake): modularize engine and add tournament tools
- Split active strategies, reusable engine code, core classes, and legacy snakes. - Replace implicit snake imports with explicit module registrations. - Extract Prism duel, spatial, and survival behavior into focused mixins. - Improve duel scoring with food races, pressure, caches, and depth metrics. - Add deterministic arena scenarios and paired seeded engine tournaments. - Expand benchmark telemetry and bump Prism to version 1.3.0. - Update documentation and tests for the new package layout and tooling.
This commit is contained in:
@@ -48,7 +48,7 @@ battlesnake play -W 11 -H 11 --name 'Python Starter Project' --url http://localh
|
||||
Continue with the [Battlesnake Quickstart Guide](https://docs.battlesnake.com/quickstart) to customize and improve your Battlesnake's behavior.
|
||||
|
||||
## Included Competitive Snake
|
||||
This repo now includes `snakes/BestBattleSnake.py`, a stronger default snake that combines:
|
||||
This repo retains `snakes/legacy/BestBattleSnake.py`, a stronger historical snake that combines:
|
||||
- collision and head-to-head risk checks
|
||||
- flood-fill space evaluation to avoid traps
|
||||
- food routing that gets more aggressive as health drops
|
||||
@@ -66,12 +66,23 @@ BATTLE_SNAKE_DUEL_STYLE=balanced python main.py
|
||||
|
||||
Allowed values: `safe`, `balanced`, `aggressive`.
|
||||
|
||||
## Snake package layout
|
||||
The snake code is split by responsibility:
|
||||
- `snakes/strategies/` — actively maintained Apex and Prism entry points
|
||||
- `snakes/engine/` — reusable bitboards, spatial mixins, duel search, and survival search
|
||||
- `snakes/core/` — shared base classes
|
||||
- `snakes/legacy/` — historical snakes retained for compatibility and benchmarks
|
||||
|
||||
Snake selection still uses the existing registry names, so deployment values such
|
||||
as `SNAKE=PrismBattleSnake_GPT_5_6_Sol` remain unchanged.
|
||||
|
||||
## PrismBattleSnake_GPT_5_6_Sol
|
||||
`PrismBattleSnake_GPT_5_6_Sol` is a separate snake that keeps Apex's strategy while
|
||||
accelerating hot spatial operations with a Python-integer bitboard engine. It
|
||||
also shares duel transpositions across candidate moves, uses principal-variation
|
||||
ordering and aspiration windows, and runs a compact adversarial multiplayer
|
||||
rollout with simultaneous enemy responses. Its filename, class, and registry
|
||||
ordering, aspiration windows, path-aware food races, and a deeper tactical
|
||||
horizon, and runs a compact adversarial multiplayer rollout with simultaneous
|
||||
enemy responses. Its filename, class, and registry
|
||||
key include the model name, while its public Battlesnake API name remains
|
||||
`PrismBattleSnake`.
|
||||
|
||||
@@ -95,11 +106,24 @@ Run the deterministic CI-friendly arena benchmark without a gameplay database:
|
||||
just bench-snake-arena positions=100
|
||||
```
|
||||
|
||||
It reports latency, reached minimax depth, and move disagreements between Apex
|
||||
and Prism. Add `output=data/arena-report.json` to save a machine-readable report.
|
||||
It rotates through duel, hazard, multiplayer, constrictor, and cramped-endgame
|
||||
positions. It reports latency, completed duel/rollout depth, searched nodes,
|
||||
cache hits, deadline exits, and move disagreements between Apex and Prism. Use
|
||||
`--scenario hazard` (repeatable) when invoking the Python script to isolate a
|
||||
scenario. Add `output=data/arena-report.json` to save a machine-readable report.
|
||||
For representative strategy evaluation, provide recorded positions to
|
||||
`scripts/benchmark_snake_arena.py --database /path/to/gameplay.sqlite3`, then run
|
||||
paired seeded games with the local Battlesnake CLI to measure win rate.
|
||||
`scripts/benchmark_snake_arena.py --database /path/to/gameplay.sqlite3`.
|
||||
|
||||
Run paired seeded games through the official local Battlesnake rules engine:
|
||||
```sh
|
||||
just bench-snake-tournament games=20 gametype=standard map=standard
|
||||
```
|
||||
|
||||
Each seed is played twice with Apex and Prism swapping initial engine slots. The
|
||||
report includes wins, draws, win rates, and average game length. Save all
|
||||
per-game results with `output=data/tournament-report.json`. The tournament starts
|
||||
both snake servers with gameplay persistence disabled, adds the engine identity
|
||||
header required by the API, and shuts them down when finished.
|
||||
|
||||
## Compact gameplay database
|
||||
New gameplay turns use normalized storage: the turn row stores food, hazards,
|
||||
|
||||
Reference in New Issue
Block a user