00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "core/geneticalgo.h"
00021 #include "core/genotype.h"
00022 #include "core/genome.h"
00023 #include <cmath>
00024
00025 namespace farsa {
00026
00027 GeneticAlgo::GeneticAlgo()
00028 : evolutionEnd(false),
00029 evaluationDone(false),
00030 genomev(NULL),
00031 generationv(0),
00032 numGens(0),
00033 bestfits(),
00034 avgfits(),
00035 meanHdists(),
00036 varHdists(),
00037 stdHdists() {
00038
00039 }
00040
00041 GeneticAlgo::~GeneticAlgo() {
00042 delete genomev;
00043 }
00044
00045 void GeneticAlgo::evolve( unsigned int generationToReach ) {
00046 while((!isEvolutionEnded()) &&
00047 ((generationv < generationToReach) || ((generationv == generationToReach) && (!evaluationDone)))) {
00048 gaStep();
00049 }
00050 }
00051
00052 void GeneticAlgo::evolve( ) {
00053 while( !isEvolutionEnded() ) {
00054 gaStep();
00055 }
00056 }
00057
00058 bool GeneticAlgo::isEvolutionEnded() {
00059 return evolutionEnd;
00060 }
00061
00062 bool GeneticAlgo::isEvaluationDone() {
00063 return evaluationDone;
00064 }
00065
00066 void GeneticAlgo::setGenome( Genome* gen ) {
00067 genomev = gen;
00068 }
00069
00070 Genome* GeneticAlgo::genome() {
00071 return genomev;
00072 }
00073
00074 const Genome* GeneticAlgo::genome() const {
00075 return genomev;
00076 }
00077
00078 void GeneticAlgo::setGeneration( unsigned int gen ) {
00079 generationv = gen;
00080
00081
00082
00083
00084
00085
00086 }
00087
00088 unsigned int GeneticAlgo::generation() const {
00089 return generationv;
00090 }
00091
00092 void GeneticAlgo::setNumGenerations( int g ) {
00093 numGens = g;
00094 }
00095
00096 int GeneticAlgo::numGenerations() {
00097 return numGens;
00098 }
00099
00100 QVector< QVector<double> > GeneticAlgo::bestFits() const {
00101 return bestfits;
00102 }
00103
00104 QVector< QVector<double> > GeneticAlgo::averageFits() const {
00105 return avgfits;
00106 }
00107
00108 QVector<double> GeneticAlgo::meanHammingDist() const {
00109 return meanHdists;
00110 }
00111
00112 QVector<double> GeneticAlgo::varianceHammingDist() const {
00113 return varHdists;
00114 }
00115
00116 QVector<double> GeneticAlgo::standardDeviationHammingDist() const {
00117 return stdHdists;
00118 }
00119
00120 void GeneticAlgo::updateStats() {
00121
00122 bestfits.resize( generationv+1 );
00123 avgfits.resize( generationv+1 );
00124 meanHdists.resize( generationv+1 );
00125 varHdists.resize( generationv+1 );
00126 stdHdists.resize( generationv+1 );
00127
00128 QVector<double> bests;
00129 QVector<double> avegs;
00130 int numObjs = genomev->at(0)->numOfObjectives();
00131 bests.resize( numObjs );
00132 avegs.resize( numObjs );
00133 for( int i=0; i<numObjs; i++ ) {
00134 bests[i] = genomev->at(0)->objective(i);
00135 avegs[i] = bests[i];
00136 }
00137 for( unsigned int g=1; g<genomev->size(); g++ ) {
00138 for( int i=0; i<numObjs; i++ ) {
00139 bests[i] = qMax( bests[i], genomev->at(g)->objective(i) );
00140 avegs[i] += genomev->at(g)->objective(i);
00141 }
00142 }
00143 for( int i=0; i<numObjs; i++ ) {
00144 avegs[i] = avegs[i]/(genomev->size());
00145 }
00146 bestfits[generationv] = bests;
00147 avgfits[generationv] = avegs;
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171 }
00172
00173 }