package org.epochx.gp.model; import org.epochx.core.Evolver; import org.epochx.gp.op.crossover.*; import org.epochx.gp.op.init.RampedHalfAndHalfInitialiser; import org.epochx.gp.op.mutation.*; import org.epochx.life.*; import org.epochx.op.selection.*; import org.epochx.stats.*; import org.epochx.test.*; import org.junit.*; public class EvenParityTest extends ModelTest { private void setupModel(final EvenParity model) { Evolver evolver = getEvolver(); model.setNoRuns(100); model.setPopulationSize(4000); model.setNoGenerations(51); model.setCrossoverProbability(0.9); model.setMutationProbability(0.0); model.setReproductionProbability(0.1); model.setCrossover(new KozaCrossover(evolver)); model.setMaxDepth(16); model.setMaxInitialDepth(5); model.setInitialiser(new RampedHalfAndHalfInitialiser(evolver, 1, false)); model.setPoolSelector(null); model.setProgramSelector(new FitnessProportionateSelector(evolver, true)); model.setNoElites(1); model.setTerminationFitness(0.0); } @Override public void setUp() { super.setUp(); } /** * Tests even 3 parity with standard setup. * * Koza's success rate: 100% (p531). * Expecting success rate between 99% and 100%. */ @Test public void testEven3Parity() { final int LOWER_SUCCESS = 99; final int UPPER_SUCCESS = 100; final EvenParity model = new EvenParity(getEvolver(), 3); setupModel(model); final int noSuccess = getNoSuccesses(model, false, true); assertBetween("Unexpected success rate for Even 3 Parity", LOWER_SUCCESS, UPPER_SUCCESS, noSuccess); } /** * Tests even 4 parity with standard setup. * * Koza's success rate: 45% (p531). * Expecting success rate between 85% and 95%. */ @Test public void testEven4Parity() { final int LOWER_SUCCESS = 85; final int UPPER_SUCCESS = 95; final EvenParity model = new EvenParity(getEvolver(), 4); setupModel(model); final int noSuccess = getNoSuccesses(model, false, true); assertBetween("Unexpected success rate for Even 4 Parity", LOWER_SUCCESS, UPPER_SUCCESS, noSuccess); } /** * Tests even 5 parity with standard setup. * * Expecting success rate between 70% and 80%. */ @Test public void testEven5Parity() { final int LOWER_SUCCESS = 70; final int UPPER_SUCCESS = 80; final EvenParity model = new EvenParity(getEvolver(), 5); setupModel(model); final int noSuccess = getNoSuccesses(model, false, false); assertBetween("Unexpected success rate for Even 5 Parity", LOWER_SUCCESS, UPPER_SUCCESS, noSuccess); } /** * Tests standard setup except: * - Reproduction probability of 0.0 * - Mutation probability of 0.1 * - Mutation operator of SubtreeMutation * * Expecting success rate between 85% and 95%. */ @Test public void testEven4ParitySubtreeMutation() { final int LOWER_SUCCESS = 85; final int UPPER_SUCCESS = 95; Evolver evolver = getEvolver(); final EvenParity model = new EvenParity(evolver, 4); setupModel(model); model.setMutationProbability(0.1); model.setReproductionProbability(0.0); model.setMutation(new SubtreeMutation(evolver)); final int noSuccess = getNoSuccesses(model, false, false); assertBetween("Unexpected success rate for Even 4 Parity with subtree mutation", LOWER_SUCCESS, UPPER_SUCCESS, noSuccess); } /** * Tests standard setup except: * - Reproduction probability of 0.0 * - Mutation probability of 0.1 * - Mutation operator of PointMutation * * Expecting success rate between 90% and 100%. */ @Test public void testEven4ParityPointMutation() { final int LOWER_SUCCESS = 90; final int UPPER_SUCCESS = 100; Evolver evolver = getEvolver(); final EvenParity model = new EvenParity(evolver, 4); setupModel(model); model.setMutationProbability(0.1); model.setReproductionProbability(0.0); model.setMutation(new PointMutation(evolver)); final int noSuccess = getNoSuccesses(model, false, false); assertBetween("Unexpected success rate for Even 4 Parity with point mutation", LOWER_SUCCESS, UPPER_SUCCESS, noSuccess); } /** * Tests standard setup except: * - Crossover operator of SubtreeCrossover * * Expecting success rate between 70% and 80%. */ @Test public void testEven4ParitySubtreeCrossover() { final int LOWER_SUCCESS = 70; final int UPPER_SUCCESS = 80; Evolver evolver = getEvolver(); final EvenParity model = new EvenParity(evolver, 4); setupModel(model); model.setCrossover(new SubtreeCrossover(evolver)); final int noSuccess = getNoSuccesses(model, false, false); assertBetween("Unexpected success rate for Even 4 Parity with subtree crossover", LOWER_SUCCESS, UPPER_SUCCESS, noSuccess); } /** * Tests standard setup except: * - Crossover operator of OnePointCrossover * - Mutation operator of SubtreeMutation (because one-point crossover needs * mutation). * - Reproduction probability of 0.0 * - Mutation probability of 0.3 * - Crossover probability of 0.7 * - Program selector of TournamentSelector 7. * * Expecting success rate between 10% and 20%. */ @Test public void testEven4ParityOnePointCrossover() { final int LOWER_SUCCESS = 10; final int UPPER_SUCCESS = 20; Evolver evolver = getEvolver(); final EvenParity model = new EvenParity(evolver, 4); setupModel(model); model.setCrossover(new OnePointCrossover(evolver)); model.setMutation(new SubtreeMutation(evolver)); model.setProgramSelector(new TournamentSelector(evolver, 7)); model.setMutationProbability(0.3); model.setReproductionProbability(0.0); model.setCrossoverProbability(0.7); final int noSuccess = getNoSuccesses(model, false, false); assertBetween("Unexpected success rate for Even 4 Parity with one-point crossover", LOWER_SUCCESS, UPPER_SUCCESS, noSuccess); } /** * Tests standard setup except: * - Program selector of LinearRankSelector * * Expecting success rate between 0% and 0%. */ @Test public void testEven4ParityLinearRankSelection() { final int LOWER_SUCCESS = 0; final int UPPER_SUCCESS = 0; Evolver evolver = getEvolver(); final EvenParity model = new EvenParity(evolver, 4); setupModel(model); model.setProgramSelector(new LinearRankSelector(evolver)); final int noSuccess = getNoSuccesses(model, false, false); assertBetween("Unexpected success rate for Even 4 Parity with linear rank selector", LOWER_SUCCESS, UPPER_SUCCESS, noSuccess); } /** * Tests standard setup except: * - Program selector of TournamentSelector (size 7) * * Expecting success rate between 90% and 100%. */ @Test public void testEven4ParityTournament7Selection() { final int LOWER_SUCCESS = 90; final int UPPER_SUCCESS = 100; Evolver evolver = getEvolver(); final EvenParity model = new EvenParity(evolver, 4); setupModel(model); model.setProgramSelector(new TournamentSelector(evolver, 7)); final int noSuccess = getNoSuccesses(model, false, false); assertBetween("Unexpected success rate for Even 4 Parity with tournament selector", LOWER_SUCCESS, UPPER_SUCCESS, noSuccess); } }