66 lines
1.4 KiB
Rust
66 lines
1.4 KiB
Rust
use clap::Parser;
|
|
|
|
#[derive(Parser)]
|
|
struct Args {
|
|
/// Number of threads
|
|
#[arg(short, long, default_value_t = 2)]
|
|
nt: usize,
|
|
|
|
/// DNA strand size (increases search space)
|
|
#[arg(short, long, default_value_t = 1024)]
|
|
ds: usize,
|
|
|
|
/// Population size
|
|
#[arg(long, default_value_t = 1024)]
|
|
ps: usize,
|
|
|
|
/// Elite population max size
|
|
#[arg(short, long, default_value_t = 128)]
|
|
em: usize,
|
|
|
|
/// Maximum mutation length
|
|
#[arg(short, long, default_value_t = 32)]
|
|
mt: usize,
|
|
|
|
/// Maximum ratio for crossover reproduction
|
|
#[arg(long, default_value_t = 341)]
|
|
cr: usize,
|
|
|
|
/// Maximum generations until next iteration
|
|
#[arg(long, default_value_t = 1048576)]
|
|
gm: usize,
|
|
|
|
/// Generation iteration depth
|
|
#[arg(long, default_value_t = 1)]
|
|
gd: usize,
|
|
|
|
/// Print map for each generation
|
|
#[arg(short, default_value_t = false)]
|
|
verbose: bool,
|
|
|
|
/// Run-length encoded map
|
|
map: Option<String>,
|
|
}
|
|
|
|
fn main() {
|
|
let args = Args::parse();
|
|
|
|
if let Err(e) = bano::run(
|
|
bano::Config {
|
|
num_threads: args.nt,
|
|
dna_size: args.ds,
|
|
pop_size: args.ps,
|
|
epop_max: args.em,
|
|
mut_max: args.mt,
|
|
gen_max: args.gm,
|
|
gen_depth: args.gd,
|
|
cross_ratio: args.cr,
|
|
map_output: args.verbose,
|
|
},
|
|
args.map,
|
|
) {
|
|
eprintln!("error: {e}");
|
|
std::process::exit(1);
|
|
}
|
|
}
|