Page 148 - 49A Field Guide to Genetic Programming
P. 148
134 13 Troubleshooting GP
different parameter settings in the hope of finding a better collection of
parameter values. What if changing the parameter values really does not
have much impact? That may mean that GP just is not able to gain any
traction given your current representation of the problem domain and fitness
function. You might, therefore, reconsider how the problem is posed to GP.
If the representation and fitness make the problem essentially a search for a
needle in a haystack, then GP will mostly be lost searching through highly
sub-optimal solutions. If so, altering parameter values is unlikely to help.
Note that essentially the same symptoms are also observed if the problem
is really beyond the capabilities of your computing resources. For example,
if the solutions are exceptionally rare, unless there are nice fitness gradients
guiding GP towards them, finding any solution will likely be beyond the
capacity of current computer technology.
How can one distinguish which is the cause of the lack of success? Is it a
bad choice of representation and fitness or is it just an extremely hard prob-
lem? To answer these questions, it is important to look at what happened
when the population size was varied. Even in the absence of fitness guid-
ance, GP will search. In fact, it will perform a sort of random exploration
of the search space. It may not be a particularly rational exploration —
we know, for example, that GP with subtree crossover tends to oversample
and re-sample short programs — yet, it is still a form of stochastic search.
Thus, one may expect that, if the problem is solvable, as the population
size is progressively increased, sooner or later we should start seeing some
variation in the fitness of programs. This may be sufficient for evolution to
work with, particularly if we help it by improving the representation and
fitness function. If, instead, nothing interesting happened as the population
size was increased, then perhaps you don’t have enough computing power
to solve the problem as posed, or the problem has no solution.
13.6 Study your Populations
If you’re not getting your desired results, it is important to take the time
to dig around in the populations and see what is actually being evolved. 2
For example, if you’re using ADFs because you think that your problem
would benefit from a modular solution, examine the individuals that you’re
evolving. Are they using ADFs? (Sometimes the result producing branch
simply will not refer to the ADFs at all.) Are they using them in a modular
way? Are ADFs being used multiple times? Do the ADFs encapsulate some
interesting logic, or are they just re-naming an input variable? If you’re
using grammatical evolution, on the other hand, are your evolved individuals
using your grammar as you expected? Or is the grammar in fact biasing
2
If the system you’re using doesn’t allow you to dump individuals from a run, add
that functionality or use a different system.