EVOCOM (EVOlutionary COMputation) is a versatile optimization Matlab toolbox that provides the framework for developing different Evolutionary Algorithms. It can be used as a traditional GA, or for solving genetic programming and/or multiobjective problems, and in combination with other AI techniques (memetic algorithms). It can handle different kinds of constraints, codifications (numeric and/or symbolic) and work with different domains. Its implementation highlights the common origin EVOCOM versatility is based on an open functional architecture with two layers of functions. Each high level function performs one of the main steps of the EA, grouping the functionality of any possible implementation for that step. The low level functions (methods) are in charge of implementing the functionality desired for the high level functions (they are input parameters of the high level functions and are called inside them). Low-level functions are responsible of specifying the solution’s properties (by generating solutions with the desired properties), implementing the objective functions and of specifying the properties of the high level functions (by implementing part of the high level function functionality). So, the specification of the problem and the EA depends in the end on the methods selected.

The toolbox provides the high level functions (including a general evolutionary algorithm capable of solving a wide range of problems) and a big group of methods. In total, more than 100 functions at present. Users can write new methods and use them in the toolbox easily. They only need to maintain the header for each method, which defines the group and order of the compulsory input/output parameters. Additional parameters are always possible to let users implement general methods that depend on other inputs. This approach allows us to keep on incrementing the functionality of the toolbox easily while maintaining the original framework and lets users incorporate knowledge about their problem in the population of individuals (solutions).

The individual are implemented as a group of chromosomes and each chromosome codified with a group of genes. The genes of the individuals are generated with the selected low level function so any kind of coding and domain can be used. The toolbox allows the use of different coding and domains for the genes of each chromosome. Individuals with different number of genes can also be created. High-level functions (such as crossover and mutation) that work on the population can use different methods for each of the chromosomes.

EVOCOM also provides a group of structures for specifying all the information selected. The information is organized in the individual structure (for storing the information and methods that determine the characteristics of the individuals), the objective structure (related with the objective functions) and the EA structure (for storing the specification of all the methods of the general evolutionary algorithm). When the three structures are correctly filled, users can run the general EA to obtain the solutions of their problems.

Specifying the contents of the structures and running the algorithm can be done from the Matlab prompt (using a group of functions that deal with the structures) or from a group of friendly GUIs. The same functionality can be reached in both cases, although the GUIs perform some error checking about the consistency of the information provided.  To shorten the path between these ways of working with EVOCOM, the GUIs include an option for writing the information provided to the GUIs in a Matlab Script file that can be run from the command line.

The second version of the toolbox is working and we are using them for solving test and real-life problems. It is documented in 3 different manuals (a user manual with over 50 pages, a reference manual with over 250 pages, and a user manual of its graphic user interface with nearly 100 pages). Several examples are included with the toolbox, some of them explained in the manuals. New low level functions are being incorporated as we need them for solving more problems.

Right now the toolbox depends only on general Matlab functions, and so it is not necessary to use other toolboxes. However, when users are solving problems whose objective functions or methods depends on other Matlab tools (such as the control toolbox or Simulink), those tools will be necessary. For the methods and examples provided so far, none of the Matlab toolboxes are needed.