1 10 package org.jgap.impl; 11 12 import java.util.*; 13 import org.jgap.*; 14 15 223 public class BulkFitnessOffsetRemover 224 extends BulkFitnessFunction { 225 226 private final static String CVS_REVISION = "$Revision: 1.11 $"; 227 228 232 private FitnessFunction m_ff; 233 234 238 243 259 private double m_previousOffset; 260 261 public BulkFitnessOffsetRemover(final FitnessFunction a_ff) { 262 if (a_ff == null) { 263 throw new IllegalArgumentException ("Fitness function must not be null!"); 264 } 265 m_ff = a_ff; 266 } 267 268 271 public void evaluate(final Population a_chromosomes) { 272 double offset = Double.MAX_VALUE; 273 double curFitness; 274 Iterator itChromosomes = a_chromosomes.iterator(); 275 IChromosome chromosome; 276 while (itChromosomes.hasNext()) { 277 chromosome = (IChromosome) itChromosomes.next(); 278 292 curFitness = chromosome.getFitnessValueDirectly(); 293 if (curFitness < 0) { 294 curFitness = m_ff.getFitnessValue(chromosome); 296 chromosome.setFitnessValue(curFitness); 298 } 299 else { 300 307 curFitness += m_previousOffset; 308 chromosome.setFitnessValue(curFitness); 309 } 310 offset = (offset < curFitness) ? offset : curFitness; 312 } 313 328 offset--; 329 m_previousOffset = offset; 330 itChromosomes = a_chromosomes.iterator(); 333 while (itChromosomes.hasNext()) { 334 chromosome = (IChromosome) itChromosomes.next(); 335 chromosome.setFitnessValue(chromosome.getFitnessValue() - offset); 336 } 337 } 338 339 434 public double getAbsoluteFitness(final IChromosome a_individuum) { 435 double fitness = a_individuum.getFitnessValue(); 436 if (fitness < 0.0) { 437 fitness = m_ff.getFitnessValue(a_individuum); 439 a_individuum.setFitnessValue(fitness); 441 } 442 else { 443 450 fitness += m_previousOffset; 451 } 452 return fitness; 453 } 454 455 461 public Object clone() { 462 FitnessFunction ff = (FitnessFunction)m_ff.clone(); 463 BulkFitnessOffsetRemover result = new BulkFitnessOffsetRemover(ff); 464 return result; 465 } 466 } 467 | Popular Tags |