69 lines
1.1 KiB
C
69 lines
1.1 KiB
C
|
|
||
|
|
||
|
|
||
|
//
|
||
|
#pragma once
|
||
|
|
||
|
|
||
|
//
|
||
|
#include <vector>
|
||
|
#include <mutex>
|
||
|
#include <memory>
|
||
|
|
||
|
|
||
|
//
|
||
|
namespace BitEvolver
|
||
|
{
|
||
|
//
|
||
|
class RouletteWheel
|
||
|
{
|
||
|
//
|
||
|
public:
|
||
|
|
||
|
//
|
||
|
RouletteWheel();
|
||
|
|
||
|
//
|
||
|
void Reset();
|
||
|
|
||
|
//
|
||
|
void ClearChromosomes();
|
||
|
void SetChromosomes(std::vector<std::shared_ptr<class Chromosome>> _chromosomes);
|
||
|
void AddChromosome(std::shared_ptr<class Chromosome> _chromosome);
|
||
|
void AddChromosomes(std::vector<std::shared_ptr<class Chromosome>> _chromosomes);
|
||
|
|
||
|
//
|
||
|
std::shared_ptr<Chromosome> Spin();
|
||
|
|
||
|
//
|
||
|
private:
|
||
|
|
||
|
//
|
||
|
std::shared_ptr<class Random> random;
|
||
|
|
||
|
//
|
||
|
std::vector<std::shared_ptr<class Chromosome>> chromosomes;
|
||
|
std::recursive_mutex chromosomes_mutex;
|
||
|
bool chromosomes_need_sorting;
|
||
|
//
|
||
|
std::vector<std::pair<double,std::shared_ptr<class Chromosome>>> wheel_slots;
|
||
|
bool slots_need_population;
|
||
|
|
||
|
|
||
|
//
|
||
|
void Instantiate();
|
||
|
|
||
|
//
|
||
|
std::vector<std::pair<double, std::shared_ptr<class Chromosome>>> GetNormalizedChromosomeFitness();
|
||
|
void SortChromosomes();
|
||
|
void PopulateSlots();
|
||
|
|
||
|
//
|
||
|
void ChromosomesChanged();
|
||
|
|
||
|
};
|
||
|
};
|
||
|
|
||
|
|
||
|
|