This is an implementation of the Strength Pareto Evolutionary Algorithm 2
for ECJ.

Details of this approach can be found in the following paper:

E. Zitzler, M. Laumanns, and L. Thiele.SPEA2: Improving the Performance
of the Strength Pareto Evolutionary Algorithm. Technical Report 103,
Computer Engineering and Communication Networks Lab (TIK), Swiss Federal
Institute of Technology (ETH) Zurich, Gloriastrasse 35, CH-8092 Zurich,
May 2001. 

ftp://ftp.tik.ee.ethz.ch/pub/people/zitzler/ZLT2001a.ps (Postscript),
ftp://ftp.tik.ee.ethz.ch/pub/people/zitzler/ZLT2001a.pdf (PDF)


ABSTRACT 

The Strength Pareto Evolutionary Algorithm (SPEA) (Zitzler and Thiele
1999) is a relatively recent technique for finding or approximating the
Pareto-optimal set for multiobjective optimization problems. In
different studies (Zitzler and Thiele 1999; Zitzler, Deb, and Thiele
2000) SPEA has shown very good performance in comparison to other
multiobjective evolutionary algorithms, and therefore it has been a
point of reference in various recent investigations, e.g., (Corne,
Knowles, and Oates 2000). Furthermore, it has been used in different
applications, e.g., (La-hanas, Milickovic, Baltas, and Zamboglou 2001).
In this paper, an improved ver-sion, namely SPEA2, is proposed, which
incorporates in contrast to its predecessor a fine-grained fitness
assignment strategy, a density estimation technique, and an enhanced
archive truncation method. The comparison of SPEA2 with SPEA and two
other modern elitist methods, PESA and NSGA-II, on different test
problems yields promising results.


Author of ECJ SPEA2 package: Robert Hubley, Insitute for Systems Biology
With modifications by Sean Luke, Gabriel Balan, and Keith Sullivan


EXAMPLES
--------

There is an example application in ec/app (look for "moo" or 
"multiobjective") which uses SPEA2.


How ECJ implements SPEA2
------------------------

SPEA2 is an elitist archive method which in some sense extends mu+lambda. 
That is, SPEA2 maintains a pool (the "archive") of some N high quality
individuals which more or less holds the present known pareto front of
the population.  That archive is carried over from generation to generation.

The archive is the last N individuals in the subpopulation's array.  SPEA2
has its own subpopulation class:

	ec.multiobjective.spea2.SPEA2Subpopulation

... which extends Subpopulation solely by adding a variable indicating the
archive size.  To handle SPEA2's breeding complexity, we also have our own
breeder which knows how work with this kind of subpopulation properly:

	ec.multiobjective.spea2.SPEA2Breeder

SPEA2 has an elaborate fitness setting procedure which involves the 
computation of several odd variables before setting a final fitness
based on the various objective results.  This is handled by a revised
Evaluator class:

	ec.multiobjective.spea2.SPEA2Evaluator

These variables are stored in a revised version of MultiobjectiveFitness.
Such variables are really not necessary to hold; the only one that matters
is the SPEA2Fitness variable, which holds the final fitness assessment of
the individual.  This variable exists because SPEA2MultiobjectiveFitness
subclasses from MultiobjectiveFitness, which subclasses from Fitness rather
than SimpleFitness: thus there's no "fitness" instance variable like there
is in SimpleFitness.  We could tweak that in the future, so it's possible
that this class might go away at some point.

	ec.multiobjective.spea2.SPEA2MultiobjectiveFitness

When SPEA2 needs to do breeding, it does so solely from the archive.
This means that the ECJ selection operator (TournamentSelection, which 
SPEA uses) needs to be modified to only consider the archive when
selecting an individual.  Our modified version is here:

	ec.multiobjecive.spea2.SPEA2TournamentSelection

Last we have provided a simple extension of the Statistics class to provide
a bit more information about what the final archive looks like:

	ec.multiobjective.spea2.SPEA2Statistics


