Print

Print


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