reduce size of ints that represent value

This commit is contained in:
Simon Gardling 2025-03-06 15:39:40 -05:00
parent 38ada710d9
commit 945ec934f5
Signed by: titaniumtown
GPG Key ID: 9AB28AC10ECE533D
3 changed files with 11 additions and 11 deletions

View File

@ -1,9 +1,9 @@
use crate::repr::{Board, Piece, PosMap};
pub struct BoardValueMap(PosMap<i64>);
pub struct BoardValueMap(PosMap<i16>);
impl BoardValueMap {
pub fn board_value(&self, board: &Board, color: Piece) -> i64 {
pub fn board_value(&self, board: &Board, color: Piece) -> i16 {
Board::all_positions()
.filter_map(|coord| board.get(coord).map(|p| (coord, p)))
.map(|(coord, pos_p)| (*self.0.get(coord), pos_p))
@ -20,7 +20,7 @@ impl BoardValueMap {
/// Weights from: https://repub.eur.nl/pub/7142/ei2005-47.pdf
pub fn new() -> Self {
const POSITION_VALUES: [[i64; 8]; 8] = [
const POSITION_VALUES: [[i16; 8]; 8] = [
[100, -20, 10, 5, 5, 10, -20, 100],
[-20, -50, -2, -2, -2, -2, -50, -20],
[10, -2, -1, -1, -1, -1, -2, 10],

View File

@ -277,8 +277,8 @@ impl FutureMoves {
let children_value = match self.config.children_eval_method {
ChildrenEvalMethod::Average => children_values
.into_iter()
.sum::<i128>()
.checked_div(self.arena[idx].children.len() as i128),
.sum::<i32>()
.checked_div(self.arena[idx].children.len() as i32),
ChildrenEvalMethod::Max => children_values.into_iter().max(),
ChildrenEvalMethod::Min => children_values.into_iter().min(),
}
@ -288,7 +288,7 @@ impl FutureMoves {
// we should really setup some sort of ELO rating for each commit, playing them against
// each other or something, could be cool to benchmark these more subjective things, not
// just performance (cycles/time wise)
self.arena[idx].value = Some(self.arena[idx].self_value as i128 + children_value);
self.arena[idx].value = Some(self.arena[idx].self_value as i32 + children_value);
}
}
}

View File

@ -23,10 +23,10 @@ pub struct Move {
pub tried_children: bool,
/// Value of this move (including children)
pub value: Option<i128>,
pub value: Option<i32>,
/// What is the inherit value of this move (not including children)
pub self_value: i64,
pub self_value: i16,
/// Which color made a move on this move?
pub color: Piece,
@ -55,15 +55,15 @@ impl Move {
m
}
fn compute_self_value(&self, agent_color: Piece) -> i64 {
fn compute_self_value(&self, agent_color: Piece) -> i16 {
if self.winner == Winner::Player(!agent_color) {
// if this board results in the opponent winning, MAJORLY negatively weigh this move
// NOTE! this branch isn't completely deleted because if so, the bot wouldn't make a move.
// We shouldn't prune branches because we still need to always react to the opponent's moves
return i64::MIN + 1;
return i16::MIN + 1;
} else if self.winner == Winner::Player(agent_color) {
// results in a win for the agent
return i64::MAX - 1;
return i16::MAX - 1;
}
// else if self.winner == Winner::Tie {
// // idk what a Tie should be valued?