In this section you will learn about the basic concept of splitting up Evolutionary Algorithms in independent operators and how to connect them.
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).
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.