bitart: Complete builder pattern to allow changing parameters

Change expression depth to 4
This commit is contained in:
Juergen Stuber
2026-04-07 10:01:52 +02:00
parent 70aff62912
commit 78460c7b8e
2 changed files with 28 additions and 6 deletions

View File

@@ -270,11 +270,7 @@ pub struct RandomExpressionBuilder {
depth: usize,
}
impl RandomExpressionBuilder {
pub fn build<R: Rng>(rng: &mut R) -> Expression {
let builder = Self::new();
builder.build_binary(rng, builder.depth)
}
fn new() -> RandomExpressionBuilder {
pub fn new() -> RandomExpressionBuilder {
// Default values
let unary_rate = 0.3;
let variable_rate = 0.5;
@@ -287,6 +283,9 @@ impl RandomExpressionBuilder {
depth,
}
}
pub fn build<R: Rng>(&self, rng: &mut R) -> Expression {
self.build_binary(rng, self.depth)
}
fn build_recursive<R: Rng>(&self, rng: &mut R, depth: usize, left: bool) -> Expression {
if depth == 0 {
self.build_leaf(rng, left)
@@ -315,4 +314,25 @@ impl RandomExpressionBuilder {
let arg1 = self.build_recursive(rng, depth - 1, false);
binary_operation(op, arg0, arg1)
}
#[allow(unused)]
pub fn unary_rate(mut self, unary_rate: f64) -> Self {
self.unary_rate = unary_rate;
self
}
#[allow(unused)]
pub fn variable_rate(mut self, variable_rate: f64) -> Self {
self.variable_rate = variable_rate;
self
}
#[allow(unused)]
pub fn max_literal(mut self, max_literal: i64) -> Self {
self.max_literal = max_literal;
self
}
#[allow(unused)]
pub fn depth(mut self, depth: usize) -> Self {
self.depth = depth;
self
}
}

View File

@@ -118,6 +118,8 @@ fn main() -> std::io::Result<()> {
let mut old_board = Board::with(Color::black(), bbox, |_p| Square::Uncommon);
let mut new_board = Board::with(Color::black(), bbox, |_p| Square::Uncommon);
let builder = RandomExpressionBuilder::new().depth(4);
let mut time_count = frame_time_count;
loop {
if time_count >= frame_time_count {
@@ -129,7 +131,7 @@ fn main() -> std::io::Result<()> {
// Pick a random expression.
loop {
let expression = RandomExpressionBuilder::build(&mut rng);
let expression = builder.build(&mut rng);
let values = Array2d::with(bbox, |p| {
let x = x0 + xk * p.x();
let y = y0 + yk * p.y();