package org.epochx.gp.model; import org.epochx.core.Evolver; import org.epochx.gp.op.crossover.KozaCrossover; import org.epochx.gp.op.init.RampedHalfAndHalfInitialiser; import org.epochx.life.*; import org.epochx.op.selection.*; import org.epochx.stats.*; import org.epochx.test.*; import org.junit.*; public class MultiplexerTest extends ModelTest { private void setupModel(final Multiplexer model) { Evolver evolver = getEvolver(); model.setNoRuns(100); model.setPopulationSize(500); 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)); model.setNoElites(0); model.setTerminationFitness(0.0); //setupRunPrinting(evolver.getStats(model)); //setupGenPrinting(evolver.getStats(model)); } /** * Tests 6-bit multiplexer with standard setup. * * Koza's success rate: 63% (p572). * OR: 28% (p195). * * Expecting success rate between 37% and 47%. */ @Test public void testMultiplexer6Bit() { final int LOWER_SUCCESS = 37; final int UPPER_SUCCESS = 47; final Multiplexer model = new Multiplexer(getEvolver(), 6); setupModel(model); final int noSuccess = getNoSuccesses(model, false, false); assertBetween("Unexpected success rate for Multiplexer 6-bit", LOWER_SUCCESS, UPPER_SUCCESS, noSuccess); } /** * Tests 11-bit multiplexer with standard setup except: * - Population size of 4000 * - Program selector of FitnessProportionateSelector with over-selection * * Expecting success rate between 90% and 100%. */ @Test public void testMultiplexer11Bit() { final int LOWER_SUCCESS = 90; final int UPPER_SUCCESS = 100; Evolver evolver = getEvolver(); final Multiplexer model = new Multiplexer(evolver, 11); setupModel(model); model.setPopulationSize(4000); model.setProgramSelector(new FitnessProportionateSelector(evolver, true)); final int noSuccess = getNoSuccesses(model, false, false); assertBetween("Unexpected success rate for Multiplexer 11-bit", LOWER_SUCCESS, UPPER_SUCCESS, noSuccess); } }