91 lines
3.4 KiB
C++
91 lines
3.4 KiB
C++
#pragma once
|
||
#include <list>
|
||
#include <vector>
|
||
#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<Individual*> individs;
|
||
|
||
public:
|
||
AsexualPopulation(const std::vector<Individual*>& _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<Individual*> males;
|
||
std::list<Individual*> females;
|
||
public:
|
||
BisexualPopulation(const std::list<Individual*>& _males,
|
||
const std::list<Individual*>& _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);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
static std::string mutualMigration(BisexualPopulation* p1, BisexualPopulation* p2, float frac1, float frac2 = -1.f);
|
||
BisexualPopulation* createSubpopulation(float frac);
|
||
};
|