45 unsigned long long rdtsc(){
47 __asm__ __volatile__ (
"rdtsc" :
"=a" (lo),
"=d" (hi));
48 return ((
unsigned long long)hi << 32) | lo;
53 AnnealEvolution::AnnealEvolution(
string suff,
string config) :
61 myconfigdataaa.readFile(config);
62 populationSize=myconfigdataaa.getintvalue(
"populationSize");
63 numberOfElementsToMutate=myconfigdataaa.getintvalue(
"numberOfElementsToMutate");
64 numberOfTestsBetweenGenerations=myconfigdataaa.getintvalue(
"numberOfTestsBetweenGenerations");
65 numberOfControllers=myconfigdataaa.getintvalue(
"numberOfControllers");
66 leniencyCoef=myconfigdataaa.getDoubleValue(
"leniencyCoef");
67 coevolution=myconfigdataaa.getintvalue(
"coevolution");
68 seeded = myconfigdataaa.getintvalue(
"startSeed");
70 bool learning = myconfigdataaa.getintvalue(
"learning");
75 for(
int j=0;j<numberOfControllers;j++)
77 cout<<
"creating Populations"<<endl;
84 for(
int i = 0; i < numberOfControllers; i++)
88 ss<<
"logs/bestParameters-"<<this->suffix<<
"-"<<i<<
".nnw";
89 seededPop->loadFromFile(ss.str().c_str());
94 evolutionLog.open((
"logs/evolution"+suffix+
".csv").c_str(),ios::out);
98 AnnealEvolution::~AnnealEvolution()
102 for(std::size_t i = 0; i < populations.size(); i++)
104 delete populations[i];
110 void AnnealEvolution::mutateEveryController()
112 for(
int i=0;i<populations.size();i++)
114 populations.at(i)->mutate(&eng,numberOfElementsToMutate, Temp);
120 void AnnealEvolution::orderAllPopulations()
123 double aveScore1 = 0.0;
124 double aveScore2 = 0.0;
127 double maxScore1,maxScore2;
129 for(
int i=0;i<scoresOfTheGeneration.size();i++)
131 aveScore1+=scoresOfTheGeneration[i][0];
132 aveScore2+=scoresOfTheGeneration[i][1];
134 aveScore1 /= scoresOfTheGeneration.size();
135 aveScore2 /= scoresOfTheGeneration.size();
138 for(
int i=0;i<populations.size();i++)
140 populations.at(i)->orderPopulation();
142 evolutionLog<<generationNumber*numberOfTestsBetweenGenerations<<
","<<aveScore1<<
","<<aveScore2<<
",";
143 evolutionLog<<populations.at(0)->getMember(0)->maxScore<<
","<<populations.at(0)->getMember(0)->maxScore1<<
","<<populations.at(0)->getMember(0)->maxScore2<<endl;
148 ofstream logfileLeader;
149 for(
int i=0;i<populations.size();i++)
152 ss<<
"logs/bestParameters-"<<suffix<<
"-"<<i<<
".nnw";
154 populations[i]->getMember(0)->saveToFile(ss.str().c_str());
158 double diffclock(clock_t clock1,clock_t clock2)
160 double diffticks=clock1-clock2;
161 double diffms=(diffticks*10)/CLOCKS_PER_SEC;
165 vector <AnnealEvoMember *> AnnealEvolution::nextSetOfControllers()
169 testsToDo=numberOfTestsBetweenGenerations;
171 testsToDo=populationSize;
173 if(currentTest == testsToDo)
175 orderAllPopulations();
176 mutateEveryController();
178 cout<<
"mutated the populations"<<endl;
179 this->scoresOfTheGeneration.clear();
184 currentTest=populationSize-numberOfElementsToMutate;
187 selectedControllers.clear();
188 for(
int i=0;i<populations.size();i++)
192 selectedOne=rand()%populationSize;
194 selectedOne=currentTest;
197 selectedControllers.push_back(populations.at(i)->getMember(selectedOne));
202 return selectedControllers;
205 void AnnealEvolution::updateScores(vector <double> multiscore)
207 if(multiscore.size()==2)
208 this->scoresOfTheGeneration.push_back(multiscore);
210 multiscore.push_back(-1.0);
211 double score=1.0* multiscore[0] - 0.0 * multiscore[1];
215 payloadLog.open(
"logs/scores.csv",ios::app);
216 payloadLog<<multiscore[0]<<
","<<multiscore[1];
218 for(
int oneElem=0;oneElem<selectedControllers.size();oneElem++)
222 controllerPointer->pastScores.push_back(score);
223 double prevScore=controllerPointer->maxScore;
226 double newScore= leniencyCoef * prevScore + (1.0 - leniencyCoef) * score;
227 controllerPointer->maxScore=newScore;
231 controllerPointer->maxScore=score;
232 controllerPointer->maxScore1=multiscore[0];
233 controllerPointer->maxScore2=multiscore[1];
235 std::size_t n = controllerPointer->statelessParameters.size();
236 for (std::size_t i = 0; i < n; i++)
238 payloadLog <<
"," << controllerPointer->statelessParameters[i];
A class to read a learning configuration from a .ini file.
Contains the definition of class AnnealEvolution. Adapting NeuroEvolution to do Simulated Annealing...