Hi all.
I have here a topic for discussion: REPLACEMENT. (Maybe
it is just stupid beginner's question --- I am not an expert in all the features
ECJ offers.)
In that part of ECJ I am at least a bit aware of, I
miss a more explicit use of some replacement operator. By replacement I
mean a procedure which takes an old population and a new offspring
population as arguments, decides which of the populations members
survive, and provides a new population from which the parents are selected
in the next generation.
IMHO, the replacement is a standard part of any EA. The
replacement in generational scheme simply returns the offspring population. In
steady-state model (using a generational gap), the replacement should decide
which members of the old population should be replaced by which members of the
offspring population. Some evolutionary schemes need to preserve the
parent-offspring relationship, so that offspring compete with parents for a
space in new population.
How is the replacement implemented in the ECJ?
Well, from what I know so far (correct me, if I
am wrong):
1] ECJ in its simple package uses a
generational replacement scheme, i.e. the offspring population becomes the new
population automatically.
2] There is the
steadystate.SteadyStateBreeder with its deselector methods which are in
some sense similar to the replacement... but it seems that only one
individual can replaced each generation. (No settings for generational
gap?)
3] In some evolutionary schemes, the offspring compete
with its parent for the place in population... e.g. in ec.de, this
is done in DEStatistics!!! Why? Well, I know, its because the other
statistics objects then work OK, but there should be deeper reasons to call it
STATISTICS!
It seems to me that something conceptual is missing in
ECJ --- the replacement. If we have selection classes, why do not we have
replacement classes? The replacement operator seems to me pretty orthogonal
to everything else in the EA, so that it deserves its own class plugable
to many different evolutionary schemes.
We could have replacements working on
populations (taking the old and the offspring population and produce the new
population) and replacements working on pipelines (which would allow us to do
tournaments between parent and offspring). We could be able to specify the
replacement types in parameter files and we would not have to write new breeder
classes for that. We could have the right hooks for the statistics before and
after replacements, etc.
Am I missing something? Is there a reason why this
change or extension should not (or cannot) be made? Or is it actually
implemented in some package I am not aware of? Maybe it would cause some
backward compatibility problems, but anyway?
What are your opinions? Thanks a
lot.
Petr Posik