Convenience: Can now evaluate a lambda for fitness on every chromosome, using threads

This commit is contained in:
2018-04-14 04:10:31 -07:00
parent 4f1522ff43
commit b256a47cde
2 changed files with 90 additions and 1 deletions

View File

@ -12,6 +12,7 @@
#include <memory>
#include <vector>
#include <mutex>
#include <functional>
//
@ -55,6 +56,9 @@ namespace BitEvolver
void SetMutationRate(double r);
double GetMutationRate();
//
void EvaluateFitness(std::function<double(std::shared_ptr<Chromosome>)> evaluation_callback);
//
void Evolve();
int GetEvolutionNumber();
@ -90,7 +94,11 @@ namespace BitEvolver
std::shared_ptr<class RouletteWheel> roulette_wheel;
//
std::mutex breed_mutex;
std::recursive_mutex
population_modification_mutex,
breed_mutex,
evaluate_fitness_mutex
;
//
void InitRandomGenerator();
@ -104,6 +112,12 @@ namespace BitEvolver
void BreedNewPopulation(std::shared_ptr<std::vector<std::shared_ptr<Chromosome>>> population_new, int size);
void BreedNewPopulation_Thread(std::shared_ptr<std::vector<std::shared_ptr<Chromosome>>> population_new, int size);
//
void EvaluateFitness_Thread(
std::shared_ptr<std::vector<std::shared_ptr<Chromosome>>> _chromosomes,
std::function<double(std::shared_ptr<Chromosome>)> evaluation_callback
);
//
std::shared_ptr<Chromosome> BreedChild();