arena size fixes

This commit is contained in:
Simon Gardling 2025-02-27 15:20:54 -05:00
parent 12a6881070
commit 956386fb66
Signed by: titaniumtown
GPG Key ID: 9AB28AC10ECE533D
3 changed files with 17 additions and 12 deletions

View File

@ -13,11 +13,11 @@ pub struct ComplexAgent {
impl ComplexAgent { impl ComplexAgent {
pub const fn new(color: Piece) -> Self { pub const fn new(color: Piece) -> Self {
const CONFIG: FutureMoveConfig = FutureMoveConfig { const CONFIG: FutureMoveConfig = FutureMoveConfig {
max_depth: 13, max_depth: 20,
min_arena_depth_sub: 3, min_arena_depth_sub: 3,
top_k_children: 2, top_k_children: 2,
up_to_minus: 3, up_to_minus: 3,
max_arena_size: 10_000_000, max_arena_size: 50_000_000,
}; };
Self { Self {
color, color,

View File

@ -3,7 +3,7 @@ use crate::{
repr::{Board, Coord, Piece, Winner}, repr::{Board, Coord, Piece, Winner},
}; };
use indicatif::{ProgressIterator, ProgressStyle}; use indicatif::{ProgressIterator, ProgressStyle};
use std::{collections::HashMap, hash::BuildHasherDefault}; use std::{collections::HashMap, hash::BuildHasherDefault, ops::ControlFlow};
pub struct FutureMoves { pub struct FutureMoves {
/// Arena containing all [`Move`] /// Arena containing all [`Move`]
@ -63,11 +63,6 @@ impl FutureMoves {
/// only `pub` for the sake of benchmarking /// only `pub` for the sake of benchmarking
pub fn extend_layers(&mut self) { pub fn extend_layers(&mut self) {
for _ in (self.current_depth + 1)..=self.config.max_depth { for _ in (self.current_depth + 1)..=self.config.max_depth {
if self.arena_len() >= self.config.max_arena_size {
dbg!("extend_layers: early break ({})", self.arena_len());
break;
}
let pstyle_inner = if cfg!(test) { let pstyle_inner = if cfg!(test) {
"" ""
} else { } else {
@ -78,7 +73,7 @@ impl FutureMoves {
) )
}; };
(0..self.arena.len()) let cf = (0..self.arena.len())
// we want to select all nodes that don't have children, or are lazy (need to maybe be regenerated) // we want to select all nodes that don't have children, or are lazy (need to maybe be regenerated)
.filter(|&idx| { .filter(|&idx| {
let got = &self.arena[idx]; let got = &self.arena[idx];
@ -88,13 +83,23 @@ impl FutureMoves {
.collect::<Vec<usize>>() .collect::<Vec<usize>>()
.into_iter() .into_iter()
.progress_with_style(ProgressStyle::with_template(pstyle_inner).unwrap()) .progress_with_style(ProgressStyle::with_template(pstyle_inner).unwrap())
.for_each(|node_idx| { .try_for_each(|node_idx| {
self.generate_children(node_idx).last(); self.generate_children(node_idx).last();
self.arena[node_idx].tried_children = true; self.arena[node_idx].tried_children = true;
if self.arena_len() >= self.config.max_arena_size {
ControlFlow::Break(())
} else {
ControlFlow::Continue(())
}
}); });
self.prune_bad_children(); self.prune_bad_children();
self.current_depth += 1; self.current_depth += 1;
if cf.is_break() {
dbg!("extend_layers: early break ({})", self.arena_len());
return;
}
} }
} }

View File

@ -11,8 +11,8 @@ pub mod repr;
fn main() { fn main() {
let player1 = complexagent::ComplexAgent::new(Piece::Black); let player1 = complexagent::ComplexAgent::new(Piece::Black);
// let player2 = complexagent::ComplexAgent::new(Piece::White); // let player2 = complexagent::ComplexAgent::new(Piece::White);
// let player2 = agent::ManualAgent::new(Piece::White); let player2 = agent::ManualAgent::new(Piece::White);
let player2 = agent::RandomAgent::new(Piece::White); // let player2 = agent::RandomAgent::new(Piece::White);
let mut game = Game::new(Box::new(player1), Box::new(player2)); let mut game = Game::new(Box::new(player1), Box::new(player2));
game.game_loop(); game.game_loop();
} }