/** * Verifies that terminals are passed as clones during evolution and not as references. Thanx a * lot Javier for pointing this out nicely! * * @throws Exception * @author Klaus Meffert * @since 3.2 */ public void testReferenceProblem_0() throws Exception { m_gpconf.setPopulationSize(30); m_gpconf.setGPFitnessEvaluator(new DeltaGPFitnessEvaluator()); m_gpconf.setFitnessFunction(new TerminalsOnly()); m_gpconf.setRandomGenerator(new StockRandomGenerator()); // Class[] types = {CommandGene.IntegerClass}; Class[][] argTypes = {{}}; CommandGene[][] nodeSets = { { new Increment(m_gpconf, CommandGene.IntegerClass, 1), new Terminal(m_gpconf, CommandGene.IntegerClass, 1.0d, 10000.0d), } }; GPGenotype gen = GPGenotype.randomInitialGenotype(m_gpconf, types, argTypes, nodeSets, 10, false); gen.getGPPopulation().sort(new TerminalsFirstComparator()); IGPProgram prog1 = gen.getGPPopulation().getGPProgram(0); ProgramChromosome chrom1 = prog1.getChromosome(0); Terminal gene1 = (Terminal) chrom1.getGene(0); IGPProgram prog2 = gen.getGPPopulation().getGPProgram(1); ProgramChromosome chrom2 = prog2.getChromosome(0); Terminal gene2 = (Terminal) chrom2.getGene(0); assertNotSame(gene1, gene2); }
protected double evaluate(IGPProgram a_subject) { ProgramChromosome chrom1 = a_subject.getChromosome(0); CommandGene gene1 = chrom1.getGene(0); if (gene1 instanceof Terminal) { return gene1.execute_double(null, 0, new Object[] {}); } else { return 999999.0d; } }
@Override public float execute_float(ProgramChromosome c, int n, Object[] args) { int size = size(); DescriptiveStatistics stats = new DescriptiveStatistics(); for (int i = 0; i < size; i++) { stats.addValue(c.execute_float(n, i, args)); } return (float) stats.getSkewness(); }