// #pragma once // #include "BitEvolver/Includes.h" // #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 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::mutex breed_mutex; // void InitRandomGenerator(); void InitBreeder(); // void EnsureSortedPopulation(); // void BreedNewPopulation(std::shared_ptr>> population_new, int size); void BreedNewPopulation_Thread(std::shared_ptr>> population_new, int size); // std::shared_ptr BreedChild(); std::shared_ptr PickChromosomeForBreeding(); // int GetThreadCountSuggestion(); }; };