aboutsummaryrefslogtreecommitdiff
path: root/srchr/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'srchr/src/main.rs')
-rw-r--r--srchr/src/main.rs23
1 files changed, 10 insertions, 13 deletions
diff --git a/srchr/src/main.rs b/srchr/src/main.rs
index 2762646..46ec5d6 100644
--- a/srchr/src/main.rs
+++ b/srchr/src/main.rs
@@ -1,24 +1,21 @@
+mod config;
mod corpus;
+mod evaluation;
mod layout;
+mod output;
use rayon::prelude::*;
use rand::prelude::*;
use rand_pcg::*;
+use config::*;
use corpus::*;
+use evaluation::*;
use layout::*;
use std::time::Instant;
-const NUM_CONTESTANTS: usize = 128;
-const NUM_PERSIST: usize = 8;
-
-// TODO: command line arguments to start at a given layout string, maybe read
-// from file? Might as well make num_contestants and survive_threshold
-// configurable, and number of swaps when generating new layout, and index
-// finger threshold.
-
struct Tournament<'a> {
rngs: Vec<Pcg64>,
top_prelayouts: Vec<(Prelayout, u32)>,
@@ -33,7 +30,7 @@ impl<'a> Tournament<'a> {
}
let mut top_prelayouts: Vec<(Prelayout, u32)> = Vec::new();
- let score = corpus.prelayout_fitness(&seed_prelayout);
+ let score = prelayout_fitness(&corpus, &seed_prelayout);
for _ in 0..NUM_PERSIST {
top_prelayouts.push((seed_prelayout.clone(), score));
}
@@ -55,7 +52,7 @@ impl<'a> Tournament<'a> {
&self.top_prelayouts[rng.gen_range(0..NUM_PERSIST)].0,
&mut rng,
);
- return (layout, self.corpus.prelayout_fitness(&layout));
+ return (layout, prelayout_fitness(&self.corpus, &layout));
})
.collect::<Vec<(Prelayout, u32)>>();
@@ -79,10 +76,10 @@ impl<'a> Tournament<'a> {
}
fn main() {
- let corpus = Corpus::load("books.txt").unwrap();
+ let corpus = Corpus::load(CORPUS_FILE_NAME).unwrap();
println!("{}", corpus);
- let seed_prelayout = Layout::from_verbose("QWERTYUIOPASDFGHJKL'ZXCVBNM,./")
+ let seed_prelayout = Layout::from_verbose(STARTING_LAYOUT_STRING)
.unwrap()
.as_prelayout();
@@ -95,7 +92,7 @@ fn main() {
if let Some(prelayout) = improvement {
let layout = Layout::from_prelayout(&prelayout, &corpus);
- let evl = corpus.evaluate_layout(&layout);
+ let evl = Evaluation::evaluate_layout(&corpus, &layout);
println!("");
println!("================================================================================\n\n{}",
layout