Spaces:
Sleeping
Sleeping
File size: 1,734 Bytes
463f868 9bd4ce5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | use engine_rust::core::heuristics::OriginalHeuristic;
use engine_rust::core::logic::{GameState, Phase};
use engine_rust::core::mcts::{SearchHorizon, MCTS};
use engine_rust::test_helpers::load_real_db;
fn main() {
println!("=== MCTS AI Verification ===");
let db = load_real_db();
// Decks
let p_main: Vec<i32> = db.members.keys().take(50).cloned().collect();
let energy_ids: Vec<i32> = db.energy_db.keys().take(10).cloned().collect();
let mut sim = GameState::default();
sim.initialize_game(
p_main.clone(),
p_main.clone(),
energy_ids.clone(),
energy_ids.clone(),
Vec::new(),
Vec::new(),
);
sim.ui.silent = true;
sim.phase = Phase::Main;
let mut mcts = MCTS::new();
let heuristic = OriginalHeuristic::default();
let mut steps = 0;
while !sim.is_terminal() && steps < 500 {
let (stats, _) = mcts.search(&sim, &db, 200, 0.0, SearchHorizon::GameEnd(), &heuristic);
if stats.is_empty() {
println!("No legal actions! Phase: {:?}", sim.phase);
break;
}
// Take best action
let action = stats[0].0;
let _ = sim.step(&db, action);
if steps % 10 == 0 {
println!(
"Step {}: Phase={:?}, P0 Score={}, P1 Score={}",
steps, sim.phase, sim.players[0].score, sim.players[1].score
);
}
steps += 1;
}
println!("\n=== Final Result ===");
println!("Winner: {}", sim.get_winner());
println!("P0 Score: {}", sim.players[0].score);
println!("P1 Score: {}", sim.players[1].score);
println!("Steps: {}", steps);
} |