Пример #1
0
void 
Individual::Evaluate(Individual &ind) {
   /* Evaluate fitness */
   /* War simulation */
   
   int* opposing_pheno=ind.GetPhenotype();
   
   int battles_won = 0;
   int battles_lost = 0;
   
   int my_surviving_troops=0;
   float my_strength=1;
   int my_soldiers;
   float my_force;
   
   int opposing_surviving_troops=0;
   float opposing_strength=1;
   int opposing_soldiers;
   float opposing_force;
   
   for( int i = 0; i < m_phenolength; i++ ) {
      my_soldiers = m_phenotype[i] + my_surviving_troops;
      my_force = my_strength * (float)my_soldiers;
      
      opposing_soldiers = opposing_pheno[i] + opposing_surviving_troops;
      opposing_force = opposing_strength * (float)opposing_soldiers;
      
      if ( my_force > opposing_force ) { // Victory
         battles_won++;
         opposing_strength -= m_lf;
         
         my_surviving_troops = m_rf * (my_soldiers - opposing_soldiers);
      }
      else if ( my_force < opposing_force ) { // Loss
         battles_lost++;
         my_strength -= m_lf;
         
         opposing_surviving_troops = m_rf * (opposing_soldiers - my_soldiers); 
      }
   }
   if ( battles_won == battles_lost ) {
      m_fitness+=1;
      ind.SetFitness(ind.GetFitness()+1);
   }
   else if ( battles_won > battles_lost ) {
      m_fitness+=2;
   }
   else {
      ind.SetFitness(ind.GetFitness()+2);
   }
}
Пример #2
0
/* Sorting function for individuals */
bool Strategies::IndividualSort (Individual i,Individual j) { 
   return (i.GetFitness()>j.GetFitness()); 
}