Add timing output.
This commit is contained in:
parent
79c8b0c710
commit
29450a1c65
2 changed files with 24 additions and 7 deletions
|
|
@ -19,7 +19,7 @@ fn main() {
|
||||||
|
|
||||||
dbg!(&p);
|
dbg!(&p);
|
||||||
|
|
||||||
let mut g = GeneticAlgorithm::new(&p, 40, 5, 5, &mut rng);
|
let mut g = GeneticAlgorithm::new(&p, 20, 2, 0, &mut rng);
|
||||||
|
|
||||||
for i in 0..100 {
|
for i in 0..100 {
|
||||||
println!("Generatrion {i}");
|
println!("Generatrion {i}");
|
||||||
|
|
|
||||||
|
|
@ -28,15 +28,26 @@ impl<'a> GeneticAlgorithm<'a> {
|
||||||
) -> GeneticAlgorithm<'a> {
|
) -> GeneticAlgorithm<'a> {
|
||||||
let mut population = Vec::new();
|
let mut population = Vec::new();
|
||||||
|
|
||||||
|
let start = Instant::now();
|
||||||
|
|
||||||
|
let mut count: usize = 0;
|
||||||
|
|
||||||
while population.len() < population_size {
|
while population.len() < population_size {
|
||||||
|
count += 1;
|
||||||
if let Some(p) = PathLayout::new(Layout::new(problem, rng)) {
|
if let Some(p) = PathLayout::new(Layout::new(problem, rng)) {
|
||||||
population.push(p);
|
population.push(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
println!("Layouts accepted: {}/{}", population_size, count);
|
||||||
|
|
||||||
population.sort_by_key(|p| p.score());
|
population.sort_by_key(|p| p.score());
|
||||||
|
|
||||||
println!("Best score: {}", population[0].score());
|
println!(
|
||||||
|
"Best score: {}. Time: {:.2}s",
|
||||||
|
population[0].score(),
|
||||||
|
start.elapsed().as_secs_f32()
|
||||||
|
);
|
||||||
population[0].print_visualization();
|
population[0].print_visualization();
|
||||||
|
|
||||||
GeneticAlgorithm {
|
GeneticAlgorithm {
|
||||||
|
|
@ -49,6 +60,7 @@ impl<'a> GeneticAlgorithm<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn generation<R: Rng + ?Sized>(&mut self, rng: &mut R) {
|
pub fn generation<R: Rng + ?Sized>(&mut self, rng: &mut R) {
|
||||||
|
let start_new = Instant::now();
|
||||||
for i in self.population_keep..(self.population_keep + self.population_new) {
|
for i in self.population_keep..(self.population_keep + self.population_new) {
|
||||||
loop {
|
loop {
|
||||||
if let Some(p) = PathLayout::new(Layout::new(self.problem, rng)) {
|
if let Some(p) = PathLayout::new(Layout::new(self.problem, rng)) {
|
||||||
|
|
@ -58,6 +70,9 @@ impl<'a> GeneticAlgorithm<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let duration_new = start_new.elapsed();
|
||||||
|
let start_mutate = Instant::now();
|
||||||
|
|
||||||
for i in (self.population_keep + self.population_new)..self.population_size {
|
for i in (self.population_keep + self.population_new)..self.population_size {
|
||||||
let j = i - (self.population_keep + self.population_new);
|
let j = i - (self.population_keep + self.population_new);
|
||||||
loop {
|
loop {
|
||||||
|
|
@ -69,9 +84,15 @@ impl<'a> GeneticAlgorithm<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
let duration_mutate = start_mutate.elapsed();
|
||||||
|
|
||||||
self.population.sort_by_key(|p| p.score());
|
self.population.sort_by_key(|p| p.score());
|
||||||
println!("Best score: {}", self.population[0].score());
|
println!(
|
||||||
|
"Best score: {}. Time new: {:.2}s. Time mutate: {:.2}s",
|
||||||
|
self.population[0].score(),
|
||||||
|
duration_new.as_secs_f32(),
|
||||||
|
duration_mutate.as_secs_f32()
|
||||||
|
);
|
||||||
self.population[0].print_visualization();
|
self.population[0].print_visualization();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -131,14 +152,10 @@ impl<'a> PathLayout<'a> {
|
||||||
pub fn new(layout: Layout<'a>) -> Option<PathLayout<'a>> {
|
pub fn new(layout: Layout<'a>) -> Option<PathLayout<'a>> {
|
||||||
let mut p = crate::belt_finding::Problem::from_layout(&layout);
|
let mut p = crate::belt_finding::Problem::from_layout(&layout);
|
||||||
|
|
||||||
// let start = std::time::Instant::now();
|
|
||||||
|
|
||||||
if !p.find_path() {
|
if !p.find_path() {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
// println!("Find Path: {:.2}", start.elapsed().as_secs_f32());
|
|
||||||
|
|
||||||
let mut c = ConflictAvoidance::new(&p);
|
let mut c = ConflictAvoidance::new(&p);
|
||||||
|
|
||||||
let start = std::time::Instant::now();
|
let start = std::time::Instant::now();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue