Files
DEC/DEC_GUI/DEC-0.0/population/Population.h
2024-10-03 18:43:04 +07:00

91 lines
3.4 KiB
C++
Raw Blame History

#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);
};