Print

Print


I think you can create a pipeline that has a number of sources == the number of individuals in your population. The
produce() method of the BreedingPipeline would fill the ind[] array with, I think for most EDA, a number of individuals equal to the number that made it through selection?
I think you would start by simply subclassing BreedingPipeline, but this is one customization of ECJ I have not had to perform yet, sorry. I am sure you have already read this, but I found Tutorial 2 in the documentation to be quite helpful for getting started on that:

http://cs1.gmu.edu/~eclab/projects/ecj/docs/tutorials/tutorial2/

I hope there is a lot of interest in implementing EDA in ECJ, it is very appealing for some reason - maybe the reduction in the number of parameters is a relief.

On Wed Mar 7 5:51 , Petr Posik sent:

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