Quantcast

GP question: Ifelse never included in program

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

GP question: Ifelse never included in program

Johannes Göbel
Dear JGAP-users,

my target is creating math expressions using GP
(similar to examples.GP.MathProblem); however, I need
the ability to create piecewise functions like

   f(q,g,n) = 3*g    if n > 0
   f(q,g,n) = q      otherwise,

e.g. based on the IfElse-command gene.

Quoted below, you find my code - it runs without errors,
but the programs generated do *NEVER* contain an Ifelse.

Can someone please tell me what I am doing wrong?
Thank you very much in advance!

Best regards!
- Johannes

---


import org.jgap.*;
import org.jgap.gp.*;
import org.jgap.gp.function.*;
import org.jgap.gp.impl.*;
import org.jgap.gp.terminal.*;

public class GP extends GPProblem {

    /** Variables */
    public static Variable v_Q;
    public static Variable v_G;
    public static Variable v_N;

    /**
     * Instantiates a new problem.
     */
    public GP(GPConfiguration a_conf) throws InvalidConfigurationException {
        super(a_conf);
    }

    /**
     * This method is used for setting up the commands and terminals that can be
     * used to solve the problem.
     */
    public GPGenotype create() throws InvalidConfigurationException {
       
        GPConfiguration conf = getGPConfiguration();
        Class<?>[] types = {CommandGene.FloatClass};
        Class<?>[][] argTypes = {{}};
        CommandGene[][] nodeSets = {{

            v_Q = Variable.create(conf, "Q", CommandGene.FloatClass),
            v_G = Variable.create(conf, "G", CommandGene.FloatClass),
            v_N = Variable.create(conf, "N", CommandGene.FloatClass),

            new Add(conf, CommandGene.FloatClass),
            new Subtract(conf, CommandGene.FloatClass),
            new Multiply(conf, CommandGene.FloatClass),
            new Divide(conf, CommandGene.FloatClass),
            new Exp(conf, CommandGene.FloatClass),
            new Log(conf, CommandGene.FloatClass),
            new Pow(conf, CommandGene.FloatClass),
            new Terminal(conf, CommandGene.FloatClass, -100.0d, 100.0d, true),
            new IfElse(conf, CommandGene.BooleanClass),
            new Not(conf),
            new Or(conf),
            new And(conf),
            new GreaterThan(conf, CommandGene.FloatClass)

        }};

        return GPGenotype.randomInitialGenotype
           (conf, types, argTypes, nodeSets, 20, true);
    }

    public static void main(String[] args) throws Exception {
       
        GPConfiguration config = new GPConfiguration();
        config.setGPFitnessEvaluator(new DefaultGPFitnessEvaluator());
        config.setMaxInitDepth(4);
        config.setPopulationSize(1000);
        config.setMaxCrossoverDepth(8);
        config.setFitnessFunction(new GP.FitnessFunction());
        config.setStrictProgramCreation(true);
        GPProblem problem = new GP(config);
        GPGenotype gp = problem.create();
        gp.setVerboseOutput(true);

        for (int g = 9; g < 100; g = g + 10) {
           
            gp.evolve(10);
            System.out.println("Best after " + (g+1) + " evolutions:");
            System.out.println("- Program: " + gp.getAllTimeBest().toStringNorm(0));
            System.out.println("- Fitness: " + gp.getAllTimeBest().getFitnessValue());
        }
    }

    /**
     * Fitness function.
     */
    public static class FitnessFunction extends GPFitnessFunction {

        public double evaluate(final IGPProgram a_subject) {
           
            v_Q.set(...);
            v_G.set(...);
            v_N.set(...);
           
            try {

                double result = a_subject.execute_float(0, new Object[0]);
                return Math.max(0, result);

            } catch (ArithmeticException ex) {

                System.out.println(a_subject);
                throw ex;
            }
        }
    }
}


------------------------------------------------------------------------------
Lotusphere 2011
Register now for Lotusphere 2011 and learn how
to connect the dots, take your collaborative environment
to the next level, and enter the era of Social Business.
http://p.sf.net/sfu/lotusphere-d2d
_______________________________________________
jgap-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/jgap-users
Loading...