- Development Branch - 29/1 Started formal development based on data_struct spike. The first goal is to produce the data structure that represents a chromosome. This structure will rely on a range of other classes, which will be developed and tested as well. Chromosome tests: - a data structure called Chromosome exists - the chromosome instance can return the right outputs based on given inputs ChromosomeElement tests: - Node is capable of processing its connections using its function and returning the result - Input returns the value it is set to - Outputs returns a single value from its source Node 30/1 Added class representations of functions and mutators, as well as the program itself (CGP). Modified the way the chromosome stores its data to allow for more flexible mutations. 31/1 Parity will be considered constant, at 2, for now. Added static nested classes for system-wide resources such as a random number generator, the function set and the parameter set. These can be accessed from anywhere within the program, but not modified by any class but CGP. Utilities class has lots of handy methods for getting random elements with fair probability. Modularized design: Modules for fitness function, mutation operator, evolutionary algorithm and population. FF, EA and mutation modules act as callbacks; the user may specify how the module does its job, but must comply with the interface. Population is slightly more complex: the user may define a custom chromosome and use it to generate a population, so long as it extends Chromosome. In conjunction with modularized FF, EA and mutation, this makes for a very flexible and versatile system. The Population class itself is immutable, since the system relies heavily on it. Finally, it is Iterable to for access to the chromosomes within. Arity may vary across functions, but all nodes contain enough connections to cope with the largest arity.