The first object that needs to be plugged into the evolution engine is a candidate
factory. Every evolutionary simulation must start with an initial population of
candidate solutions and the CandidateFactory
interface
is the mechanism by which the evolution engine creates this population.
A candidate factory implementation has an associated type. It can only create
objects of that type. The type must match the type of the evolution engine that
it is plugged into.
You can write your own implementation of CandidateFactory
for your program or, if you are using a common type such as strings, lists or
arrays, you may be able to use a ready-made factory from the
org.uncommons.watchmaker.framework.factories package.
For our "Hello World" program, we can use the provided
StringFactory
:
// Define the set of permitted characters (A-Z plus space). char[] chars = new char[27]; for (char c = 'A'; c <= 'Z'; c++) { chars[c - 'A'] = c; } chars[26] = ' '; // Factory for random 11-character Strings. CandidateFactory<String> factory = new StringFactory(chars, 11);
When writing your own CandidateFactory
implementations,
it is easiest to extend the provided AbstractCandidateFactory
base class since there is then only a single method that must be implemented.