I think the best way to build such a coevolutionary algorithm is to create
an operator graph which consists of two GA operator graphs. You can create a
custom algorithm and add the operators of the GA twice. You have to be a bit
careful with their parameter names to avoid name clashes and you have to add
an additional operator (SubScopesCreator) to create two new sub-scopes first
which will then serve as the root scopes of the two GAs. The evaluation
operator will be quite special in that case and has to be implemented from
scratch, as it has to fetch information from both populations. Additionally,
another operator will be necessary which handles the execution of the
iterations of the two GAs, as one GA (the one that evolves the problems) is
executed less often than the other.
However, before you start to create such a coevolutionary algorithm, I would
recommend you to implement the two problems (evolution of solvers, evolution
of problems) independently from each other first. When you have these two
problems and when you can execute a GA to solve them independently,
combining both problems in a coevolutionary algorithm should not be that
difficult. Of course we will be happy to assist you in the definition of the
operator graph of the coevolutionary algorithm, but the two problems and the
corresponding operators (xover, mutation, evaluation) have to be implemented
first. For some guidance to creating custom problems, please have a look at
the how tos [1].
If you have any further questions on how to implement these problems, please
let us know.
Best regards,
Stefan
[1] http://dev.heuristiclab.com/trac/hl/core/wiki/DevelopersHowtos
yes, that would be enough. However, we have not yet defined such a common
interface for arbitrary population-based algorithms in HeuristicLab. Due to
the operator model of HeuristicLab such an interface was not necessary so
far, but it will not be a big deal to define it. Then you can create a
coevolutionary algorithm which is not restricted to GAs and allows to use
arbitrary algorithms (which implement this interface) for evolving the two
populations.
Best regards,
Stefan