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); } }
/* Sorting function for individuals */ bool Strategies::IndividualSort (Individual i,Individual j) { return (i.GetFitness()>j.GetFitness()); }