[Push] Advice on Fitness

Rud Merriam k5rud at arrl.net
Fri May 7 14:57:31 EDT 2010


Thanks much to the tips and your time, Lee. Hope you have a good weekend.

 
 - 73 - 
Rud Merriam K5RUD 
http://mysticlakesoftware.com/


> -----Original Message-----
> From: Lee Spector [mailto:lspector at hampshire.edu] 
> Sent: Friday, May 07, 2010 1:21 PM
> To: k5rud at arrl.net
> Cc: push at lists.hampshire.edu
> Subject: Re: [Push] Advice on Fitness
> 
> 
> 
> Rud,
> 
> Aside from ODD some of the things I'd try are symbolic 
> regression, maybe both some polynomials and something like 
> factorial, and maybe some boolean problems (e.g. parity). But 
> I think I'd keep working on ODD to work out some of the kinks 
> in your system that it is exposing first.
> 
> The large number of duplicates sounds like a clue. It could 
> indeed mean that something's wrong with your 
> crossover/mutation operations, so I would test those 
> independently, and/or it could mean that you're doing too 
> much direct reproduction. I did say that this is usually less 
> than 10%, but often it's much lower, like 2%. You say you're 
> doing 80 xover, 5 mutation, 10 reproduction.... what's the other 5?
> 
> Another issue here is that answering constant TRUE or FALSE 
> is just a really good local maximum for this problem. You get 
> 50% of the inputs right and you can do it very simply. So 
> it's hard to get over that, especially with strong selection 
> (tournament=7 is pretty strong; I'd see what happens if you 
> change this to 2) and lots of direct reproduction. 
> 
> If you've ensured that your genetic operators are working 
> correctly, and done the other things to try to slow down 
> convergence to a local maximum (lower tournament size, less 
> straight reproduction), and you're still not getting 
> successes then you could try something more heavy-handed like 
> penalizing programs that give constant output (the same 
> output for all inputs). That's not so unreasonable, since you 
> often know that your answer shouldn't be constant. As a 
> practical matter it can often be useful to penalize other 
> known local maxima as well -- although this isn't a very 
> general technique, it can be handy if you're trying to solve 
> a real problem. But for this problem you shouldn't have to go 
> that far -- at least I've never had to do anything like that 
> to find solutions in other Push systems.
> 
>  -Lee
> 
> 
> On May 7, 2010, at 11:41 AM, Rud Merriam wrote:
> 
> > I suspected most of these points so made changes last night after 
> > re-reading the articles on the web site. Especially helpful was the 
> > Robinson thesis which went into a few more details on PushGP.
> > 
> > 	added mutation
> > 	added better control by percentage of reproduction strategy
> > 	removed purging just this morning after your comments
> > 
> > I just did a run with population of 1000, 40 generations with 80% 
> > crossover, 5% mutation, and 10% direct reproduction. 
> Tournament size 
> > is 7. Fitness is as described previously: -1000 no boolean, 10 for 
> > correct result, o bad result. I excluded all the RAND instructions. 
> > Points maximum is 20.
> > 
> > A fitness of 100, which is 50% correct responses, takes 
> over. Almost 
> > all the programs have FALSE or TRUE in them to generate the 
> response. 
> > The few that don't do something like EXEC.= to generate a boolean.
> > 
> > I observed that there are a lot of duplicate programs 
> generated after 
> > reproduction. Is that usual? If not, I might have something 
> wrong in 
> > crossover not providing sufficient variation.
> > 
> > What other simple test might I try instead of ODD?
> > 
> > 
> > 
> > 
> > - 73 -
> > Rud Merriam K5RUD 
> > http://mysticlakesoftware.com/
> > 
> > 
> >> -----Original Message-----
> >> From: Lee Spector [mailto:lspector at hampshire.edu]
> >> Sent: Friday, May 07, 2010 9:12 AM
> >> To: k5rud at arrl.net
> >> Cc: push at lists.hampshire.edu
> >> Subject: Re: [Push] Advice on Fitness
> >> 
> >> 
> >> 
> >> Hi Rud,
> >> 
> >> The fitness function looks reasonable to me.
> >> 
> >> I would probably not include BOOLEAN.RAND or the other RAND
> >> instructions for this problem, since you are presumably 
> >> looking for a deterministic solution. 
> >> 
> >> Your "purging" step seems potentially problematic to me.
> >> Usually in GP parents are selected in a random but 
> >> fitness-proportionate way, e.g. via tournaments of size 2-7, 
> >> which will usually mean that poorly-performing individuals 
> >> have a low but non-zero chance of being parents. Maybe that 
> >> specific issue (that below-average guys can't be parents) 
> >> isn't a big deal, but I think the combination of this and the 
> >> way you're selecting crossover parents -- randomly from the 
> >> unpurged? -- might have some bad consequences.
> >> 
> >> There might be an issue if a lot of programs have exactly the
> >> average fitness. In that case if you're purging programs with 
> >> strictly less than the average then you won't be purging very 
> >> many, and since it this purging is the only way your 
> >> population can progress, if you don't purge very many then it 
> >> wouldn't be likely that you'd ever get better programs. On 
> >> the other hand if you are purging programs with "less than or 
> >> equal" the average fitness then you may be purging too many.
> >> 
> >> Another issue may be that among the top half there's no bias
> >> toward the better programs. In other words, if the top half 
> >> includes a bunch -- let's say the top 10% -- that are really 
> >> good then you'd like them to make more offspring than the 
> >> others. But I don't think you are doing this.
> >> 
> >> The introduction of new completely random individuals in each
> >> generation is also non-standard... I can imagine that this 
> >> might slow things down a bit, since your evolved population 
> >> should soon be better than random and you should be 
> >> introducing new genetic material via mutation.
> >> 
> >> I don't see any mention of mutation... That may also be a
> >> problem. If you're relying on new material coming in via new 
> >> random individuals and then via crossover then that may not 
> >> be happening if all of those new random individuals are 
> >> purged before the crossover step.
> >> 
> >> As for maintaining parents in the next generation, normally
> >> "straight reproduction" is one of the ways in which 
> >> "children" (here actually clones) can be made, so some number 
> >> of good individuals (selected in a fitness proportionate way) 
> >> will make it into the next generation. But this is normally 
> >> not connected to whether or not they also served as parents, 
> >> and it is normally a very small percentage of the population 
> >> (less than 10%).
> >> 
> >> A lot may also depend on your population size, particularly
> >> since the ODD problem, having only single Boolean outputs for 
> >> each case, has a fairly coarse fitness landscape -- that is, 
> >> there aren't a lot of possible fitness values, so there 
> >> aren't smooth fitness gradients for evolution to follow, and 
> >> one generally has to compensate for this by sampling a large 
> >> space of programs. I solve it pretty fast with my Clojush 
> >> system with the default population size of 1000, but I don't 
> >> know what you're using.
> >> 
> >> -Lee
> >> 
> > 
> 
> --
> 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/
> 
> _______________________________________________
> Push mailing list
> Push at lists.hampshire.edu 
> https://lists.hampshire.edu/mailman/listinfo/push
> 



More information about the Push mailing list