#pragma once #include #include #include "../individual/AbstractIndividual.h" #include "BreedingStrategies/PopulationBreedingStrategy.h" #include "../environment/AbstractEnvironment.h" class PopulationBreedingStrategy; class Population { friend class PopulationBreedingStrategy; friend class VerhulstBreedingStrategy; protected: PopulationBreedingStrategy* breedingStrategy; Region* region; public: Population(PopulationBreedingStrategy* _strategy) : breedingStrategy(_strategy){} virtual ~Population() {}; virtual void setBreedingStrategy(PopulationBreedingStrategy* _strategy) { breedingStrategy = _strategy;} virtual void setRegion(Region* _region) { region = _region;} virtual void calculateFitnessAll() = 0; virtual void breedAll() = 0; virtual void selectionAll() = 0; virtual void mutationAll() = 0; virtual std::string getSatistics() = 0; virtual void putGeneticStatisticsToStream(std::ostream& out) = 0; virtual void putGeneticSimpleStatisticsToStream(std::ostream& out) = 0; virtual void putGeneticMaxModuleStatisticsToStream(std::ostream& out) = 0; }; class AsexualPopulation : public Population { friend class PopulationBreedingStrategy; friend class VerhulstBreedingStrategy; friend class InOutBreedingPopulationBreedingStrategy; friend class KolchShindyalBreedingStrategy; friend class Processor; protected: std::vector individs; public: AsexualPopulation(const std::vector& _inds, PopulationBreedingStrategy* _strategy = 0) : Population(_strategy), individs(_inds) {}; AsexualPopulation(int size, PopulationBreedingStrategy* _strategy = 0); virtual ~AsexualPopulation(); virtual void setRegion(Region* _region); virtual void calculateFitnessAll(); virtual void breedAll(); virtual void selectionAll(); virtual void mutationAll(); virtual std::string getSatistics(); virtual void putGeneticStatisticsToStream(std::ostream& out); virtual void putGeneticSimpleStatisticsToStream(std::ostream& out); virtual void putGeneticMaxModuleStatisticsToStream(std::ostream& out); }; ////////////////////////////////////////////// ////////////////////////////////////////////// ////////////////////////////////////////////// class BisexualPopulation : public Population { friend class NeutralEvolutionBreedingStrategy; friend class DerevyankoReport2014; friend class DerevyankoReport; friend class Settings; friend class DerRep2014Window; friend class DerRepRFBR2013window; protected: std::list males; std::list females; public: BisexualPopulation(const std::list& _males, const std::list& _females, PopulationBreedingStrategy* _strategy = 0) : Population(_strategy), males(_males), females(_females) {} virtual ~BisexualPopulation(); //virtual void setRegion(Region* _region); virtual void calculateFitnessAll(); virtual void breedAll(); virtual void selectionAll(); virtual void mutationAll(); virtual std::string getSatistics(); virtual void putGeneticStatisticsToStream(std::ostream& out); virtual void putGeneticSimpleStatisticsToStream(std::ostream& out); virtual void putGeneticMaxModuleStatisticsToStream(std::ostream& out); // Временно - для отчёта по Деревянко static std::string mutualMigration(BisexualPopulation* p1, BisexualPopulation* p2, float frac1, float frac2 = -1.f); BisexualPopulation* createSubpopulation(float frac); };