feat: add rake, bankroll management, seat randomization, FlockBot & ChumpBot

- Add RakeConfig with percentage-based rake and per-pot cap
- Add bankroll tracking (reset per hand or auto-refill threshold)
- Add seat randomization with seeded RNG for reproducibility
- Add FlockBot (tight-aggressive) and ChumpBot (loose-passive) bots
- Refactor HandRunner: extract finalize_result, compute_chip_movements, credit_winnings
- Add num_raises to GameInfo for authoritative raise counting
- Record SB/BB as Raise actions (Meerkat convention)
- Update all existing bot tests for new GameInfo fields
- Add ARCHITECTURE_RAKE_BANKROLL_SEATS.md documentation
This commit is contained in:
Jan-Peter von Hunnius 2026-05-18 20:44:08 +02:00
parent 17d0440c86
commit 9dfd9c3ee3
20 changed files with 2880 additions and 173 deletions

View file

@ -1,24 +1,63 @@
[game]
game_type = "Cash"
num_seats = 6
num_seats = 10
small_blind = 10
big_blind = 20
ante = 0
starting_chips = 10000
num_hands = 1000
starting_chips = 5000
num_hands = 10000
# Rake configuration (optional, defaults to no rake).
# rake_percentage = 0.05 # 5% rake
# rake_cap = 50 # Max 50 chips rake per pot
# Bankroll management (optional, defaults to disabled).
# reset_bankroll_each_hand = false
# bankroll_refill_threshold = 1000 # Refill when stack <= 1000
# Randomize seat assignments before each hand (optional, defaults to false).
# randomize_seats = true
[game.bet_limit]
type = "no_limit"
min_raise = 20
[[game.bots]]
bot_type = "flock_bot"
name = "FlockBot-1"
[[game.bots]]
bot_type = "chump_bot"
name = "ChumpBot-1"
[[game.bots]]
bot_type = "call_bot"
name = "Alice"
name = "CallBot-1"
[[game.bots]]
bot_type = "fold_bot"
name = "Bob"
name = "FoldBot-1"
[[game.bots]]
bot_type = "raise_bot"
name = "RaiseBot-1"
[[game.bots]]
bot_type = "random_bot"
name = "Charlie"
name = "RandomBot-1"
[[game.bots]]
bot_type = "flock_bot"
name = "FlockBot-2"
[[game.bots]]
bot_type = "chump_bot"
name = "ChumpBot-2"
[[game.bots]]
bot_type = "call_bot"
name = "CallBot-2"
[[game.bots]]
bot_type = "random_bot"
name = "RandomBot-2"