Yang optimisation functions

- 2 stochastic and 2 deterministic functions
- Includes example XML using Firefly algorithm as specified in paper
Added new guide providers

1) WeightedGuideProvider weighs the gbest and pbest.
2) An AlternateCrossoverGuideProvider which applies discrete crossover to two components e.g. gbest and pbest, gbest and pos, pbest and pos, etc
3) SelectionGuideProvider which uses a selection recipe (Roulette wheel, tournament, etc) to select a particle. A component is then extracted from the particle
(pbest, pos...). This can be done perDimension or perEntity.
Rebase fixes.
Added implementation of PSPG
Rebase fixes.
Fixed an issue with too many particles being replaced in PSPG which threw an exception.
Allow WFG parameters to be set.

- Added a new class called WFGProblem that contains common functionality
  shared by all the WFG problems. In particular, it contains methods to
  set the 'M' and 'l' parameters (number of problems, dimensionality).
  This class also makes sure that the WFG problems are reinitialized
  when one of these parameters are set. This is unfortunately a bit ugly
  as the sub-problems need to be reconstructed when one of these
  parameters change.
- Updated the WFG-problems themselves by adding the initialization-logic
  in an initialization method.
- Changed the vepso.xml file to include examples of using the WFG
  problem-set.
F-Race Fixes

-F-Race no longer discards all parameter configurations if the post-hoc
test fails to determine where the statistical difference lies

-F-Race now compares minProblems to the length of the results list
(not the iteration count) to determine when statistical tests should
be performed

Signed-off-by: Bennie Leonard <bennie.leonard@gmail.com>
Merge pull request #169 from filinep/extraGuideProviders

Added new guide providers
Merge pull request #170 from filinep/pspg

Implementation of PSPG
Merge branch 'master' into next
Added MinimumOfMeasurement and MaximumOfMeasurement.

These wrappers can keep track the maximum and minimum of a
measurement.
Added AreaUnderROCCurve measurement and unit tests.
Change AreaUnderROCCurve to extend Measurement<Vector>.
Allow for domain information to be stored in a NN.

Each Neuron now keeps track of its own domain. Layer calculates its
domain by concatenating the domains of the Neurons in it.
Architecture calculates its domain by concatenating the domains of
the Layers in it.

PrototypeFullyConnectedLayerBuilder now assigns a domain to each
Neuron. It is also now capable of calculating a Neuron's domain
based on its fanin.
Added NeuronDomainProviders and changed NN problems to use new domain.

Classes implementing NeuronDomainProvider provides the domain needed
for a new Neuron. Current implementations include:
PresetNeuronDomain - uses user-set domain;
FaninNeuronDomain - calculates domain from fanin.

NN problems now read domain information from NN architecture instead
of calculating it from scratch.
Added the use of the new domain providers to the layer builders.

Fixed bug regarding FaninNeuronDomain and PresetNeuronDomain that
did not implement the correct interface.

Removed conflicting/obsolete domain initialisation strategies.

Added the correct usage of the domain providers to the cascade
network problems.

Modified many unit tests to use the new domain providers.

Some code cleaning.
Added LambdaGammaNeuronDomain.

The new lambda-gamma domain provider sets one lambda and one gamma
domain for each neuron. Since this is done for each neuron instead
of an entire network, it implies that NN domains are a bit
different, but shouldn't affect any algorithms.

LambdaGammaVisitor and LambdaGammaSolutionConversionStrategy has
been adapted to deal with the new domain organisation.

Some unit tests had to be adapted.

Inadvertently fixed a bug: LambdaGammaSolutionConvertionStrategy
needs to be initialised, but the initialise method is not called
anywhere. The new implementation doesn't need initialisation.
Initialise method removed as it doesn't do anything.

Some code cleanup.
Fixed issue in the way TuningProblem takes measurements.

TuningPromblem took measurements only after the target algorithm
has finished. This meant that it was incompatible with measurements
that needs information from the entire simulation run. This is has
now been solved with the use of MeasuringListener.

MeasuringListener is an AlgorithmListener that automatically takes
measurements throughout the execution of the target algorithm. The
final measurement can be retrieved afterwards.
MeasuringListener now uses a resulotion to determine when to measure.

This allows the listener to use only as much computational power as
needed. Measurements are still taken before the first and at the
last iteration.

Small bug fix in new work in TuningProblem.