On Tue, 26 Jun 2007 04:22:23 -0700, Mark Westwood wrote:

I'm with Robin Becker on this one, if GP is good enough for your

problem, then the answers it produces should be good enough. Set the

fitness criteria in favour of shorter rather than longer expressions

and let you system run a little longer.

Thanks for your comments.

I tried this and came up with some very interesting results.

In the fitness function, I added a multiplier:

badness *= numnodes

Where 'badness' is the calculated fitness (always >0, lower is better),

and 'numnodes' is the number of nodes in the program tree.

Result? The population never evolved past a certain point, and problem

never got solved.

So I tried to make the multiplier more gentle:

badness *= math.log(1 + numnodes)

Same result.

Tried even more gentle:

badness *= math.pow(numnodes, 1.0/12)

That is, multiply badness by the twelfth root of the number of nodes.

Population evolved better, but still didn't breed a winning organism.

Finally, I set a threshold, and only punished organisms if they exceeded

this complexity threshold:

if numnodes threshold:

badness *= math.pow(numnodes - threshold, 1.0/12)

That worked.

Seems that I have to allow a 'punishment free' threshold of complexity,

otherwise the population stagnates.

Cheers

David