7 KiB
7 KiB
Poker Simulator
Overview
The simulator/ directory contains tools and frameworks for simulating poker games, testing strategies, and analyzing poker scenarios. These tools enable comprehensive testing and development of poker bots and strategies in controlled environments.
Components
Texas Hold'em Simulator (src/texas_holdem/)
Core simulation engine for Texas Hold'em poker games.
Features
- Complete Game Simulation: Full Texas Hold'em game lifecycle
- Multiple Players: Support for 2-10 players per simulation
- Configurable Rules: Customizable game rules and parameters
- Hand Range Support: Define specific hand ranges for testing
- Equity Calculation: Accurate pot odds and equity computation
- Statistical Analysis: Comprehensive results and analytics
Simulation Capabilities
- Hand Range Analysis: Test bots against specific hand ranges
- Monte Carlo Simulation: Run thousands of scenarios for statistical validity
- Tournament Simulation: Multi-table tournament scenarios
- Cash Game Simulation: Ring game format with varying stack sizes
- Heads-Up Simulation: One-on-one bot testing and analysis
Usage
Basic Simulation Setup
use poker_api::api::card::Card;
use poker_api::api::hand::Hand;
// Create a simulation scenario
let mut simulation = TexasHoldemSimulation::new();
// Configure players
simulation.add_player("Bot1", 1000.0);
simulation.add_player("Bot2", 1000.0);
// Set up hand range for testing
simulation.set_player_range(0, "AA,KK,QQ,AK".to_string());
// Run simulation
let results = simulation.run(1000); // Run 1000 hands
println!("Results: {:?}", results);
Advanced Simulation
// Configure detailed simulation parameters
let config = SimulationConfig {
num_players: 6,
starting_stack: 1000.0,
blind_levels: vec![
BlindLevel { small_blind: 10.0, big_blind: 20.0, duration_minutes: 10 },
BlindLevel { small_blind: 15.0, big_blind: 30.0, duration_minutes: 10 },
],
hand_range: "22+,A2+,K2+,Q2+,J2+,T2+,92+,82+,72+,62+,52+,42+,32+".to_string(),
};
let mut tournament = TournamentSimulation::new(config);
tournament.run();
Analysis Tools
Hand Analysis
// Analyze specific hand scenarios
let analyzer = HandAnalyzer::new();
let hole_cards = vec!["As", "Ks"];
let board = vec!["Td", "Jc", "Qh"];
let analysis = analyzer.analyze_hand(hole_cards, board);
println!("Hand strength: {}", analysis.strength);
println!("Equity vs random: {}", analysis.equity_vs_random);
Range Analysis
// Analyze range vs range scenarios
let range_analyzer = RangeAnalyzer::new();
let range1 = "AA,AK, AQ".to_string(); // Premium hands
let range2 = "22+,A2+,K2+".to_string(); // Wide range
let results = range_analyzer.analyze_ranges(range1, range2, board);
println!("Range1 equity: {:.2}%", results.range1_equity);
println!("Range2 equity: {:.2}%", results.range2_equity);
Testing Framework
Bot Testing
use poker_api::simulator::testing::BotTester;
// Create bot tester
let mut tester = BotTester::new();
// Add bots to test
tester.add_bot("AggressiveBot", Box::new(AggressiveBot::new()));
tester.add_bot("TightBot", Box::new(TightBot::new()));
// Define test scenarios
let scenarios = vec![
TestScenario::heads_up(1000),
TestScenario::six_max(500),
TestScenario::full_ring(1000),
];
// Run comprehensive tests
let results = tester.run_scenarios(scenarios);
tester.generate_report("bot_test_results.html");
Strategy Testing
// Test specific strategies
let strategy_tester = StrategyTester::new();
let strategies = vec![
Strategy::new("Tight Aggressive", config_tight_aggressive),
Strategy::new("Loose Passive", config_loose_passive),
Strategy::new("Balanced", config_balanced),
];
let results = strategy_tester.test_strategies(strategies, 10000);
println!("Strategy comparison: {:?}", results);
Performance
Simulation Speed
- Simple Hand: ~1ms per hand simulation
- Complex Analysis: ~10ms per hand with detailed analysis
- Monte Carlo: ~100ms per 1000 scenarios
- Tournament: ~1s per 100-hand tournament
Memory Usage
- Base Simulation: ~1MB per active simulation
- Hand History: ~10KB per 1000 hands stored
- Analysis Data: ~50MB per comprehensive analysis
Configuration
Simulation Parameters
[simulation]
num_players = 6
starting_stack = 1000
num_hands = 10000
save_hand_history = true
[blinds]
small_blind = 10.0
big_blind = 20.0
ante = 0.0
[ranges]
player1 = "AA,KK,QQ,AK"
player2 = "22+,A2+,K2+,Q2+,J2+"
player3 = "random"
[analysis]
detailed_equity = true
save_distributions = true
confidence_interval = 0.95
Custom Scenarios
// Create custom test scenarios
let scenario = SimulationScenario {
name: "Premium vs Fish".to_string(),
players: vec![
PlayerConfig { name: "Pro", range: "AA,KK,QQ,AK,AQ".to_string(), stack: 2000 },
PlayerConfig { name: "Fish", range: "22+,A2+,K2+".to_string(), stack: 500 },
],
board_texture: BoardTexture::Dry, // Flop texture for analysis
num_simulations: 10000,
};
Output and Reporting
Results Format
pub struct SimulationResults {
pub total_hands: usize,
pub player_results: Vec<PlayerResult>,
pub hand_distribution: HashMap<String, usize>,
pub equity_distribution: Vec<f64>,
pub confidence_intervals: Vec<(f64, f64)>,
}
Report Generation
// Generate comprehensive reports
let reporter = SimulationReporter::new();
reporter.add_results(results);
reporter.generate_html_report("simulation_report.html");
reporter.generate_csv_summary("summary.csv");
Integration
The simulator integrates with:
- Core API: Uses hand evaluation and card management
- Bot Framework: Tests bot implementations in controlled environments
- Analysis Tools: Provides data for strategy analysis and improvement
- Log System: Integrates with logging and monitoring tools
Development
Extending the Simulator
Adding New Game Types
// Implement new poker variant
pub struct OmahaSimulation {
// Omaha-specific logic
}
impl PokerSimulation for OmahaSimulation {
fn simulate_hand(&mut self) -> HandResult {
// Omaha simulation logic
}
}
Custom Analysis Modules
// Add custom analysis
pub struct BluffAnalyzer {
// Bluff detection logic
}
impl HandAnalyzer for BluffAnalyzer {
fn analyze(&self, hand: &Hand) -> AnalysisResult {
// Custom analysis logic
}
}
Use Cases
Bot Development
- Test bot strategies against known ranges
- Identify leaks in bot decision-making
- Optimize bot parameters and configurations
Strategy Research
- Analyze range vs range scenarios
- Study board texture effects
- Research optimal bet sizing
Game Theory
- Equilibrium analysis for different stack sizes
- Nash equilibrium calculations
- Exploitability analysis
Performance Testing
- Load testing for poker platforms
- Scalability analysis
- Performance benchmarking