[Push] Success with ODD

Lee Spector lspector at hampshire.edu
Thu May 13 08:12:26 EDT 2010


Rud,

I'm glad to see that you've got it working, and that it found a reasonable solution.

On the sensitivity to parameters: It's probably sensitive even to the random seed, and in order to understand the sensitivity to other parameters you'd have to do a lot of runs with different seeds in each setting of the other parameters. None of this sensitivity is particularly surprising (to me at least :-), because this problem has a coarse fitness landscape (few possible fitness values), a strong local maximum that it's easy to get caught in, etc. Since you're also using a large instruction set and relatively small initial programs (I'm assuming that's what MAX-POINTS-IN-RANDOM-EXPRESSIONS means) there will be tremendous variability in the instructions that appear together in initial programs. You *may* (but it's complicated) see less sensitivity with different problems, larger programs, etc.

 -Lee

On May 13, 2010, at 12:56 AM, Rud Merriam wrote:

> Finally, had a success with ODD.
> 
> First, I dropped back to trying a different problem: multiply the top of the integer stack by 1 less than the top (X * X-1). This was a starting point for solving for factorial. Found problems in various places and made the fixes. I got this problem to work with various combinations of parameters.
> 
> So just now tried ODD and after 94 generations arrived at:
> 
> (CODE.= INTEGER.%)  4 INTEGER.% BOOLEAN.FROMFLOAT  EXEC.STACKDEPTH ( ( CODE.= INTEGER.%  CODE.CDR CODE.=)  FLOAT.=) BOOLEAN.FROMINTEGER
> 
> Which simplifies to: EXEC.STACKDEPTH (INTEGER.%) BOOLEAN.FROMINTEGER
> 
> The solution gets cute by using the exec stackdepth to push 2 on the stack which is used for the integer modulus to produce a 1 or 0, which is then converted to the boolean.
> 
> Parameters (that I'm controlling right now) were:
> 
> EVALPUSH-LIMIT=50 
> MAX-POINTS-IN-RANDOM-EXPRESSIONS=15 
> MIN-POINTS-IN-RANDOM-EXPRESSIONS=5 
> RANDOM-SEED=52432
> 
> max_programs=1000 
> tourney_size=4 
> generations=150 
> crossover=80 
> mutation=15 
> duplicate=5
> 
> Fitness test was 50 for not stopping, 100 for no boolean value, 10 for wrong test result, and 5 for each time the current and previous boolean value were the same (penalty for constant values).
> 
> ----
> 
> I'm surprised at the sensitivity of parameters in getting solutions. For example, changing tournament size from 2 to 3 or 4 might result in no solution when a solution had been found, or the reverse. Or changing the random seed can change from getting a solution to not.
> 
>   
>  - 73 - 
> Rud Merriam K5RUD
> http://mysticlakesoftware.com/
> 
> _______________________________________________
> Push mailing list
> Push at lists.hampshire.edu
> https://lists.hampshire.edu/mailman/listinfo/push

--
Lee Spector, Professor of Computer Science
School of Cognitive Science, Hampshire College
893 West Street, Amherst, MA 01002-3359
lspector at hampshire.edu, http://hampshire.edu/lspector/
Phone: 413-559-5352, Fax: 413-559-5438

Check out Genetic Programming and Evolvable Machines:
http://www.springer.com/10710 - http://gpemjournal.blogspot.com/



More information about the Push mailing list