• Main Page
  • Modules
  • Classes
  • Files
  • File List

D:/Projekt/ECF_trunk/examples/GAonemax_/OneMaxEvalOp.cpp

00001 #include <ecf/ECF.h>
00002 #include "OneMaxEvalOp.h"
00003 
00004 
00005 
00006 StateP state_;
00007 
00008 bool OneMaxEvalOp::initialize(StateP state)
00009 {
00010     state_ = state;
00011     return true;
00012 }
00013 
00014 
00015 vector<IndividualP> jedinke;
00016 uint gen = 0;
00017 uint jednakihP = 0;
00018 uint jednakih = 0;
00019 
00020 // evaluate() receives a smart pointer to the individual to evaluate
00021 FitnessP OneMaxEvalOp::evaluate(IndividualP individual)
00022 {
00023     // provjeri generaciju
00024     if(state_->getGenerationNo() != gen) {
00025         gen = state_->getGenerationNo();
00026 
00027         //cout << "jednakihP: " << jednakihP << endl;
00028         //cout << "jednakih: " << jednakih << endl;
00029         ECF_LOG(state_, 1, "jednakih: " + uint2str(jednakih) + ", " + uint2str(100*jednakih/jedinke.size()));
00030 
00031         jedinke.clear();
00032         jednakihP = 0;
00033         jednakih = 0;
00034     }
00035 
00036     // provjeri pointere
00037     uint size = (uint) jedinke.size();
00038     for(uint i = 0; i < size; i++)
00039         if(individual == jedinke[i])
00040             jednakihP++;
00041 
00042     // provjeri sadrzaj
00043     BitString::BitString* nova = (BitString::BitString*) individual->getGenotype().get();
00044     for(uint i = 0; i < size; i++) {
00045         BitString::BitString* stara = (BitString::BitString*) jedinke[i]->getGenotype().get();
00046 
00047         uint n, size = (uint) nova->bits.size();
00048         for(n = 0; n < size; n++) {
00049             if(nova->bits[n] != stara->bits[n])
00050                 break;
00051         }
00052         if(n == size) {
00053             jednakih++;
00054             //ECF_LOG(state_, 1, "jednak!");
00055             break;
00056         }
00057     }
00058 
00059     // zapamti i ovu
00060     jedinke.push_back((IndividualP) individual->copy());
00061 
00062 
00063         // evaluation creates a new fitness object using a smart pointer
00064         // in our case, we try to maximize the number of ones, so we use FitnessMax fitness (for maximization problems)
00065         FitnessP fitness (new FitnessMax);
00066 
00067         // Each individual is a vector of genotypes (defined in the configuration file).
00068         // We'll use BitString, and put it as the first and only genotype
00069         BitString::BitString* bitstr = (BitString::BitString*) individual->getGenotype().get();
00070         //BitStringP bitstr = boost::static_pointer_cast<BitString::BitString> (individual->getGenotype(0)); // don't need zero for the first one
00071         
00072         // count the ones; where are they?
00073         // BitString genotype contains a std::vector of bool's named 'bits'
00074         uint ones = 0;
00075         for(uint i = 0; i<bitstr->bits.size(); i++){
00076                 if(bitstr->bits[i] == true)
00077                         ones++ ;
00078         }
00079         fitness->setValue(ones);
00080 
00081         // return the smart pointer to new fitness
00082         return fitness;
00083 }

Generated on Thu Jul 10 2014 14:13:40 for ECF by  doxygen 1.7.1