Algorithm Structure Basics

In this section you will learn about the basic concept of splitting up Evolutionary Algorithms in independent operators and how to connect them.

Genetic Operators

Each algorithm (evolutionary or not) can be broken up into several components. There are six possible types of such components: sources, processors, forks, joins, conduits and sinks. The differentiation between them is simple. An operator that creates some data is a source. It has one single output where data is created and no inputs. The opposite is a sink - it only consumes data and has no output. The third group alter data or create new data based on some input data. Such operators are called processors. They have exactly one input and one output. Forks split up data in some arbitrary way. They have one input and an arbitrary number of outputs. The opposite are joins - with an arbitrary number of inputs and one output they are able to merge data. The last group are conduits: with an arbitrary number of inputs and outputs they can serve a wide range of tasks.
Evolutionary operators can be assigned to one of these groups: for instance an initializer is clearly a source, the generated data objects are individuals. In contrast a recombinator can be assigned the processor group. It receives data objects (the parents) and creates new data (the child individuals).

Operators in Evolvica

The interfaces specifying the six operator groups can be found in package org.evolvica.engine. Hopefully a user/developer will not get in touch with these interfaces. He does not need to implement these interfaces, but he must know what they do. The toplevel interface is org.evolvica.engine.IOperator. IOperator has six subinterface: ISource, IProcessor, IFork, IJoin, IConduit and ISink. Each genetic operator must implement exactly ONE of these interfaces, which is only specifies one or two methods. Each operator has a certain number of input and output slots that can be connected together. Connecting the output of a source to the input of a sink means the source will create some data a deliver them to the source. Understanding this concept of operators and connections is essential for being able to build algorithms later.