28 #include "neuralNet/Neural Network v2/neuralNetwork.h"
38 this->numInputs=config.getintvalue(
"numberOfStates");
39 this->numOutputs=config.getintvalue(
"numberOfActions");
40 int numHidden = config.getintvalue(
"numberHidden");
41 assert(numOutputs > 0);
42 cout<<
"creating NN"<<endl;
44 nn =
new neuralNetwork(numInputs, numHidden,numOutputs);
47 statelessParameters.resize(numOutputs);
48 for(
int i=0;i<numOutputs;i++)
49 statelessParameters[i]=rand()*1.0/RAND_MAX;
54 NeuroEvoMember::~NeuroEvoMember()
59 void NeuroEvoMember::mutate(std::tr1::ranlux64_base_01 *eng){
60 std::tr1::uniform_real<double> unif(0, 1);
68 this->nn->mutate(eng);
71 double dev = 3.0 / 100.0;
72 std::tr1::normal_distribution<double> normal(0, dev);
73 for(std::size_t i=0;i<statelessParameters.size();i++)
79 double mutAmount = normal(*eng);
81 double newParam= statelessParameters[i] + mutAmount;
83 statelessParameters[i] = 0.0;
84 else if(newParam > 1.0)
85 statelessParameters[i] = 1.0;
87 statelessParameters[i] =newParam;
97 this->nn->copyWeightFrom(otherMember->getNn());
98 this->maxScore=-10000;
99 this->pastScores.clear();
103 this->statelessParameters=otherMember->statelessParameters;
111 this->nn->combineWeights(otherMember1->getNn(), otherMember2->getNn(), eng);
112 this->maxScore=-10000;
113 this->pastScores.clear();
117 std::tr1::uniform_real<double> unif(0, 1);
118 for (
int i = 0; i < numOutputs; i++)
120 if (unif(*eng) > 0.5)
122 this->statelessParameters[i] = otherMember1->statelessParameters[i];
126 this->statelessParameters[i] = otherMember2->statelessParameters[i];
132 void NeuroEvoMember::saveToFile(
const char * outputFilename)
135 this->getNn()->saveWeights(outputFilename);
138 ofstream ss(outputFilename);
139 for(std::size_t i=0;i<statelessParameters.size();i++)
141 ss<<statelessParameters[i];
142 if(i!=statelessParameters.size()-1)
149 void NeuroEvoMember::loadFromFile(
const char * outputFilename)
152 this->getNn()->loadWeights(outputFilename);
156 ifstream ss(outputFilename);
168 if(getline ( ss, value,
',' )>0)
171 statelessParameters[i++]=atof(value.c_str());
181 cout <<
"File of name " << outputFilename <<
" does not exist" << std::endl;
182 cout <<
"Try turning learning on in config.ini to generate parameters" << std::endl;
183 throw std::invalid_argument(
"Parameter file does not exist");
Single set of params for NeuroEvolution.