The main features of EO (the class library, which we will call EOlib) are:
eoString aString; eoTranspose<eoString> transposer; transposer(aString);
|
|
Our team has provided facilities to make EO an Open Source effort: a web page, a mailing list and CVS access to the source tree are all provided.
We intend also to provide an object repository, so that if something is programmed in EO, the object class can be sent to us (or posted on any other web site) so that the EC community can reuse it. This would also improve the reproducibility of EC results: a good practice would be to leave the particular object that has been used to program an EC solution in this repository, so that anybody can check the results and profit from them.
Most times, and to use EO in a C++ program, the only thing that has to be modified is the fitness computation function; the rest of the EC algorithm is just a matter of picking and choosing.
So far, EO has been used by our team in several experiments, evolving BP neural nets and evolving mastermind solutions. In the first case [13], multilayer perceptrons were evolved; no binary or floating point vector representation was used; the objects that were evolved were the multilayer perceptrons themselves. The EO class was used for the population-level operators, but new diversity-generation operators had to be designed: add or eliminate a hidden layer neuron, hidden layer crossover, and mutate initial weights. In one case, the backpropagation training algorithm was used also as mutation operator [14]. It was very easy and straightforward to adapt this problem to EO: the new mutation operators were given the same rights as the ``native'' mutation operators, which could not be used in this case.
In the case of mastermind, a GA was programmed to find the hidden combination, improving results obtained in previous implementations. Part of the success was due to the fact that the subject of evolution were the mastermind solutions themselves, that is, substituting colors by numbers. The genetic operators were also adapted to these objects: a permutation and a creep operator, which substituted a number (color) by the next, and the last by the first. A huge improvement was obtained; the algorithm explored only a 25% of the space that was explored before, that is, around 2% of the total search space, and thus obtained solutions much faster.
It cannot be claimed that EO obtains always better results than existing EC frameworks, but as EO includes all of them, it obtains at least as good results; with the added advantage that any representation or algorithm can be checked against any other, withouth needing to use different programs.