28 #include "neuralNet/Neural Network v2/neuralNetwork.h"
38 this->numInputs=config.getintvalue(
"numberOfStates");
39 this->numOutputs=config.getintvalue(
"numberOfActions");
40 assert(numOutputs > 0);
41 cout<<
"creating NN"<<endl;
43 nn =
new neuralNetwork(numInputs,numInputs*2,numOutputs);
46 statelessParameters.resize(numOutputs);
47 for(
int i=0;i<numOutputs;i++)
48 statelessParameters[i]=rand()*1.0/RAND_MAX;
53 NeuroEvoMember::~NeuroEvoMember()
58 void NeuroEvoMember::mutate(std::tr1::ranlux64_base_01 *eng){
59 std::tr1::uniform_real<double> unif(0, 1);
67 this->nn->mutate(eng);
70 double dev = 3.0 / 100.0;
71 std::tr1::normal_distribution<double> normal(0, dev);
72 for(std::size_t i=0;i<statelessParameters.size();i++)
78 double mutAmount = normal(*eng);
80 double newParam= statelessParameters[i] + mutAmount;
82 statelessParameters[i] = 0.0;
83 else if(newParam > 1.0)
84 statelessParameters[i] = 1.0;
86 statelessParameters[i] =newParam;
96 this->nn->copyWeightFrom(otherMember->getNn());
97 this->maxScore=-10000;
98 this->pastScores.clear();
102 this->statelessParameters=otherMember->statelessParameters;
110 this->nn->combineWeights(otherMember1->getNn(), otherMember2->getNn(), eng);
111 this->maxScore=-10000;
112 this->pastScores.clear();
116 std::tr1::uniform_real<double> unif(0, 1);
117 for (
int i = 0; i < numOutputs; i++)
119 if (unif(*eng) > 0.5)
121 this->statelessParameters[i] = otherMember1->statelessParameters[i];
125 this->statelessParameters[i] = otherMember2->statelessParameters[i];
131 void NeuroEvoMember::saveToFile(
const char * outputFilename)
134 this->getNn()->saveWeights(outputFilename);
137 ofstream ss(outputFilename);
138 for(std::size_t i=0;i<statelessParameters.size();i++)
140 ss<<statelessParameters[i];
141 if(i!=statelessParameters.size()-1)
148 void NeuroEvoMember::loadFromFile(
const char * outputFilename)
151 this->getNn()->loadWeights(outputFilename);
155 ifstream ss(outputFilename);
167 if(getline ( ss, value,
',' )>0)
170 statelessParameters[i++]=atof(value.c_str());
180 cout <<
"File of name " << outputFilename <<
" does not exist" << std::endl;
181 cout <<
"Try turning learning on in config.ini to generate parameters" << std::endl;
182 throw std::invalid_argument(
"Parameter file does not exist");
Single set of params for NeuroEvolution.