Print

Print


Pipelines are more flexible than you imagine, but they're really an  
abstraction for EC-style population modification.  That's not what  
you want.  You want to create an entire population at a time under a  
distribution specified by the EDA model.

To do this, abandon pipelines entirely, and simply write your own  
Breeder subclass, EDABreeder (or perhaps a better name, as there are  
many EDA algorithms) which creates one population from another.   
That's what we did for PSO, if you look out on CVS you'll see the PSO  
code.  It's very simple, just override the method

	    public Population breedPopulation(EvolutionState state)

This should return a revised Population based on the current  
EvolutionState.  It's probably best not to reuse the existing
Population located at state.population (in case someone's weird code  
relies on its existence).  You can get a fresh, empty copy with  
state.population.emptyClone()

Sean


On Mar 7, 2007, at 5:51 AM, Petr Posik wrote:

> Hi, folks.
>
> I'm new to ECJ, just discovering its basic functionality. Besides,  
> I work in
> the field of EDAs. (For those who are not aware of them: they do  
> not use
> crossover and mutation, rather they fit a probabilistic model to  
> selected
> individuals and create offspring by sampling from that model).
>
> I understand the idea behind pipelines like this:
> I need to create N new individuals. I instruct ECJ to run N times  
> (or N/2
> times, it depends) e.g. the following pipeline:
> 1] For each (or each pair of) offspring, ask the mutation to create  
> it (them).
> 2] Mutation asks crossover to create and individual(s) which it can  
> mutate.
> 3] Crossover asks selection methods to provide parents.
> (If I am wrong, pls. correct me.)
>
> IMHO, to create an EDA in ECJ, I would have to use a huge pipeline  
> since all
> the selected individuals become parents of all the offspring  
> produced. It
> also means that the pipeline would not be called repeatedly, but  
> only once
> per generation.
>
> Does ECJ allow me to do that? How do I set up such a "pipeline for
> population" (as opposed to "pipeline for individuals")?
>
> Thanks a lot for any suggestions or pointers.
> Best regards,
>
> Petr Posik