로스트 시티 클래식 코어 이식
맥락: - 새 레포의 첫 범위를 RL 없는 Lost Cities classic 게임 구현으로 잡았다. - 기존 tier0-3 실험 축은 제거하고 classic 5-expedition 룰을 기본값으로 둔다. 변경: - games/classic 아래에 Cython 게임 엔진, env, bots, backend 경계, Rust core와 proto schema를 이식했다. - setuptools/Cython 빌드 설정과 package data, README, classic port notes를 추가했다. - 룰, 점수, 마스크, env, canonical state, bot, Rust parity 테스트를 새 경로로 가져왔다. 확인: - uv run pytest tests/games/classic - uv run lost-cities-classic
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
# Classic Port Notes
|
||||
|
||||
This repository starts as a focused extraction of the Lost Cities game from the
|
||||
legacy `coolrl` repository. The first target is the classic two-player card
|
||||
game, without the earlier training-oriented tiers.
|
||||
|
||||
## Current Direction
|
||||
|
||||
- Implement the classic Lost Cities rules first.
|
||||
- Treat classic as the initial concrete game under `coolrl_lost_cities.games`.
|
||||
- Do not carry over `tier0` through `tier3`; those were useful for experiments,
|
||||
but they should not shape the first public game API.
|
||||
- Keep backend selection available. The Python/Cython and Rust implementations
|
||||
should remain swappable behind a small backend boundary.
|
||||
- Keep the GUI and Rust implementation in scope for the port.
|
||||
- Keep RL and training code out of the first extraction.
|
||||
|
||||
The expected package shape is roughly:
|
||||
|
||||
```text
|
||||
src/coolrl_lost_cities/
|
||||
games/
|
||||
classic/
|
||||
game.pyx
|
||||
env.py
|
||||
interfaces.py
|
||||
backends/
|
||||
bots/
|
||||
pygame_pvp.py
|
||||
fixtures/
|
||||
assets/
|
||||
docs/
|
||||
rust_core/
|
||||
```
|
||||
|
||||
Tests should live outside the package, roughly under:
|
||||
|
||||
```text
|
||||
tests/games/classic/
|
||||
```
|
||||
|
||||
## Out Of Scope For The First Port
|
||||
|
||||
- Deep CFR
|
||||
- General training infrastructure
|
||||
- Evaluation loops for learned policies
|
||||
- Web client
|
||||
- Legacy experiment configs, checkpoints, logs, exports, and analysis artifacts
|
||||
|
||||
Bot-vs-bot helpers can stay with the classic game if they are useful for smoke
|
||||
tests and local play. Broader policy evaluation can be introduced later with the
|
||||
training layer.
|
||||
|
||||
## Later Training Shape
|
||||
|
||||
If training is added later, it should not make Deep CFR the center of the
|
||||
package. Evaluation and policy interfaces should be general enough for multiple
|
||||
approaches, with Deep CFR as one implementation.
|
||||
|
||||
A possible future shape:
|
||||
|
||||
```text
|
||||
src/coolrl_lost_cities/
|
||||
games/
|
||||
classic/
|
||||
training/
|
||||
policies.py
|
||||
evaluation.py
|
||||
deep_cfr/
|
||||
imitation/
|
||||
policy_gradient/
|
||||
```
|
||||
|
||||
The game package should expose rules, state transitions, legal actions, scoring,
|
||||
backend selection, and playable UI. Training code can adapt those pieces later.
|
||||
|
||||
## Naming Notes
|
||||
|
||||
For now, use `classic` for the five-expedition game. Other variants, such as a
|
||||
six-expedition version, can be added later if needed. The current port should
|
||||
avoid adding a variant registry or broad abstraction before there is a second
|
||||
concrete game to support.
|
||||
Reference in New Issue
Block a user