1 #ifndef GENETICALGORITHM_H
2 #define GENETICALGORITHM_H
4 #include "NeuralNetConfig.h"
7 #include "NeuralNetDataSet.h"
11 #include "InputNormaliser.h"
17 class InputNormaliser;
35 const double crossoverRate=0.7);
37 void setNumberOfEliteGenomes(
const int n)
38 { _numberOfEliteCrossGenerationGenomes = n;}
39 void setEliteGenomeReplicationCount(
const int count);
41 void evaluatePopulationFitness(
const std::vector<double> &inputValues,
42 const std::vector<double> &desiredOutput);
44 const NeuralNet::InputNormalisationSelect normaliseTrainingData=NeuralNet::PassthroughNormalised);
45 void batchTrain(
const int numberOfEpochs,
const NeuralNetDataSet &dataSet,
const std::vector<InputNormaliser *> &inputNormalisers);
46 void setProgressPrintoutFrequency(
const int frequency) {_progressPrintoutFrequency = frequency;}
47 void setMaximumGenomeFitness(
const double fitness) {_maxGenomeFitness = fitness;}
48 std::vector<double> getTrainingErrorValuesPerEpoch()
const {
return _savedEpochErrorValues;}
51 void trainWithDataSet(
const int numberOfEpochs,
const NeuralNetDataSet &dataSet);
54 double totalPopulationFitness();
55 int pickGenomeByRoulette();
56 void addEliteGenomesToNextGeneration(std::vector<Genome *> &nextGen);
57 virtual double calculateGenomeFitness(
const double error);
64 std::vector<Genome *> _thePopulation;
66 int _numberOfEvaluations;
71 int _numberOfEliteCrossGenerationGenomes;
74 int _numberOfCopiesOfEliteGenomes;
76 int _progressPrintoutFrequency;
77 double _maxGenomeFitness;
78 std::vector<double> _savedEpochErrorValues;