feat: refactor AlgorithmicEvaluator to stateless, add game engine module and holdem_sim CLI

- Refactor AlgorithmicEvaluator from stateful Arc<Evaluator> wrapper to
  pure stateless evaluator with zero-allocation construction
- Extract shared evaluation logic into pub(crate) methods, eliminating
  ~220 lines of duplicated code from Evaluator
- Add game module: table, hand runner, tournament, bots, config, stats
- Add holdem_sim CLI binary crate for running simulations
- Convert MathEvaluator to thread-safe singleton with Arc<Inner> pattern
- Replace heap-allocated combination generation with const-generics
  stack-based approach in AlgorithmicEvaluator::evaluate_n_card_hand
- Add thiserror 2 dependency for GameError derive
- Update docs: README, ACHIEVEMENTS, ROADMAP
This commit is contained in:
Jan-Peter von Hunnius 2026-05-18 15:12:34 +02:00
parent dd605e8a66
commit 17d0440c86
43 changed files with 12329 additions and 494 deletions

View file

@ -0,0 +1,24 @@
[game]
game_type = "Cash"
num_seats = 6
small_blind = 10
big_blind = 20
ante = 0
starting_chips = 10000
num_hands = 1000
[game.bet_limit]
type = "no_limit"
min_raise = 20
[[game.bots]]
bot_type = "call_bot"
name = "Alice"
[[game.bots]]
bot_type = "fold_bot"
name = "Bob"
[[game.bots]]
bot_type = "random_bot"
name = "Charlie"

View file

@ -0,0 +1,18 @@
[game]
game_type = "MultiTableTournament"
num_seats = 9
num_tables = 3
small_blind = 10
big_blind = 20
starting_chips = 10000
buy_in = 5000
hands_per_level = 10
num_blind_levels = 20
[game.bet_limit]
type = "no_limit"
min_raise = 20
[output]
log_hands = true
log_actions = true

View file

@ -0,0 +1,21 @@
[game]
game_type = "SitAndGo"
num_seats = 9
small_blind = 10
big_blind = 20
starting_chips = 5000
buy_in = 1000
hands_per_level = 10
num_blind_levels = 15
[game.bet_limit]
type = "no_limit"
min_raise = 20
[[game.bots]]
bot_type = "call_bot"
name = "Bot 1"
[[game.bots]]
bot_type = "fold_bot"
name = "Bot 2"