// EVALUATION
statistics.preEvaluationStatistics(this);
evaluator.evaluatePopulation(this);
statistics.postEvaluationStatistics(this);
// SHOULD WE QUIT?
if (evaluator.runComplete(this) && quitOnRunComplete)
{
output.message("Found Ideal Individual");
return R_SUCCESS;
}
// SHOULD WE QUIT?
if (generation == numGenerations-1)
{
return R_FAILURE;
}
// PRE-BREEDING EXCHANGING
statistics.prePreBreedingExchangeStatistics(this);
population = exchanger.preBreedingExchangePopulation(this);
statistics.postPreBreedingExchangeStatistics(this);
String exchangerWantsToShutdown = exchanger.runComplete(this);
if (exchangerWantsToShutdown!=null)
{
output.message(exchangerWantsToShutdown);
/*
* Don't really know what to return here. The only place I could
* find where runComplete ever returns non-null is
* IslandExchange. However, that can return non-null whether or
* not the ideal individual was found (for example, if there was
* a communication error with the server).
*
* Since the original version of this code didn't care, and the
* result was initialized to R_SUCCESS before the while loop, I'm
* just going to return R_SUCCESS here.
*/
return R_SUCCESS;
}
// BREEDING
statistics.preBreedingStatistics(this);
population = breeder.breedPopulation(this);
You can do it anywhere between evaluation and breeding. I would probably do it in a customized Evaluator if I am just going to divide all the fitness by some value..