[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