// #pragma once // #include "BitEvolver/Includes.h" // #include #include #include #include // namespace BitEvolver { // class Population { // public: // Population(); // void Reset(); // void ClearPopulation(); void InitRandomPopulation(int _population_size, int _bit_length); void RandomizePopulation(int _bit_length); // void PopulationChanged(); // std::vector> GetChromosomes(); void GetChromosomes(std::shared_ptr>> _chromosomes); std::shared_ptr GetChampion(); // double GetAverageFitness(); double GetAverageFitness(std::vector> _chromosomes); // void SetCrossoverPoint(double p); double GetCrossoverPoint(); void SetCrossoverType(Enums::CrossoverType t); Enums::CrossoverType GetCrossoverType(); // void SetMutationRate(double r); double GetMutationRate(); // void EvaluateFitness(std::function)> evaluation_callback); void EvaluateError(std::function)> evaluation_callback); // void Evolve(); int GetEvolutionNumber(); // void PrintPopulation(); void PrintPopulation(std::vector> _chromosomes); // Constants const static int DEFAULT_POPULATION_SIZE = 100; const static int DEFAULT_MUTATION_RATE = 0.01; // const static Enums::CrossoverType DEFAULT_CROSSOVER_TYPE = Enums::CrossoverType::Sexual; const static int DEFAULT_CROSSOVER_POINT = 0.7; // private: // std::shared_ptr random; std::shared_ptr breeder; // std::vector> chromosomes; int population_size; bool population_needs_sorting; Enums::CrossoverType crossover_type; double crossover_point; double mutation_rate; int evolution_number; // std::shared_ptr roulette_wheel; // std::recursive_mutex population_modification_mutex, breed_mutex, evaluate_fitness_mutex ; // void InitRandomGenerator(); void InitRouletteWheel(); void InitBreeder(); // void EnsureSortedPopulation(); // void BreedNewPopulation(std::shared_ptr>> population_new, int size); void BreedNewPopulation_Thread(std::shared_ptr>> population_new, int size); // void EvaluateFitness_Thread( std::shared_ptr>> _chromosomes, std::function)> evaluation_callback ); void EvaluateError_Thread( std::shared_ptr>> _chromosomes, std::function)> evaluation_callback ); // std::shared_ptr BreedChild(); // int GetThreadCountSuggestion(); }; };