2018-04-13 23:59:20 -07:00
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
namespace BitEvolver
|
|
|
|
{
|
|
|
|
//
|
|
|
|
class Breeder
|
|
|
|
{
|
|
|
|
//
|
|
|
|
public:
|
|
|
|
|
|
|
|
//
|
|
|
|
Breeder(std::shared_ptr<class Random> _random);
|
|
|
|
|
|
|
|
//
|
|
|
|
std::shared_ptr<class Chromosome> Breed(
|
|
|
|
std::shared_ptr<class Chromosome> mama,
|
|
|
|
std::shared_ptr<class Chromosome> papa,
|
2018-04-14 01:07:56 -07:00
|
|
|
Enums::CrossoverType crossover_type,
|
2018-04-13 23:59:20 -07:00
|
|
|
double crossover_rate,
|
|
|
|
double mutation_rate
|
|
|
|
);
|
|
|
|
|
|
|
|
//
|
|
|
|
void Mutate(std::shared_ptr<class Chromosome> chromosome, double mutation_rate);
|
|
|
|
|
|
|
|
//
|
|
|
|
private:
|
|
|
|
|
|
|
|
//
|
|
|
|
std::shared_ptr<class Random> random;
|
|
|
|
|
|
|
|
//
|
|
|
|
int PickRandomCrossoverPoint(std::shared_ptr<class Chromosome> chromosome, double crossover_rate);
|
2018-04-14 01:07:56 -07:00
|
|
|
void ApplyCrossover(
|
|
|
|
std::shared_ptr<class Chromosome> kiddo,
|
|
|
|
std::shared_ptr<class Chromosome> parent,
|
|
|
|
Enums::CrossoverType crossover_type,
|
|
|
|
double crossover_rate
|
|
|
|
);
|
2018-04-13 23:59:20 -07:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|