I am still a very inexperienced user of ECJ, yet I have 2 questions (which
are actually 2 reincarnations of the same question) that bother me. Maybe,
both can be answered like 'ECJ is a toolkit for evolutionary algorithms, and
your questions are related to things which are not in the EA mainstream, or
are on the boundary of EAs and other optimization methods, thus ECJ is not
the right tool for you'. Yet I would like to know your opinions.
1) How should I implement a single-state method (e.g. a local search,
hill-climber, tabu search) using ECJ?
The pragmatic answer would probably be: use a population with a single
individual, define a pipeline that uses a mutation only, and you are
What bothers me here is the fact that single-state methods do not use a
population of size 1 to describe the state of the optimization, they use
just a single candidate solution. Why should I be forced to use a
population? I just want to use a single individual. What parts of the ECJ
would I have to modify to accomplish this?
2) What if I would like to implement an EDA-type of algorithm where the
evolutionary cycle would not be
- I have a population
- learn a model based on the population
- sample offspring from that model
- update the population with the offspring
- I have a probabilistic model
- sample new solutions from it
- use the evaluated solutions to update the model?
I.e. the state of the algorithm would not be given by a population of
individuals, but by a probabilistic model.
The first (pragmatic? lazy?) thing that came to my mind was to define a new
type of individual, e.g. ProbabilisticModelIndividual, and have a population
with this single individual (again). But since the evaluation takes place in
the middle of the evol. cycle, it would not be sufficient (as far as I
understand the principles of ECJ) to define a new pipeline, or to define a
new breeder - I would probably have to define a new subclass of
EvolutionState where I could specify a modified evolutionary cycle, is that
right? But the whole solution seems to me very artificial...
Anyway, it seems to me that the concept of population is so hard wired into
the ECJ, that such optimization algorithms as those mentioned above cannot
be easily expressed using ECJ. Can anybody change my opinion? Is there an
easy way how to use ECJ to build optimization algorithms which use
something else than a population of individuals as the data structure that
is updated each generation? Am I missing something? Is there any
tutorial/example how to do something similar?
Thanks a lot for any comments and ideas.
Cheers, Petr Pošík
Petr Pošík, Ph.D.
Czech Technical University in Prague, FEE, Dept. of Cybernetics
Technická 2, 166 27 Prague 6, Czech Republic
email: [log in to unmask]
tel.: +420 224 357 228
fax.: +420 224 923 677