1 10 package examples.supergene; 11 12 import org.jgap.*; 13 import org.jgap.impl.*; 14 import examples.supergene.*; 15 16 24 public abstract class AbstractChangeFitnessFunction 25 extends FitnessFunction { 26 27 private final static String CVS_REVISION = "$Revision: 1.1 $"; 28 29 private final int m_targetAmount; 30 31 public AbstractChangeFitnessFunction(int a_targetAmount) { 32 if (a_targetAmount < 1 || a_targetAmount > 99) { 33 throw new IllegalArgumentException ( 34 "Change amount must be between 1 and 99 cents."); 35 } 36 m_targetAmount = a_targetAmount; 37 } 38 39 50 public double evaluate(IChromosome a_subject) { 51 int changeAmount = amountOfChange(a_subject); 63 int totalCoins = getTotalNumberOfCoins(a_subject); 64 int changeDifference = Math.abs(m_targetAmount - changeAmount); 65 int fitness = (99 - changeDifference); 74 if (changeAmount == m_targetAmount) { 79 fitness += 100 - totalCoins; 83 } 84 return Math.max(1, fitness); 87 } 88 89 97 public int amountOfChange(IChromosome a_potentialSolution) { 98 int numQuarters = getNumberOfCoinsAtGene(a_potentialSolution, 99 SupergeneSample.QUARTERS); 100 int numDimes = getNumberOfCoinsAtGene(a_potentialSolution, 101 SupergeneSample.DIMES); 102 int numNickels = getNumberOfCoinsAtGene(a_potentialSolution, 103 SupergeneSample.NICKELS); 104 int numPennies = getNumberOfCoinsAtGene(a_potentialSolution, 105 SupergeneSample.PENNIES); 106 return AbstractSupergeneTest.amountOfChange(numQuarters, numDimes, 107 numNickels, numPennies); 108 } 109 110 119 public int getNumberOfCoinsAtGene(IChromosome a_potentialSolution, 120 int a_code) { 121 Gene g = getResponsibleGene(a_potentialSolution, a_code); 122 return ( (IntegerGene) g).intValue(); 123 } 124 125 132 public int getTotalNumberOfCoins(IChromosome a_potentialsolution) { 133 return 134 getNumberOfCoinsAtGene(a_potentialsolution, SupergeneSample.QUARTERS) 135 + getNumberOfCoinsAtGene(a_potentialsolution, SupergeneSample.DIMES) 136 + getNumberOfCoinsAtGene(a_potentialsolution, SupergeneSample.NICKELS) 137 + getNumberOfCoinsAtGene(a_potentialsolution, SupergeneSample.PENNIES); 138 } 139 140 148 public abstract Gene getResponsibleGene(IChromosome a_chromosome, int a_code); 149 } 150 | Popular Tags |