Changed the "to-down / bottom-up" to "algorithm-based / component-based"

Also added all replacement procedures in eoEngine.html
and the general operator interface in eoOperators.html
This commit is contained in:
evomarc 2000-12-19 10:17:39 +00:00
commit 2a93bba7e6
24 changed files with 881 additions and 294 deletions

View file

@ -8,7 +8,7 @@
</head>
<body text="#000000" bgcolor="#C3C2B4" link="#0000EE" vlink="#551A8B" alink="#FF0000">
<a href="eoLesson2.html">Back to Lesson 2</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font>
<br>
@ -355,7 +355,7 @@ The actual code is in boldface and the comment in normal face.
</tr>
</table>
<hr WIDTH="100%"><a href="eoLesson2.html">Back to Lesson 2</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font>
<hr>

View file

@ -8,7 +8,7 @@
</head>
<body text="#000000" bgcolor="#C3C2B4" link="#0000EE" vlink="#551A8B" alink="#FF0000">
<a href="eoLesson1.html">Back to Lesson 1</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font>
<br>
@ -337,7 +337,7 @@ The actual code is in boldface and the comment in normal face.
</tr>
</table>
<hr WIDTH="100%"><a href="eoLesson1.html">Back to Lesson 1</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font>
<hr>

View file

@ -7,7 +7,7 @@
</head>
<body text="#000000" bgcolor="#C3C2B4" link="#0000EE" vlink="#551A8B" alink="#FF0000">
<a href="eoLesson2.html">Back to Lesson 2</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font>
<br>
@ -353,7 +353,7 @@ The actual code is in boldface and the comment in normal face.
</tr>
</table>
<hr WIDTH="100%"><a href="eoLesson2.html">Back to Lesson 2</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font>
<hr>

View file

@ -8,7 +8,7 @@
</head>
<body text="#000000" bgcolor="#C3C2B4" link="#0000EE" vlink="#551A8B" alink="#FF0000">
<a href="eoLesson1.html">Back to Lesson 1</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font>
<br>
@ -336,7 +336,7 @@ The actual code is in boldface and the comment in normal face.
</tr>
</table>
<hr WIDTH="100%"><a href="eoLesson1.html">Back to Lesson 1</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font>
<hr>

View file

@ -7,7 +7,7 @@
</head>
<body text="#000000" bgcolor="#C3C2B4" link="#0000EE" vlink="#551A8B" alink="#FF0000">
<a href="eoLesson1.html">Back to Lesson 1</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font>
<br>
@ -265,7 +265,7 @@ e)</font></font></font>
<br><font face="Courier New,Courier"><font color="#993300"><font size=+1>}</font></font></font>
<p>
<hr WIDTH="100%"><a href="eoLesson1.html">Back to Lesson 1</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font>
<hr>

View file

@ -9,7 +9,7 @@
<a href="eoLesson1.html">Back to Lesson 1</a> -
<a href="eoTutorial.html">Tutorial
main page</a> -
<a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
<a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <a href="../../doc/html/index.html">EO
documentation</a>
<br>
@ -273,7 +273,7 @@ code removed ]</font></font>
<hr WIDTH="100%"><a href="eoLesson1.html">Back to Lesson 1</a> -
<a href="eoTutorial.html">Tutorial
main page</a> -
<a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
<a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <a href="../../doc/html/index.html">EO
documentation</a>
<br>

View file

@ -7,8 +7,8 @@
</head>
<body text="#000000" link="#0000EE" vlink="#551A8B" alink="#FF0000" background="beige009.jpg">
<a href="eoTutorial.html">Tutorial main page</a> -
<a href="eoTopDown.html">Top-Down
page</a> - <a href="eoBottomUp.html">Bottom-up page</a> - <a href="eoProgramming.html">Programming
<a href="eoTopDown.html">Algorithm-Based
page</a> - <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Programming
hints</a> -<font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
documentation</a></font></font>
<br>
@ -59,8 +59,8 @@ you'll probably end up with an executable file named <b><tt><font color="#660000
<center>Complain that it does not work under Windows :-)</center>
<hr WIDTH="100%"><a href="eoTutorial.html">Tutorial main page</a> -
<a href="eoTopDown.html">Top-Down
page</a> - <a href="eoBottomUp.html">Bottom-up page</a> - <a href="eoProgramming.html">Programming
<a href="eoTopDown.html">Algorithm-Based
page</a> - <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Programming
hints</a> - <font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
documentation</a></font></font>
<br>

View file

@ -8,7 +8,7 @@
</head>
<body text="#000000" bgcolor="#C3C2B4" link="#0000EE" vlink="#551A8B" alink="#FF0000">
<a href="eoLesson3.html">Back to Lesson 3</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font>
<br>
@ -597,7 +597,7 @@ cout &lt;&lt; "Exception: " &lt;&lt; e.what() &lt;&lt; '\n';</font></tt></b>
</table>
<hr WIDTH="100%"><a href="eoLesson3.html">Back to Lesson 3</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <b><font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font></b>
<hr>

View file

@ -7,7 +7,7 @@
</head>
<body text="#000000" bgcolor="#C3C2B4" link="#0000EE" vlink="#551A8B" alink="#FF0000">
<a href="eoLesson2.html">Back to Lesson 2</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
documentation</a></font></font></b>
<br>
@ -44,7 +44,7 @@ i++)</font></tt></b>
</table>
<hr WIDTH="100%"><a href="eoLesson2.html">Back to Lesson 2</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
documentation</a></font></font></b>
<hr>

View file

@ -6,8 +6,8 @@
<body text="#000000" background="beige009.jpg" link="#0000EE" vlink="#551A8B" alink="#FF0000">
<a href="eoTutorial.html">Tutorial main page </a>-
<a href="eoTopDown.html">Top-Down
page</a> - <a href="eoBottomUp.html">Bottom-up page</a> - <a href="eoProgramming.html">Programming
<a href="eoTopDown.html">Algorithm-Based
page</a> - <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Programming
hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO documentation</a></font>
<br>
<hr WIDTH="100%">

View file

@ -3,20 +3,20 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Mozilla/4.72 [en] (X11; U; Linux 2.2.16 i686) [Netscape]">
<title>EO - The Bottom-Up approach</title>
<title>EO - The Component-Based approach</title>
</head>
<body text="#000000" bgcolor="#CCCCCC" link="#0000EF" vlink="#51188E" alink="#FF0000">
<a href="eoTutorial.html">Tutorial main page </a>-
<a href="eoTopDown.html">Top-Down
page</a> - <a href="eoBottomUp.html">Bottom-up page</a> - <a href="eoProgramming.html">Programming
<a href="eoTopDown.html">Algorithm-Based
</a> - <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Programming
hints</a> - <a href="../../doc/html/index.html">EO documentation</a>
<br>
<hr WIDTH="100%">
<center>
<h1>
<font color="#FF0000">EO - Bottom-Up approach</font></h1></center>
<font color="#FF0000">EO - Component-Based approach</font></h1></center>
<p><br>Congratualtions - You have chosen the bottom-up approach!&nbsp;
<p><br>Congratualtions - You have chosen the component-based approach!&nbsp;
From here you will be allowed to browse into the different components of
an Evolutionary Algorithm, and to see how to program your favorite using
the EO library.
@ -60,8 +60,8 @@ to go directly to the corresponding section of the tutorial.
</map>
<br>
<hr WIDTH="100%">
<br><a href="eoTutorial.html">Tutorial main page </a>- <a href="eoTopDown.html">Top-Down
page</a> - <a href="eoBottomUp.html">Bottom-up page</a> - <a href="eoProgramming.html">Programming
<br><a href="eoTutorial.html">Tutorial main page </a>- <a href="eoTopDown.html">Algorithm-Based
</a> - <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Programming
hints</a> - <a href="../../doc/html/index.html">EO documentation</a>
<br>
<hr>

View file

@ -2,11 +2,12 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (X11; U; Linux 2.2.17-21mdk i686) [Netscape]">
<title>Genetic Engine</title>
</head>
<body text="#000000" link="#0000EF" vlink="#51188E" alink="#FF0000" background="beige009.jpg">
<a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
page</a> - <a href="eoProgramming.html">Programming hints</a> - <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
<a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based</a>
- <a href="eoProgramming.html">Programming hints</a> - <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
documentation</a></font></font></b>
<hr WIDTH="100%">
<center>
@ -16,21 +17,42 @@ documentation</a></font></font></b>
<p><br><b><font color="#000099"><font size=+2>Contents</font></font></b>
<ul>
<li>
Introduction</li>
<a href="#introduction">Introduction</a></li>
<li>
Selection</li>
<a href="#selection">Selection</a> choice of parents that will be allowed
to <b><font color="#FF6600">reproduce</font></b></li>
<li>
Replacement</li>
<a href="#replacement">Replacement</a> choice of individuals that will
<b><font color="#FF6600">survive</font></b></li>
<li>
Popular evolution engines</li>
Popular <a href="#popular">evolution engines</a> all historical evolution
engines are implemented in EO</li>
<li>
Helper classes:</li>
<li>
<a href="#tournament">tournaments</a>, are intensively used within selection
and replacement procedures</li>
<li>
<a href="#howmany">rate-or-number</a> is used to decide whether to return
a relative (to the current population size) or absolute number, when something
should return more than one individual.</li>
<li>
<a href="#SAD">Survive-and-die</a>, a functor class with two populations
arguments: saves some from the first in the second, and kill some others
from the first. Used in replacements only.</li>
</ul>
<p><br><b><font color="#000099"><font size=+2>Introduction</font></font></b>
<br>The term evolution engine denotes the different parts that simulate
the Darwinism in Evolutionary Algorithms.
<hr WIDTH="100%">
<br><a NAME="introduction"></a><b><font color="#000099"><font size=+2>Introduction</font></font></b>
<p>The term <b><font color="#FF6600">evolution engine</font></b> denotes
the different parts of an Evolutionary Algorithm that simulate the Darwinism:
<center>
<p><i><font color="#009900">The fittest individuals are more likely to
reproduce and survive.</font></i></center>
@ -43,10 +65,17 @@ that will be allowed to <b><font color="#009900">reproduce</font></b><font color
<br><a href="#replacement">Replacement</a> takes place after reproduction,
and is the Darwinistic choice of those individuals that will <b><font color="#009900">survive</font></b>,
i.e. become the parents of the next generation.
<p><a NAME="selection"></a><b><font color="#000099"><font size=+2>Selection</font></font></b>
<p>Both selection and replacement will be discussed in turn, before some
helper classes that are used within selection and replacement procedures
are presented.
<p>
<hr WIDTH="100%"><a NAME="selection"></a><b><font color="#000099"><font size=+2>Selection</font></font></b>
<br>&nbsp;
<p><a NAME="replacement"></a><b><font color="#000099"><font size=+2>Replacement</font></font></b>
<br>The replacement phase takes place <font color="#FF6600">after the birth
<br>&nbsp;
<p>
<hr WIDTH="100%">
<br><a NAME="replacement"></a><b><font color="#000099"><font size=+2>Replacement</font></font></b>
<p>The replacement phase takes place <font color="#FF6600">after the birth
of all offspring</font> through variation operators. The idea is to close
the generation loop, i.e. to end up with a population of individuals that
will be the initial population of next generation. That population will
@ -57,64 +86,46 @@ one generation to the next one - though nothing stops you from writing
an algorithm with varying population size.
<p><b><font color="#000099">Replacement: </font><font color="#FF0000">The
interface</font></b>
<br>The abstract class for replacement procedures is the functor class
<p>The abstract class for replacement procedures is the functor class
<font color="#009900">eoReplacement</font>,
and the interface for its <tt><font color="#993300">operator()</font></tt>
is
<center>
<p><b><tt><font color="#993300">void operator()(const eoPop&lt;EOT>&amp;
_parents, eoPop&lt;EOT>&amp; _offspring)</font></tt></b></center>
<p><b><tt><font color="#993300">void operator()(eoPop&lt;EOT>&amp; _parents,
eoPop&lt;EOT>&amp; _offspring)</font></tt></b></center>
<p>which you could have guessed from the inheritance tree for class <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/class_eoreplacement.html">eoReplacement</a></font></font></b>.,
as you see there that <font color="#009900">eoReplacement</font> derives
from <tt><font color="#993300">class eoBF&lt;const eoPop&lt;EOT>&amp;,
eoPop&lt;EOT>&amp;, void></font></tt>.
from <tt><font color="#993300">class eoBF&lt;eoPop&lt;EOT>&amp;, eoPop&lt;EOT>&amp;,
void></font></tt>.
<br>This means that it takes <font color="#FF6600">2 populations</font>
(called, for obvious anthropomorphic reasons, _parents and _offspring :-)
and puts the result into population offspring (as _parents is passed as
<b><tt><font color="#993300">const</font></tt></b>ant
population).
<p><b><font color="#FF0000">Note</font></b>: After the replacement step,
all algorithms swap the parents and offspring populations - this is why
the result of the replacement is put into the _offspring population --
the _parents being there untouched until the very last moment.
and is free to modify both, but the resulting population should be placed
in the first argument (usually called_parents) to close the loop and go
to next generation.
<p><b><font color="#000099">Replacement: </font><font color="#FF0000">Instances</font></b>
<ul>
<li>
The most straightforward replacement is ... <font color="#FF6600">no replacement</font>,
or, more precisely, <font color="#FF6600">generational replacement</font>:
all offspring replace all parents (used in Holland's and Goldberg's traditional
GAs). In EO, this is implemented in the <b><tt><font color="#009900">eoNoReplacement</font></tt></b>
class, whose <tt><font color="#993300">operator()</font></tt> does ...
<font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/eoreplacement_h-source.html#l00051">exactly
nothing</a></font></font> (remember that _parents and _offspring will be
swapped later on).</li>
<b><tt><font color="#009900">eoGenerationalReplacement </font></tt></b>This
is the most straightforward replacement, called <font color="#FF6600">generational
replacement</font>: all offspring replace all parents (used in Holland's
and Goldberg's traditional GAs).&nbsp; It takes no argument, and supposes
that offspring and parents are of the same size (but does not check!).</li>
<br>&nbsp;
<li>
But the basic type of replacement in EO has two major steps, <font color="#FF6600">merging</font>
<b><tt><font color="#009900">eoMergeReduce</font></tt></b> This is one
the basic types of replacement in EO. It has two major steps, <font color="#FF6600">merging</font>
both populations of parents and offspring, and <font color="#FF6600">reducing</font>
this big population to the right size. The functor class is called <b><tt><font color="#009900">eoMergeReduce</font></tt></b>.
and it <font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/eoreplacement_h-source.html#l00064">contains
two objects</a></font></font> of respective types <b><font color="#009900">eoMerge</font></b>
and <b><font color="#009900">eoReduce</font></b> and you can probably guess
what each of them actually does :-)</li>
this big population to the right size. It <font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/class_eomegereduce.html">contains
two objects</a></font></font> of respective types <b><font color="#009900"><a href="#merge">eoMerge</a></font></b>
and <b><font color="#009900"><a href="#reduce">eoReduce</a></font></b>
and you can probably guess what each of them actually does :-)</li>
<br>&nbsp;
<p>&nbsp;
<p>Available <font color="#FF6600">instances of eoMerge</font> objects
are <b><tt><font color="#009900">eoPlus</font></tt></b>, that simply adds
the parents to the offspring, or <b><tt><font color="#009900">eoElitism</font></tt></b>,
that adds only some of the (best) parents to the offspring. A special case
of eoElistism is <b><tt><font color="#009900">eoNoElitism</font></tt></b>,
an eoMerge that does nothing.
<br>&nbsp;
<p>Available <font color="#FF6600">instances of eoReduce</font> are <b><tt><font color="#009900">eoTruncate</font></tt></b>,
that deterministically keeps only the required number of individuals, taking
the best ones, and <b><tt><font color="#009900">eoEPReduce</font></tt></b>
that usees the EP stocahstic tournamenent to reduce the population.
<p>Available <font color="#FF6600">instances of eoMergeReduce</font> replacement
procedures are built on the above, and include
include
<ul>
<li>
<b><tt><font color="#009900">eoCommaReplacement</font></tt></b>, one of
@ -129,20 +140,50 @@ where the best from offspring+parents become the next generation. It is
an <b><tt><font color="#993300">eoMergeReduce(eoPlus, eoTruncate)</font></tt></b>.</li>
<li>
<b><tt><font color="#009900">eoEPReplacement</font></tt></b>, from <font color="#FF6600">Evolutionary
<b><tt><font color="#009900">eoEPReplacement</font></tt></b>, used in the
<font color="#FF6600">Evolutionary
Programming</font> historical algorithm, doing a stochastic tournament
among parents + offspring. It is an <b><tt><font color="#993300">eoMergeReduce(eoPlus,
eoEPReduce)</font></tt></b>.</li>
eoEPReduce)</font></tt></b> and its constructor requires as argument the
size of the tournament (unsigned int).</li>
</ul>
<li>
Another type of eoReplacement is eoKillReplace in which some individuals
of the population are reaplced by some of the offspring.</li>
<b><tt><font color="#009900">eoReduceMerge</font></tt></b> is another important
type of eoReplacement: the parents are first reduced, and then merged with
the offspring. Note that the parent population is reduced of the exact
number of offspring.</li>
<br>Though not mandatory, it is implicitely assumed that few offspring
have been generated. Hence, all derived replacement procedures of class
<b><tt><font color="#009900">eoReduceMerge</font></tt></b>
are termed <b><tt><font color="#009900">eoSGAxxx</font></tt></b>, as they
are the ones to use in SteadyState Genetic Algorithm engine. This gives
the following <font color="#FF6600">instances of eoReduceMerge</font>:
<ul>
<li>
&nbsp;<b><tt><font color="#009900">eoSSGAWorseReplacement</font></tt></b>
in which the worse parents are killed and replaced by all offsprings (no
additional argument needed);</li>
<li>
<b><tt><font color="#009900">eoSSGADetTournamentReplacement</font></tt></b>
in which parents to be killed are chosen by a (reverse) determinitic tournament.
Additional parameter (in the constructor) is the tournament size, an <b><tt><font color="#993300">unsigned
int</font></tt></b>).</li>
<li>
<b><tt><font color="#009900">eoSSGAStochTournamentReplacement</font></tt></b>
in which parents to be killed are chosen by a (reverse) stochastic tournament.
Additional parameter (in the constructor) is the tournament rate, a <b><tt><font color="#993300">double</font></tt></b>).</li>
</ul>
<p><br><b><font color="#000099">Replacement: </font><font color="#FF0000">Adding
<li>
<b><tt><font color="#009900">eoSurviveAndDie</font></tt></b> is</li>
</ul>
<b><font color="#000099">Replacement: </font><font color="#FF0000">Adding
(weak) elitism</font></b>
<br>You can add what is called <font color="#FF6600">weak elitism</font>
<p>You can add what is called <font color="#FF6600">weak elitism</font>
to any replacement by encapsulating it into an <b><tt><font color="#009900">eoWeakElitismReplacement</font></tt></b>
object. Weak elitism ensures that the overall <font color="#FF6600">best
fitness</font> in the population <font color="#FF6600">will never decrease</font>:
@ -152,25 +193,228 @@ population, replacing the worse.
<p>Within EO, this is very easy to add:
<p>First, declare your replacement functor (here, generational, but it
can be any replacement object):
<br><b><tt><font color="#009900">eoNoReplacement&lt;Indi> genReplace;</font></tt></b>
<br><b><tt><font color="#009900">eoGenerationalReplacement&lt;Indi> genReplace;</font></tt></b>
<br>Then wrap the weak elitism around it:
<br><b><tt><font color="#009900">eoWeakElitismReplacement&lt;Indi> replace(genReplace);</font></tt></b>
<br>and use now replace as your replacement procedure within your algorithm.
<p><font color="#FF0000">Note</font>: of course, adding weak elitism to
an elitist replacement makes no sense - but will not harm either :-)
<p><a NAME="popular"></a><b><font color="#000099"><font size=+2>Popular
<p><b><font color="#000099">Replacement: </font><font color="#FF0000">Test
file</font></b>
<p>The file <b><tt><font color="#993300">t-eoReplacement</font></tt></b>
in the <b><font color="#FF6600">test directory</font></b> implements all
above replacmenet procedures withni a very simple and easy-to-monitor Dummy
EO class.
<p>
<hr WIDTH="100%">
<br><a NAME="popular"></a><b><font color="#000099"><font size=+2>Popular
evolution engines</font></font></b>
<br>The most popular evolution engines are listed below, together with
the way to use them in EO. If you don't find your particuler algorithm,
please send it to us, and we might include it here!
<p>This section will be completed soon - in the meantime just trust us
that all of these are already implemented in EO (except maybe some of the
last category :-) !!!!!!
<p>The most popular evolution engines are listed below, together with the
way to use them in EO. If you don't find your particuler algorithm, please
send it to us, and we might include it here!
<ul>
<li>
Generational Genetic Algorihtm</li>
<a NAME="GGA"></a>Generational Genetic Algorihtm</li>
<li>
<a NAME="SSGA"></a>Steady-State Genetic Algorithm</li>
<li>
<a NAME="ESPlus"></a>(MU+Lambda)-Evolution Strategy</li>
<li>
<a NAME="ESComma"></a>(MU,LAMBDA)-Evolution Strategy</li>
<li>
<a NAME="EP"></a>Evolutionary Programming</li>
<li>
<a NAME="General"></a>You name it :-)</li>
</ul>
<hr WIDTH="100%">
<br><a NAME="tournament"></a><b><font color="#000099"><font size=+2>Tournaments</font></font></b>
<p>Tournaments are an easy and quick way to <b><font color="#FF6600">select</font></b>
individuals within a population based on simple comparisons. Though usually
based on fitness comparisons, they can use any comparison operator.
<br>In EO, there are two variants of tournaments used to select one single
individual, namely <b><tt><font color="#009900">Deterministic Tournament</font></tt></b>
and <b><tt><font color="#009900">Stochastic Tournament</font></tt></b>,
that are used in selection and in replacement procedures, and a global
tournament-based selection of a whole bunch of individuals, the <b><tt><font color="#009900">EP
Tournament</font></tt></b>. Though the single-selection tournaments can
be repeated to select more than one individual, and the batch tournament
selection can be used to select a single individual, both uses are probably
a waste of CPU time.
<ul>
<li>
<b><tt><font color="#009900">Deterministic Tournament</font></tt></b> of
size T selects returns the best of T uniformly chosen individuals in the
population. It is implemented in the <b><tt><font color="#009900">eoDetTournamentSelect</font></tt></b>
class, a sub-class of eoSelectOne, as well as in the <b><tt><font color="#009900">eoDetTournamentTruncate</font></tt></b>
class that repeatidly removes from the population the "winner" of the inverse
tournament.&nbsp; These objects use the C++ function determinitic_tournament
in&nbsp; <a href="../../doc/html/selectors_h-source.html">selectors.h</a>.</li>
<li>
<b><tt><font color="#009900">Stochastic Tournament</font></tt></b> of rate
R first choses two individuals from the population, and selects the best
one with probability R and the worse one with probability (1-R). It is
implemented in the <b><tt><font color="#009900">eoStochTournamentSelect</font></tt></b>
class, a sub-class of eoSelectOne, as well as in the <b><tt><font color="#009900">eoStochTournamentTruncate</font></tt></b>
class that repeatidly removes from the population the "winner" of the inverse
tournament.&nbsp; These objects use the C++ function determinitic_tournament
in&nbsp; <a href="../../doc/html/selectors_h-source.html">selectors.h</a>.</li>
<li>
<b><tt><font color="#009900">EP Tournament</font></tt></b> of size T is
a global tournament: it works by assigning a score to all individuals in
the population the following way: starting with a score of 0, each individual
I is "opposed" T times to a uniformly chosen individual. Everytime I wins,
its score in incremented by 1 (and by 0.5 for every draw). The individuals
are then selected deterministically based on their scores from that procedure.
The <b><tt><font color="#009900">EP Tournament</font></tt></b> is implemented
in the&nbsp; <b><tt><font color="#009900">eoEPReduce</font></tt></b> truncation
method used in some replacement procedures.</li>
</ul>
<p><br>
<hr WIDTH="100%"><a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
page</a> - <a href="eoProgramming.html">Programming hints</a> -<b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
<hr WIDTH="100%">
<br><a NAME="merge"></a><b><font color="#000099"><font size=+2>Merging
populations</font></font></b>
<p>In replacement procedures, one frequently needs to merge two populations
(computed form old parents and new-born offspring). Classes derived from
the abstract class eoMerge are written for that purpose.
<p><b><font color="#000099">eoMerge</font></b>: <b><font color="#FF0000">interface</font></b>
<br>The abstract class for merging procedures is the functor class
<font color="#009900">eoMerge</font>,
and the interface for its <tt><font color="#993300">operator()</font></tt>
is
<center>
<p><b><tt><font color="#993300">void operator()(const eoPop&lt;EOT>&amp;
_parents, eoPop&lt;EOT>&amp; _offspring)</font></tt></b></center>
<p>which you could have guessed from the inheritance tree for class <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/class_eomerge.html">eoMerge</a></font></font></b>,
as you see there that <font color="#009900">eoMerge</font> derives from
<br><tt><font color="#993300">class eoBF&lt;const eoPop&lt;EOT>&amp;, eoPop&lt;EOT>&amp;,
void></font></tt>.
<br>This means that it takes <font color="#FF6600">2 populations</font>
and modifies the seond one by adding some individuals from the first one
(which is supposed to remain <b><tt><font color="#993300">const</font></tt></b>ant).
<p><b><font color="#000099">eoMerge</font></b>: <b><font color="#FF0000">instances</font></b>
<br>Available <font color="#FF6600">instances of eoMerge</font> objects
are <b><tt><font color="#009900">eoPlus</font></tt></b>, that simply adds
the parents to the offspring, or <b><tt><font color="#009900">eoElitism</font></tt></b>,
that adds only some of the (best) parents to the offspring. A special case
of eoElistism is <b><tt><font color="#009900">eoNoElitism</font></tt></b>,
an eoMerge that does nothing.
<p>
<hr WIDTH="100%">
<br><a NAME="reduce"></a><b><font color="#000099"><font size=+2>Reducing
populations</font></font></b>
<p>The other useful component of replacement procedures, <font color="#009900">eoReduce</font>,
<font color="#FF6600">kills
some individuals</font> from a given population.
<p><b><font color="#000099">eoReduce</font></b>: <b><font color="#FF0000">interface</font></b>
<br>The abstract class for reducing procedures is the functor class
<font color="#009900">eoReduce</font>,
and the interface for its <tt><font color="#993300">operator()</font></tt>
is
<center>
<p><b><tt><font color="#993300">void operator()(eoPop&lt;EOT>&amp; _parents,
unsigned int new_size)</font></tt></b></center>
<p>which you could have guessed from the inheritance tree for class <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/class_eoreduce.html">eoReduce</a></font></font></b>,
as you see there that <font color="#009900">eoReduce</font> derives from
<br><tt><font color="#993300">class eoBF&lt;eoPop&lt;EOT>&amp;, unsigned
int, void></font></tt>.
<br>An <font color="#009900">eoReduce</font> shoud take a<font color="#FF6600">
population</font> and shrink it to the required size.
<p><b><font color="#000099">eoReduce</font></b>: <b><font color="#FF0000">instances</font></b>
<br>Available <font color="#FF6600">instances of eoReduce</font> are
<ul>
<li>
<b><tt><font color="#009900">eoTruncate</font></tt></b>, deterministically
kills the worse individuals, keeping only the required number. It starts
by sorting teh populations, and hence does <font color="#FF6600">modify
its order</font>.</li>
<li>
<b><tt><font color="#009900">eoLinearTruncate</font></tt></b>, deterministically
kills the worse individuals, keeping only the required number. It does
so by repeatedly removing the worsr individual. Hence does <font color="#FF6600">not
modify its order</font>, but takes longer time than <b><tt><font color="#009900">eoTruncate</font></tt></b>
in case of many offspring.</li>
<li>
<b><tt><font color="#009900">eoEPReduce</font></tt></b>, uses the <a href="#EPtournament">EP
stochastic tournament</a> to reduce the population. It requires an additinal
argument, the tournament size.</li>
<li>
<b><tt><font color="#009900">eoDetTournamentTruncate</font></tt></b> uses
inverse deterministic tournament to repeatidly kill one individual until
the propoer size is reached. As <b><tt><font color="#009900">eoLinearTruncate</font></tt></b>,
it might take some time in the case of many offspring. It requires the
size of the tournament (<b><tt><font color="#993300">unsigned int</font></tt></b>)
as parameter in the constructor (default is 2).</li>
<li>
<b><tt><font color="#009900">eoStochTournamentruncate</font></tt></b>&nbsp;
uses inverse stochastic tournament to repeatidly kill individuals from
the population. It requires the rate of the tournament (<b><tt><font color="#993300">double</font></tt></b>)
as parameter in the constructor (default is 0.75).</li>
</ul>
<p><br>
<hr WIDTH="100%">
<br><a NAME="howmany"></a><b><font color="#000099"><font size=+2>Relative
or absolute number of individuals</font></font></b>
<p>Many classes in selection/replacement procedures will handle a number
of individuals that may either be fixed or be a fraction of some argument-population
size.
<br>Of course, it is possible to write two different classes that will
only differ by the way they compute the number of individuals they have
to treat, as it is done for selectors with the two classes <font color="#009900">eoSelectPerc</font>
and <font color="#009900">eoSelectNumber</font> (it could also have been
possible to have some pure abstrat class and implement the computation
of the number of individuals to treat in some derived classes).
<br>However, rather than multiply the number of class, EO has defined a
class that will handle the problem once and for all, the class <b><tt><font color="#993300">eoHowMany</font></tt></b>.
It receives a <b><tt><font color="#993300">double</font></tt></b>, and
a <b><tt><font color="#993300">boolean</font></tt></b> indicating whether
that double is to be treated <b><font color="#FF6600">as a rate</font></b>
or as <b><font color="#FF6600">an absolute (unisgned) interger.</font></b>
<p><b><font color="#000099">eoHowMany</font></b>: <b><font color="#FF0000">interface</font></b>
<br>The class interface for its <tt><font color="#993300">operator()</font></tt>
is
<center>
<p><b><tt><font color="#993300">unsigned int operator()(unsigned int _pop_size)</font></tt></b></center>
<p>which you could have guessed from the inheritance tree for class <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/class_eohowmany.html">eoHowMany</a></font></font></b>,
as you see there that <b><tt><font color="#993300">eoHowMany</font></tt></b>
derives from
<br><tt><font color="#993300">class eoUF&lt;unsigned int, unsigned int></font></tt>.
<p>Its constructor takes 2 argumenrts:
<center>
<p><b><tt><font color="#993300">eoHowMany(double _rate, bool _interpret_as_rate
= true)</font></tt></b></center>
so by default the double is indeed interpreted as a rate.
<p>It is used in <font color="#009900">eoSelectMany</font> (which supersedes
<font color="#009900">eoSelectPerc</font>
and <font color="#009900">eoSelectNumber</font>, but they are left there
for tutorial reasons!) as well as in many <a href="#reduce">truncation</a>
methods.
<p>
<hr WIDTH="100%">
<br><a NAME="SAD"></a><b><font color="#000099"><font size=+2>Survive and
Die</font></font></b>
<p>
<hr WIDTH="100%"><a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based</a>
- <a href="eoProgramming.html">Programming hints</a> -<b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
documentation</a></font></font></b>
<br>
<hr>

View file

@ -6,8 +6,8 @@
<body text="#000000" bgcolor="#C3C2B4" link="#0000EE" vlink="#551A8B" alink="#FF0000">
<a href="eoTutorial.html">Tutorial main page </a>-
<a href="eoTopDown.html">Top-Down
page</a> - <a href="eoBottomUp.html">Bottom-up page</a> - <a href="eoProgramming.html">Programming
<a href="eoTopDown.html">Algorithm-Based
page</a> - <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Programming
hints</a> - <a href="../../doc/html/index.html">EO documentation</a>
<br>
<hr WIDTH="100%">
@ -21,8 +21,8 @@ hints</a> - <a href="../../doc/html/index.html">EO documentation</a>
<br>
<hr WIDTH="100%">
<a href="eoTutorial.html">Tutorial main page </a>-
<a href="eoTopDown.html">Top-Down
page</a> - <a href="eoBottomUp.html">Bottom-up page</a> - <a href="eoProgramming.html">Programming
<a href="eoTopDown.html">Algorithm-Based
page</a> - <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Programming
hints</a> - <a href="../../doc/html/index.html">EO documentation</a>
<hr>
<address><a href="mailto:Marc.Schoenauer@polytechnique.fr">Marc Schoenauer</a></address>

View file

@ -5,8 +5,8 @@
</head>
<body text="#000000" background="beige009.jpg" link="#0000EE" vlink="#551A8B" alink="#FF0000">
<a href="eoTutorial.html">Tutorial main page </a>-
<a href="eoTopDown.html">Top-Down
page</a> - <a href="eoBottomUp.html">Bottom-up page</a> - <a href="eoProgramming.html">Programming
<a href="eoTopDown.html">Algorithm-Based
page</a> - <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Programming
hints</a> - <a href="../../doc/html/index.html">EO documentation</a>
<br>
<hr WIDTH="100%">
@ -22,8 +22,8 @@ hints</a> - <a href="../../doc/html/index.html">EO documentation</a>
<!-- ----------------------------------------------- -->
<br>
<hr WIDTH="100%">
<a href="eoTutorial.html">Tutorial main page </a>- <a href="eoTopDown.html">Top-Down
page</a> - <a href="eoBottomUp.html">Bottom-up page</a> - <a href="eoProgramming.html">Programming
<a href="eoTutorial.html">Tutorial main page </a>- <a href="eoTopDown.html">Algorithm-Based
page</a> - <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Programming
hints</a> - <a href="../../doc/html/index.html">EO documentation</a>
<hr>
<address>

View file

@ -2,15 +2,15 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (X11; U; Linux 2.2.17-21mdksmp i686) [Netscape]">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (X11; U; Linux 2.2.17-21mdk i686) [Netscape]">
<title>Tutorial: Lesson 1</title>
</head>
<body text="#000000" link="#0000EE" vlink="#551A8B" alink="#FF0000" background="beige009.jpg">
<a href="eoLesson2.html">Lesson 2</a> -
<a href="eoTutorial.html">Tutorial
main page</a> -
<a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
page</a> - <a href="eoProgramming.html">Programming hints</a> -<font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
<a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based</a>
- <a href="eoProgramming.html">Programming hints</a> -<font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
documentation</a></font></font>
<br>
<hr WIDTH="100%"><!-- -------------- End of header ------------------ --><!-- ----------------------------------------------- -->
@ -220,10 +220,10 @@ objects of class</font> <b><font face="Arial,Helvetica"><font size=+1><a href=".
parents, according to user-defined probabilities.&nbsp; These probabilities
are defined with all other <a href="#parametres">parameters</a>, and will
be passed to the <b><tt><font color="#FF6666"><font size=+1>eoSGA </font></font></tt></b><a href="#parametres">algorithm</a><font color="#000000">.&nbsp;
For more details on these classes, go to the <a href="eoOperators.html#crossover">top-down
corresponding pages</a>, or to their respective documentation pages.</font><br>
<BR></li>
For more details on these classes, go to the <a href="eoOperators.html#crossover">algorithm-based
corresponding pages</a>, or to their respective documentation pages.</font></li>
<br>&nbsp;
<ul>
<li>
<a href="FirstBitGA.html#operators">Bit</a> The crossover <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/class_eobincrossover.html">eoBinCrossover</a></font></font></b>
@ -402,8 +402,8 @@ the same sub-dir of dir Tutorial than the lesson itself (see <a href="NoWay.html
<hr WIDTH="100%"><a href="eoLesson2.html">Lesson 2</a> -
<a href="eoTutorial.html">Tutorial
main page</a> -
<a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
page</a> - <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
<a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based</a>
- <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
documentation</a></font></font>
<br>
<hr>

View file

@ -11,8 +11,8 @@
<a href="eoLesson3.html">Lesson
3</a> -
<a href="eoTutorial.html">Main page</a> -
<a href="eoTopDown.html">Top-Down</a>
- <a href="eoBottomUp.html">Bottom-up</a> - <a href="eoProgramming.html">Hints</a>
<a href="eoTopDown.html">Algorithm-Based</a>
- <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Hints</a>
-<font size=+1> <b><font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font></b></font>
<br>
@ -37,7 +37,7 @@ operators</font> of the same type</li>
stopping criteria</font></li>
<li>
use <font color="#009900"><a href="#evolution">alternate</a> selection/replacement</font>
use <font color="#009900"><a href="evolution">alternate</a> selection/replacement</font>
engines, deviating from the pure generational GA</li>
</ul>
@ -67,9 +67,7 @@ argument is a <a href="binary_value.html">vector&lt;bool></a> or a <a href="real
and not an unknown type. This will allow to use the same file for any EO
object that is a sub-class of the corresponding STL vector class.</font></li>
<br>&nbsp;
<p>&nbsp;
<p><b><font color="#FF0000">Note:</font></b> <font color="#000000">Also,
<p><br><b><font color="#FF0000">Note:</font></b> <font color="#000000">Also,
a non-templatized fitness can be </font><b><font color="#FF6600">compiled
separately</font></b><font color="#000000"> (not done here) into an object
file once and for all (<a href="eoProgramming.html#templates">remember</a>
@ -86,8 +84,6 @@ requires.</font></li>
<br>&nbsp;
<p>&nbsp;
<br>&nbsp;
<br>&nbsp;
<p><b><font color="#FF0000">Note:</font></b> <font color="#000000">In the
previous files (<a href="FirstBitGA.html#eval">Bit</a> - <a href="FirstRealGA.html#eval">Real</a>)
, the last 2 types were deduced from the first (2nd argument = fitness
@ -111,9 +107,7 @@ You can also use different initializers and call them in turn through the
call to <a href="../../doc/html/class_eopop.html#a2">pop.append()</a> function
(see <a href="#exercise2">Exercise 2</a>).</font></li>
<br>&nbsp;
<p>&nbsp;
<p><b><font color="#FF0000">Note</font><font color="#CC33CC">: </font></b><font color="#000000">Don't
<p><br><b><font color="#FF0000">Note</font><font color="#CC33CC">: </font></b><font color="#000000">Don't
forget to </font><b><font color="#CC0000">evaluate the population</font></b><font color="#000000">:
the eoPop has no idea of the eval function, so it has to be done from outside!!!</font>
<br>&nbsp;
@ -134,7 +128,7 @@ or Quad (for crossovers, of class <b><font face="Arial,Helvetica"><font size=+1>
is derived from the corresponding eoxxxOp class. When applying the eoPropCombinedxxxOp,
one of the eoxxxOp it contains is chosen by a <a href="../../doc/html/class_eorng.html#a12">roulette
wheel,</a> according to their respective rates, and is applied to the arguments.
For more details on these classes, go to the <a href="eoOperators.html#crossover">top-down
For more details on these classes, go to the <a href="eoOperators.html#crossover">algorithm-based
corresponding pages</a>, or to their respective documentation pages.</font></li>
<ul>
@ -340,8 +334,8 @@ and <font color="#3366FF">stopping criteria</font> here).</li>
<a href="eoLesson3.html">Lesson
3</a> -
<a href="eoTutorial.html">Main page</a> -
<a href="eoTopDown.html">Top-Down</a>
- <a href="eoBottomUp.html">Bottom-up</a> - <a href="eoProgramming.html">Hints</a>
<a href="eoTopDown.html">Algorithm-Based</a>
- <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Hints</a>
- <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
documentation</a></font></font></b>
<br>

View file

@ -10,8 +10,8 @@
<a href="eoLesson4.html">Lesson
4</a> -
<a href="eoTutorial.html">Main page</a> -
<a href="eoTopDown.html">Top-Down</a>
- <a href="eoBottomUp.html">Bottom-up</a> - <a href="eoProgramming.html">Hints</a>
<a href="eoTopDown.html">Algorithm-Based</a>
- <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Hints</a>
- <b><font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO documentation</a></font></b>
<br>
<hr WIDTH="100%"><!-- -------------- End of header ------------------ --><!-- ----------------------------------------------- -->
@ -135,7 +135,7 @@ we will not go into details: e.g. we will not tell you that the
<b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/class_eovalueparam.html">eoValueParam</a></font></font></b>
is actually a templatized sub-class of abstract class eoParam (oops, I
said it!), nor will we deal with parameters outside their use from an eoParser.
See the parameter section of the Bottom-up tutorial, or wait until <a href="eoLesson4.html">lesson
See the parameter section of the Component-Based tutorial, or wait until <a href="eoLesson4.html">lesson
4</a>).</font></li>
<li>
@ -519,8 +519,8 @@ construct.
<a href="eoLesson4.html">Lesson
4</a> -
<a href="eoTutorial.html">Main page</a> -
<a href="eoTopDown.html">Top-Down</a>
- <a href="eoBottomUp.html">Bottom-up</a> - <a href="eoProgramming.html">Hints</a>
<a href="eoTopDown.html">Algorithm-Based</a>
- <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Hints</a>
-<b> <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO documentation</a></font></b>
<br>
<hr>

View file

@ -2,64 +2,111 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (X11; U; Linux 2.2.17-21mdksmp i686) [Netscape]">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (X11; U; Linux 2.2.17-21mdk i686) [Netscape]">
<title>Variation Operators</title>
</head>
<body text="#000000" link="#0000EF" vlink="#51188E" alink="#FF0000" background="beige009.jpg">
<a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
page</a> - <a href="eoProgramming.html">Programming hints</a> - <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
<b><font color="#FF0000">General</font></b>: <a href="eoTopDown.html">Algorithm-Based
page</a> - <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Programming
hints</a> - <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
documentation</a></font></font></b>
<br>
<hr WIDTH="100%">
<br><b><font color="#FF0000">TOC</font></b> : <a href="#introduction">Introduction</a>
<br><b><font color="#FF0000">Local</font></b>: <a href="#introduction">Introduction</a>
- <a href="#crossover">Crossover</a> - <a href="#mutation">Mutation</a>
- <a href="#proportional_simple">Simple combinations</a> - <a href="#general">General
Operators</a> - <a href="#general_combination">General combinations</a>
- <a href="#proportional_simple">Combinations</a> - <a href="#general">General
Operators</a> - <a href="#populators">Populators</a> - <a href="#general_combination">General
combinations</a>- <a href="#advanced_general">Advanced operators</a>
<br>
<hr WIDTH="100%">
<center>
<h1>
<b><font color="#CC0000">Variation Operators</font></b></h1></center>
<p><br><a NAME="introduction"></a><b><font color="#000099"><font size=+2>Variation
<a NAME="introduction"></a><b><font color="#000099"><font size=+2>Variation
Operators</font></font></b>
<br>Variation operators modify individuals, or, equivalently, move them
in the search space. They are almost always <b><font color="#FF6600">stochastic</font></b>,
i.e. they are based on random numbers, or equivalently, perform random
modifications of their arguments. Variation operators are classified depending
on the number of arguments they use and/or modify.
<p>Variation operators involving two individuals are called <a href="#crossover">crossover
operators</a>. They can either modify one of the parents according to the
material of the other parent, or modify both parents. In EO, the former
are called Binary operators and the latter Quadratic operators.
<br>Variation operators involving one single individual are called <a href="#mutation">mutation
operators.</a>
<br>In EO you can also define and use variation operators that generate
any number of offspring from any number of parents (sometimes termed <b><font color="#FF6600">orgy</font></b>
operators). They are called <a href="#general">general operators</a>.
<p>Though most the historical evolutionary algorithms used at most one
crossover and one mutation (see e.g. the Simple Genetic Algorithm in <a href="eoLesson1.html">lesson1</a>),
the trend now in evolutionary computation is to combine operators, choosing
at run-time and for each individual which operator to apply. This can be
done in the framework of simple operators, combining for instance several
mutations into a variation operator that chooses one of them according
to user-defined preferences: such combinations are called in EO <a href="#proportional_simple">proportional
combination of simple operators</a> (see e.g. how to define and use such
combined operators in the SGA of <a href="eoLesson2.html">lesson2</a>).
<p>Finally, there are many other ways to combine different variation operators
of different kind. Within EO, you can choose to apply many different types
of operator to the population, either in turn (this is called sequential
combination) or by randomly choosing among a set of operators at a given
time (this is proportional combination, generalizing the one defined for
simple operators). You can of course mix and interleave both approaches
at will, and this is described as <a href="#general_combination">general
combination of general operators</a>.
<p><b><font color="#FF0000">EO implementation</font></b>: all variation
operators in EO derive from the base (abstract) class <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/class_eoop.html">eoOp</a></font></font></b>
(as usual, click to see the inheritance diagram). blabla
<br>
in the search space. In Evolutionary Algorithms, varitaion operators are
almost always <b><font color="#FF6600">stochastic</font></b>, i.e. they
are based on random numbers, or equivalently, perform random modifications
of their arguments. Variation operators are classified depending on the
number of arguments they use and/or modify.
<ul>
<li>
Variation operators involving <b><font color="#FF6600">two individuals</font></b>
are called <a href="#crossover">crossover operators</a>. They can either
modify one of the parents according to the material of the other parent,
or modify both parents. In EO, the former are called Binary operators and
the latter Quadratic operators.</li>
<li>
Variation operators involving <b><font color="#FF6600">one single individual</font></b>
are called <a href="#mutation">mutation operators.</a></li>
<li>
Straightforward extensions of these simple operators allow to combine them:
in
<a href="#proportional_simple">proportional combinations</a>, one operator
is chosen among a given set of operators of same arity according to some
weights.</li>
<li>
In EO you can also define and use variation operators that generate any
number of offspring from any number of parents (sometimes termed <b><font color="#FF6600">orgy</font></b>
operators). They are called <a href="#general">general operators</a>.</li>
<li>
However, the interface of such operators was designed for their use inside
<a href="#general_combination">general
combinations</a>: you can use <b><font color="#FF6600">proportional combination</font></b>,
in which one operator is chosen among a given set of operators of same
arity according to some weights, as for simple operators except that operators
of different arities can be mixed, but you can also use <b><font color="#FF6600">sequential
combinations</font></b>, where different operators&nbsp; are applied in
turn with given probability. But you can also embed any of such combinations
at any depth.</li>
<li>
The price to pay for that is that you must use an instermediate class to
access the individuals, the <a href="#populators">eoPopulator</a> class.</li>
<li>
Thanks to that class, it also become easy to design <a href="#advanced_general">advanced
operators</a>, such as crossover operators where the mate is chosen according
to <b><font color="#FF6600">sexual preference</font></b> rather than fitness-based
preferences.</li>
</ul>
<b><font color="#FF0000">EO classes for variation operators</font></b>:
<ul>
<li>
<b><font color="#FF0000">Base classes</font></b>: all variation operators
in EO derive from the base (pure abstract) class <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/class_eoop.html">eoOp</a></font></font></b>
(as usual, click to see the inheritance diagram).&nbsp; Four (also abstract)
classes derive from <b><font color="#CC33CC">eoOp</font></b>, namely <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/class_eomonop.html">eoMonOp</a></font></font></b>
(for <a href="#mutation">mutations</a>), <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/class_eobinop.html">eoBinOp</a></font></font></b>
and <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/class_eoquadop.html">eoQuadOp</a></font></font></b>
(for <a href="#crossover">crossover</a>) and <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/class_eogenop.html">eoGenOp</a></font></font></b>
for <a href="#general">all other operators</a>.</li>
<li>
<b><font color="#FF0000">Combined classes</font></b>: those classes combine
variation operators, and are variation operators by themselves: the simple
variation operators can be combined into the corresponding <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/class_eoproportionalcombinedmonop.html">eoProportionalCombinedMonOp</a></font></font></b>,
<b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/class_eoproportionalcombinedbinop.html">eoProportionalCombinedBinOp</a></font></font></b>
and <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/class_eoproportionalcombinedquadop.html">eoProportionalCombinedQuadOp</a></font></font></b>.
The general operators <b><font color="#CC33CC">eoGenOp</font></b> can be
combined into some <b><font face="Arial,Helvetica"><font color="#000000"><font size=+1><a href="../../doc/html/class_eoopcontainer.html">eoOpContainer</a></font></font></font></b>,
abstract class with two implementations, <b><font face="Arial,Helvetica"><font color="#000000"><font size=+1><a href="../../doc/html/class_eoproportionalopcontainer.html">eoProportionalOpContainer</a></font></font></font></b>
and <b><font face="Arial,Helvetica"><font color="#000000"><font size=+1><a href="../../doc/html/class_eosequentialopcontainer.html">eoSequentialOpContainer</a></font></font></font></b></li>
<li>
<b><font color="#FF0000">Related classes</font></b>: General operators
of class <b><font color="#CC33CC">eoGenOp</font></b> can only be used through
the <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/class_eopopulator.html">eoPopulator</a></font></font></b>
class.</li>
</ul>
<hr WIDTH="100%">
<br><a NAME="crossover"></a><b><font size=+1><font color="#000099">Simple
<a NAME="crossover"></a><b><font size=+1><font color="#000099">Simple
operators: </font><font color="#FF0000">Crossover</font></font></b>
<p>The characteristic of crossover operators is that they involve two parents.
However, there are crossover operators that generate two parents, and some
@ -112,7 +159,6 @@ you are using for instance an SGA, this (<a href="FirstRealGA.html#operators">de
<a href="FirstRealGA.html#generation">usage</a>).
See also the different ways that are described below, encapsulating the
operators into combined operators objects.
<br>&nbsp;
<p><a NAME="writing_crossover"></a><b><font color="#FF0000">Writing a crossover
operator:</font></b>
<br>There are only two things to modify in the <a href="../Templates/crossover.tmpl">template
@ -121,7 +167,7 @@ creating!)
<ul>
<li>
The <font color="#FF6600">constructor</font>, where you pass to the object
any useful parameter</li>
any useful parameter (see the private data at end of class definition).</li>
<li>
The <font color="#FF6600">operator()</font> method, which performs the
@ -130,12 +176,11 @@ actual crossover.</li>
<li>
<b><font color="#FF6600">Warning</font></b>: don't forget to <b><font color="#FF6600">invalidate</font></b>
the fitness of any individual that has actually been modified. Otherwise,
the l<a href="eoEval.html#lazy">azy fitness evaluation procedure</a> in
EO will not know it should compute the fitness again and will keep the
the <a href="eoEval.html#lazy">lazy fitness evaluation procedure</a> in
EO might not know it should compute the fitness again and will keep the
old value.</li>
</ul>
<p><br>
<hr WIDTH="100%"><a NAME="mutation"></a><b><font color="#000099"><font size=+1>Simple
operators: </font></font><font color="#FF0000"><font size=+2>Mutation</font></font></b>
<br>Mutation operators modify one single individual. The corresponding
@ -177,7 +222,7 @@ creating!)
<ul>
<li>
The <font color="#FF6600">constructor</font>, where you pass to the object
any useful parameter</li>
any useful parameter (see the private data at end of class definition).</li>
<li>
The <font color="#FF6600">operator()</font> method, which performs the
@ -187,80 +232,287 @@ actual crossover.</li>
<b><font color="#FF6600">Warning</font></b>: don't forget to <b><font color="#FF6600">invalidate</font></b>
the fitness of the individual - if it has actually been modified. Otherwise,
the <a href="eoEval.html#lazy">lazy fitness evaluation procedure</a> in
EO will not know it should compute the fitness again and will keep the
EO might not know it should compute the fitness again and will keep the
old value.</li>
</ul>
<hr WIDTH="100%">
<br><a NAME="proportional_simple"></a><b><font size=+1><font color="#000099">Combining
<a NAME="proportional_simple"></a><b><font size=+1><font color="#000099">Combining
simple operators: </font><font color="#FF0000">proportional combinations</font></font></b>
<p>The best thing to do is to go to the <a href="eoLesson2.html#combined_operators">Lesson2</a>
of the tutorial, where everything is explained.
of the tutorial, where everything is explained. You will find out how you
can use
<br>several mutations (respectiveley crossovers) as a single operator:
every time the operator is called, one of the available operators is chosen
by some roulette wheel selection using realtive weights.
<p>
<hr WIDTH="100%"><a NAME="general"></a><b><font color="#000099"><font size=+2>General
Operators</font></font></b>
<p>General operators in EO are variation operators that are neither simple
mutations nor simple crossovers. They can involve any number of parents,
and create any number of offspring. Moreover, they can make use of different
ways to get the parents they will involve, e.g. they can use a different
selector for each of the parents they need to select.
<p>The corresponding EO class is called <b><font color="#CC33CC">eoGenOp</font></b>.
and it is as usual templatized by the type of individual it can handle
(see documentation for <b><font face="Arial,Helvetica"><font size=+1><a href="doc/html/class_eomonop.html">eoGenOp</a></font></font></b>
:-)
<p><a NAME="interface"></a><b><font color="#FF0000">Interface</font></b>:
<br><font color="#000000">The interface for </font><b><font color="#CC33CC">eoGenOp</font></b><font color="#000000">
is based on that of another class, called </font><b><font color="#999900">eoPopulator</font><font color="#CC33CC">.
</font></b>An
<b><font color="#999900">eoPopulator</font></b>
is a <b><font color="#FF6600">population</font></b>, but also behaves like
an <b><font color="#FF6600">iterator</font></b> over a population (hence
the name, <b><font color="#FF6600">Popul</font></b>ation-Iter<b><font color="#FF6600">ator</font></b>).
<p><a NAME="populator_interface"></a>The <b><font color="#FF6600">basic
interface</font></b> of an <b><font color="#999900">eoPopulator</font></b>
(see also <a href="../../doc/html/class_eogenop.html">the documentation</a>,
of course) is the following: Individuals are accessed through the <b><tt><font color="#993300">operator*</font></tt></b>;
Basic iterator operations are available, like (pre)incrementation through
<b><tt><font color="#993300">operator++</font></tt></b>,
position management through <b><tt><font color="#993300">seekp</font></tt></b>
(returns the current position) and <b><tt><font color="#993300">tellp</font></tt></b>
(go to a given position); Individuals can also be <b><font color="#993300">insert</font></b>ed
and <b><font color="#993300">erase</font></b>d at current position using
the corresponding methods; last but not least, as the individuals are returned
by reference, it is mandatory to ensure that they will not be moved around
later: the memory management&nbsp; routine reserve is called whenever there
is a chance to add some individuals in the population.
<p>This results in the following general interface for an <b><font color="#CC33CC">eoGenOp</font></b>:
It receives as argument an <b><font color="#999900">eoPopulator</font></b>,
gets the individuals it needs using the <b><tt><font color="#993300">operator*</font></tt></b>,
and must handle the positinning of the&nbsp; using the <b><tt><font color="#993300">operator++</font></tt></b>
method.
<p><b><tt><font color="#993300">void operator()(</font><font color="#999900">eoPopulator</font><font color="#993300">&amp;
_pop)</font></tt></b>
<br><b><tt><font color="#993300">{</font></tt></b>
<br><tt><font color="#993300"><b>&nbsp; EOT &amp; eo1 = *_pop; </b>// get
(select if necessary) the guy</font></tt>
<br><tt><font color="#993300"><b>&nbsp; ++_pop;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</b>// advance</font></tt>
<br><tt><font color="#993300"><b>&nbsp; EOT &amp; eo2 = *_pop; </b>// get
(select if necessary) the guy</font></tt>
<br><tt><font color="#993300"><b>&nbsp; ++_pop;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</b>// advance</font></tt>
<br><b><tt><font color="#993300">...</font></tt></b>
<br><tt><font color="#993300"><b>&nbsp; EOT &amp; eoN = *_pop; </b>// get
(select if necessary) the guy</font></tt>
<br><tt><font color="#993300"><b>&nbsp; ++_pop;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</b>// advance</font></tt>
<p><tt><font color="#993300">// do whatever the operator is supposed to
do</font></tt>
<br><b><tt><font color="#993300">}</font></tt></b>
<p><b><font color="#FF6600">What happens next?</font></b> Well, it all
depends on how many parents and how many offspring your general op needs:
<ul>
<li>
If the number of generated offspring is <font color="#FF6600">equal</font>
to the number of parents, the operator simply needs to modify them (they
are passed by reference, no useless copy takes place).</li>
<li>
If the operator produces <font color="#FF6600">more offspring than there
were parents</font>, it needs to insert them into the list using the <b><tt><font color="#993300">insert</font></tt></b>
method of the class <b><font color="#999900">eoPopulator</font></b> as
in the following:</li>
<br>&nbsp;
<p>
<p>&nbsp;
<p><b><tt><font color="#993300">void operator()(</font><font color="#999900">eoPopulator</font><font color="#993300">&amp;
_pop)</font></tt></b>
<br><b><tt><font color="#993300">{</font></tt></b>
<br><tt><font color="#993300"><b>&nbsp; EOT &amp; eo1 = *_pop; </b>// get
(select if necessary) the guy</font></tt>
<br><tt><font color="#993300"><b>&nbsp; ++_pop;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</b>// advance</font></tt>
<br><tt><font color="#993300">&nbsp; // Now create second offspring - eo1
is modified too!</font></tt>
<br><b><tt><font color="#993300">&nbsp; EOT eo2 = create_individual(eo1);</font></tt></b>
<br><tt><font color="#993300">&nbsp; // inserts eo2 in _pop after eo1</font></tt>
<br><b><tt><font color="#993300">&nbsp; _pop.insert(eo2);</font></tt></b>
<br><b><tt><font color="#993300">...</font></tt></b>
<br>Of course the size of the resulting population will grow - and you
should have a replacement procedure that takes care of that.
<li>
The case where <font color="#FF6600">more parents are needed than offspring
will be created</font> is a little more delicate: think about <b><font color="#CC33CC">eoBinOp</font></b>,
and try to imagine the reasons why no crossover of that class asre used
in the first lessons of the tutorial, within the SGA framework. There are
two possibilities:</li>
<ul>
<li>
If you think "generational", the first idea is to get the parents from
outside the curent list, so the total number of (intermediate) offspring
is always equal to the initial population size. By chance, the <b><font color="#999900">eoPopulator</font></b>has
a handle on the initial population that was used to start the process,
and you can access it from inside the GenOp method. For instance
<p><b><tt><font color="#993300">void operator()(</font><font color="#999900">eoPopulator</font><font color="#993300">&amp;
_pop)</font></tt></b>
<br><b><tt><font color="#993300">{</font></tt></b>
<br><tt><font color="#993300"><b>&nbsp; EOT &amp; eo1 = *_pop; </b>// get
(select if necessary) the guy</font></tt>
<br><tt><font color="#993300"><b>&nbsp; ++_pop;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b>// advance</font></tt>
<br><b><tt><font color="#993300">&nbsp; const EOT &amp; eo2 = </font><font color="#009900">select</font><font color="#993300">(_pop.source());</font></tt></b>
<p>where select is any selector you like. Note the const: you are not allowed
to modify an element of the original population (but you could of course
have copied it!). Now to find out where that selector comes from, you'll
have to wait until next section. If you can't wait, go directly there.</li>
<li>
If you don't care about the size of the offspring population, you can use
the delete method of the class <b><font color="#999900">eoPopulator</font></b>.
For instance
<br><b><tt><font color="#993300">void operator()(</font><font color="#999900">eoPopulator</font><font color="#993300">&amp;
_pop)</font></tt></b>
<br><b><tt><font color="#993300">{</font></tt></b>
<br><tt><font color="#993300"><b>&nbsp; EOT &amp; eo1 = *_pop; </b>// get
(select if necessary) the guy</font></tt>
<br><tt><font color="#993300"><b>&nbsp; ++_pop;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b>// advance</font></tt>
<br><tt><font color="#993300"><b>&nbsp; EOT &amp; eo2 = *_pop; </b>// get
(select if necessary) the guy</font></tt>
<br><tt><font color="#993300"><b>&nbsp; ++_pop;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b>// advance</font></tt>
<br><tt><font color="#993300">&nbsp; // do whatever needs to be done, modifying
eo1 but not eo2</font></tt>
<br><tt><font color="#993300"><b>&nbsp; _pop.delete();&nbsp;&nbsp; </b>//
removes (untouched) eo2 from the list</font></tt></li></ul>
</ul>
<b><font color="#FF6600">Warning</font></b>: if you use operators that
have different number of parents than offspring, you are deviating from
the simple generational approach. Be careful to have the proper replacement
procedure to take care of the population size: in most instances of algorithms
that come within EO, this is enforced (an exception is thrown if population
size varies from one genertaion to the other) but this might not be true
for all forthcoming EO algorithms.
<p><b><font color="#FF0000">Using general operators</font></b>:
<br>Directly applying general operators to given individuals is impossible
in EO, due to its <a href="#interface">interface</a>. You need the help
of an individual dispenser of class <b><font color="#999900">eoPopulator</font></b>.
But anyway general operators were thought to be used mainly in combination
of one another, as described <a href="#general_combination">below</a>.
<p><a NAME="writing_mutation"></a><b><font color="#FF0000">Writing a general
operator:</font></b>
<br>There are many things to modify in the <a href="../Templates/mutation.tmpl">template
class definitions</a> provided.
<ul>
<li>
The <font color="#FF6600">constructor</font>, where you pass to the object
any useful parameter (see private data at end of class definition).</li>
<li>
The <font color="#FF6600">operator()</font> method, which performs the
actual crossover. Remember you must use the argument <b><font color="#999900">eoPopulator</font></b>to
access the members of the [p[ulation in turn (method
<b><tt><font color="#993300">operator*</font></tt></b>),
you may use the initial population (method <b><tt><font color="#993300">source()</font></tt></b>),
as well as the <b><tt><font color="#993300">insert</font></tt></b> or <b><tt><font color="#993300">delete</font></tt></b>
methods.</li>
<br><b><font color="#FF6600">Warning</font></b>: as usual, don't forget
to <b><font color="#FF6600">invalidate</font></b> the fitness of the individual
- if it has actually been modified. Otherwise, the <a href="eoEval.html#lazy">lazy
fitness evaluation procedure</a> in EO will not know it should compute
the fitness again and will keep the old value.</ul>
<hr WIDTH="100%"><a NAME="populators"></a><b><font color="#000099"><font size=+2>The
populators:</font></font></b>
<br>The public interface class <b><font color="#999900">eoPopulator</font></b>
has been described above. However, a protected method, termed <b><tt><font color="#993300">select</font></tt></b>,&nbsp;
is used inside the object to get new parents for the following operator,
and its implementation distinguishes two types of <b><font color="#999900">eoPopulator</font></b>:
<ul>
<li>
The <b><font color="#999900">eoSeqPopulator</font></b> gets new parents
from its source (the initial population). When the source is exhausted,
an exception if thrown. The idea of such pooulator is to start from a population
of already selected individuals.</li>
<br>The programmer should hence be very careful that the number of available
parents matches the requirements of the operators when using an <b><font color="#999900">eoSeqPopulator</font></b>
object.
<li>
The <b><font color="#999900">eoSelectivePopulator</font></b> , on the opposite,
always gets new parents using its private <b><font color="#009900">eoSelectOne</font></b>
object (passed at construct time). Hence it can handle any number of parents
at will. The idea of such populator is to handle the whole <b><font color="#FF6600">breeding</font></b>
process, i.e. selection and variation operators.</li>
</ul>
An immediate consequence is that if you are not sure of the numebr of&nbsp;
parents you will need in some operators (e.g. because of some stochastic
proportional selection ebtween operators that don't need the same number
of parents, then you <b><font color="#FF6600">must</font></b> use an <b><font color="#CC33CC">eoSelectivePopulator</font></b>
to apply the variation operators to the population.
<br>
<hr WIDTH="100%"><a NAME="general_combination"></a><b><font color="#000099"><font size=+2>General
Combinations:</font></font></b>
<p>There are two main ways to use and combine general operators in EO:
<br>There are two main ways to use and combine general operators in EO:
the proportional combination, similar to what has been described for simple
operators above, and the sequential combination, which amounts to apply
all operators in turn to a bunch of individuals, each operator being applied
with a specific probability.
<p><b><font color="#FF0000">Proportional combinations</font></b> behave
like a unique operator: when it is called upon a population of candidates,
an <b><font color="#CC33CC">eoProportionalOpContainer</font></b> enters
the following loop:
<p>while there are individuals left in the candidate population
operators <a href="#proportional_simple">above</a>, and the sequential
combination, which amounts to apply all operators in turn to a bunch of
individuals, each operator being applied with a specific probability.
<p><a NAME="prop_container"></a><b><font color="#FF0000">Proportional combinations</font></b>
<br>When called upon a population (through an <b><font color="#999900">eoPopulator</font></b>
object), an <b><font color="#CC33CC">eoProportionalOpContainer</font></b>
enters the following loop:
<p>while there are individuals left in the list
<ul>
<li>
choose one of the included operators according to their relative rates
by some roulette wheel random choice</li>
(by some roulette wheel random choice)</li>
<li>
find out the number of parents that it requires (haha, the tricky part
if e.g. sequentialOp are imbedded :-)</li>
applies the chosen operator. The parents are dispensed to the operator
from the list on demand.</li>
<li>
gets the required number of individual from the candidates,</li>
What happens next exactly depends on the type of operator, but basically,
some of the parents get modified, some might get removed from the list
and some new individual might get inserted on the list.</li>
<li>
applies the chosen operator to those parents, generating a list of offspring</li>
<li>
removes the parents from the candidate population</li>
<li>
append the offspring to the result population</li>
updates the list pointer (if needed) to the individual following the ones
that just have been modified/inserted/deleted.</li>
</ul>
<b><font color="#FF0000">Sequential combinations</font></b> behave like
a unique operator: when it is called upon a population of candidates, an
<a NAME="seqential_container"></a><b><font color="#FF0000">Sequential combinations</font></b>
<br>When it is called upon a list of pending candidates, an
<b><font color="#CC33CC">eoSequentialOpContainer</font></b>
enters the following loop:
<p>for all operators it contains, apply the operator to the candidate population,
that is
<p>mark the current position
<br>for all operators it contains,
<ul>
<li>
start with an empty offspring population</li>
go to marked position</li>
<li>
get the number of parents the operator at hand requires (haha, the tricky
part if the operator is an eoProportionalOpContainer!!!)</li>
until <a href="#container_and_populator">current end of population</a>
is reached do</li>
<ul>
<li>
flip a coin according to the operator rate.</li>
<ul>
<li>
If true, apply the operator to the parents. The current parents can be
modified, or some can be deleted from the list, or some offspring can be
inserted in the list.</li>
<li>
flip a coin according to the operator rate. It heads, apply the operator
to the parents to generate some offspring, and append the generated offspring
to the offspring population. If tails, directly append the parents to the
offspring population</li>
If false, move the pointer over the required number of parents (i.e. don't
modify thoses parents)</li>
</ul>
<li>
until no more parents (or an insufficient number of parents) are left in
the population. The remaining parents, if any, are copied in the offspring
population</li>
Next pending parent</li>
</ul>
<li>
make the offspring population the parentpopulation for next operator.</li>
Next operator</li>
</ul>
<font color="#FF6600">Remark:</font>The eoSGATransform presented in <a href="eoLesson2.html#transform">Lesson2</a>
can be viewed as a particular type of <b><font color="#CC33CC">eoSequentialOpContainer</font></b>.
@ -268,29 +520,27 @@ It was not coded that way in order to provide a gradual introduction to
all concepts.
<br><font color="#FF6600">Exercise</font>: write the code to perform an
eoSGA using the eoOpContainer constructs.
<p><font color="#FF6600">Remark</font>: there is actually a single list
of individuals that is maintained through a clever mecahnism of mark, rewind
and unmark, but that's a purely technical matter. If you are interested,
go and check the eoOpContainer and the eoSequentialOpContainer code.
<br>&nbsp;
<p><b><font color="#FF0000">Adding operators to a container:</font></b>
<br>The basic function to add an operator to an eoOpContainer is the method
<b><tt><font color="#993300">add</font></tt></b>
from class eoOpContainer.
<br>It is similar to all other <b><tt><font color="#993300">add</font></tt></b>
methods in other Combined things in eo (as the simple eoProportionalCombinedXXXop
<br>The way to add an operator to an <b><font color="#CC33CC">eoOpContainer</font></b>
is the method
<b><tt><font color="#993300">add</font></tt></b>. It is similar
to all other <b><tt><font color="#993300">add</font></tt></b> methods in
other Combined things in eo (as the simple eoProportionalCombinedXXXop
described above, but also the eoCombinedContinue class or the eoCheckPoint
class).
<br>The syntax is straightforward, and it works with any of the operator
classes defined above:
classes <b><font color="#CC33CC">eoXXXOp</font></b>, where XXX stands for
<b><font color="#CC33CC">Mon,
Bin, Quad </font></b><font color="#000000">or</font><b><font color="#CC33CC">
Gen</font></b>:
<p><b><tt><font color="#993300">someOperatorType&lt;Indi> myOperator;</font></tt></b>
<br><b><tt><font color="#993300">eoXXXOpContainer&lt;Indi> myOpContainer;</font></tt></b>
<br><b><tt><font color="#993300">eoYYYOpContainer&lt;Indi> myOpContainer;</font></tt></b>
<br><tt><font color="#993300"><b>myOpContainer.add(myOperator, rate); </b>//
rate: double whose <b>meaning depends on XXX</b></font></tt>
<p>where XXX can be one of Proportional and Sequential.
<br>However, the way <b><tt><font color="#993300">rate</font></tt></b>
will be used is highly dependent on the type of OpContainer your are creating
there:
<p>where YYY can be one of Proportional and Sequential.
<br><b><font color="#FF6600">Warning</font></b>: the way <b><tt><font color="#993300">rate</font></tt></b>
will be used is highly dependent on the type of <b><font color="#CC33CC">eoOpContainer</font></b>
your are creating there:
<ul>
<li>
The rates for <b><font color="#CC33CC">eoProportionalOpContainer</font></b>
@ -300,21 +550,115 @@ values</font></b>.</li>
<li>
The "rates" for <b><font color="#CC33CC">eoSequentialOpContainer </font></b>actually
are probabilities, i.e. they will be used in a coin-flipping to determine
whether that particuler operator will be applied to the next candidates
at hand. They should be <b><font color="#FF6600">in [0,1]</font></b> (no
error will happen if they are not, but the operator will be applied systematically
- this is equivalent of a rate equal to 1).</li>
are <b><font color="#FF6600">probabilities</font></b>, i.e. they will be
used in a coin-flipping to determine whether that particuler operator will
be applied to the next candidates at hand. They should be <b><font color="#FF6600">in
[0,1]</font></b> (no error will happen if they are not, but the operator
will be applied systematically - this is equivalent of a rate equal to
1).</li>
</ul>
<a NAME="container_and_populator"></a><b><font color="#FF0000">Containers,
Selectors and Populators</font></b>
<br>The way the <b><font color="#CC33CC">eoOpContainer</font></b> are applied
on a population using an <b><font color="#999900">eoPopulator</font></b>
object. But, whereas the behavior of <b><font color="#CC33CC"><a href="#prop_container">eoProportionalOpContainer</a></font></b>
does not depend on the type of <b><font color="#999900">eoPopulator</font></b>,(one
operator is chosen by roulette_wheel, and applied once before control is
given back to the caller), the main loop in method <b><tt><font color="#993300">operator()
</font></tt></b>of
class <b><font color="#CC33CC"><a href="#seqential_container">eoSequentialOpContainer</a></font></b>
iterates <b><tt><font color="#993300">while (!_pop.exhausted())</font></tt></b>
which is interpreted differently depending on the <a href="#populators">type
of <b><font color="#CC33CC">eoPopulator</font></b></a>:
<ul>
<li>
if the argument is an <b><font color="#999900">eoSelectivePopulator</font></b>,
the default position of the eoPopulator, considered as a population iterator,
is at end of population. Individuals are added upon demand of an operator,
and in most cases all operators are applied once. This also depends, however,
on the arities of all operators:</li>
<ul>
<li>
Consider an <b><font color="#CC33CC">eoSequentialOpContainer</font></b>
containing an eoQuadOp and an eoMonOp. The eoQuadOp first asks for two
parents and modifies them. The eoMonOp is then called starting from the
forst of thoses two modified individuals, and is hence applied twice, once
on each parent.</li>
<li>
But consider now an <b><font color="#CC33CC">eoSequentialOpContainer</font></b>
containing an <b><font color="#CC33CC">eoGenOp</font></b> that takes one
parent and generates three offspring, followed by an <b><font color="#CC33CC">eoQuadOp</font></b>.
The <b><font color="#CC33CC">eoGenOp</font></b> will call the selector
to get the parent its need and will modify it and put 2 additional offspring
at end of the population. The <b><font color="#CC33CC">eoQuadOp</font></b>
will then be called on the first of the three outputs of the <b><font color="#CC33CC">eoGenOp</font></b>,
and hence will act upon the frist two of them. But at that point, the populator
iterator will point to the third of the individuals resulting from the
<b><font color="#CC33CC">eoGenOp</font></b>,
and the test <b><tt><font color="#993300">_pop.exhausted()</font></tt></b>
will return false, so the <b><font color="#CC33CC">eoQuadOp</font></b>
will again be called. The second parent it needs will be given by a new
call to the embedded <b><font color="#009900">eoSelectOne</font></b> of
the&nbsp; and everything will go on smoothly, except that a total of 4
offspring will have been generated by application of this particular <b><font color="#CC33CC">eoSequentialOpContainer</font></b>.</li>
</ul>
<p><br>
<hr WIDTH="100%"><b><font color="#FF0000">TOC</font></b> : <a href="#introduction">Introduction</a>
<li>
if the argument is an <b><font color="#999900">eoSeqPopulator</font></b>,
the position of the iterator starts from the beginning of an existing population
(the source populations), and hence when an&nbsp; an <b><font color="#CC33CC">eoSequentialOpContainer</font></b>
is called, it goes through the whole remaining of the population (the test
<b><tt><font color="#993300">_pop.exhausted()</font></tt></b>
only returns true at end of the source population).</li>
<li>
From the above it is easy to see that passing an <b><font color="#999900">eoSeqPopulator</font></b>
to an <b><font color="#CC33CC">eoProportionalOpContainer</font></b> that
contains an <b><font color="#CC33CC">eoSequentialOpContainer</font></b>,
though not technically forbiddden, will most produce something&nbsp; totally
unpredictable, and hence should probably not be used without great care.</li>
</ul>
<hr WIDTH="100%"><a NAME="advanced_general"></a><b><font color="#000099"><font size=+2>Advanced
general operators:</font></font></b>
<p>It is sometimes useful to be able to use a selector from inside an operator
(a typical example is when you want to implement <b><font color="#FF6600">sexual
preferences</font></b>, i.e. choose a mate for a first parent according
to some characteritics of that first parent).
<br>This is made possible in EO because the general operators have a handle
on the initial population through the method source() of the argument eoPopulator
they work on. Their <b><tt><font color="#993300">operator()</font></tt></b>
method shoudl look like
<p><b><tt><font color="#993300">void operator()(</font><font color="#999900">eoPopulator</font><font color="#993300">&amp;
_pop)</font></tt></b>
<br><b><tt><font color="#993300">{</font></tt></b>
<br><tt><font color="#993300"><b>&nbsp; EOT &amp; eo1 = *_pop; </b>// get
(select if necessary) the first guy</font></tt>
<br><b><tt><font color="#993300">&nbsp; ++_pop;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</font></tt></b><tt><font color="#993300">// advance</font></tt>
<br><b><tt><font color="#993300">&nbsp; EOT &amp; eo2 = </font><font color="#009900">findBlonde</font><font color="#993300">(_pop.source());&nbsp;
</font></tt></b><tt><font color="#993300">// select mate</font></tt>
<br><tt><font color="#993300">// do whatever the operator is supposed to
do</font></tt>
<br><b><tt><font color="#993300">}</font></tt></b>
<p>Where does that <b><tt><font color="#009900">findBlonde</font></tt></b>
selector comes from? As usual, you have to attach it to the operator,&nbsp;
in its constructor for instance, which should give something like:
<p><b><tt><font color="#993300">sexualSelectorType&lt;Indi>&nbsp; findBlonde;</font></tt></b>
<br><b><tt><font color="#993300">sexualOperatorType&lt;Indi> yourBrainAndMyBeauty(findBlonde);</font></tt></b>
<p>
<hr WIDTH="100%"><b><font color="#FF0000">Local</font></b>: <a href="#introduction">Introduction</a>
- <a href="#crossover">Crossover</a> - <a href="#mutation">Mutation</a>
- <a href="#proportional_simple">Simple combinations</a> - <a href="#general">General
Operators</a> - <a href="#general_combination">General combinations</a>
<br>
<hr WIDTH="100%"><a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
page</a> - <a href="eoProgramming.html">Programming hints</a> -<b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
- <a href="#proportional_simple">Combinations</a> - <a href="#general">General
Operators</a> - <a href="#populators">Populators</a> - <a href="#general_combination">General
combinations</a>- <a href="#advanced_general">Advanced operators
<hr WIDTH="100%"></a><b><font color="#FF0000">General</font></b>: <a href="eoTopDown.html">Algorithm-Based
page</a> - <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Programming
hints</a> -<b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
documentation</a></font></font></b>
<br>
<hr>
@ -323,5 +667,6 @@ documentation</a></font></font></b>
<br><!-- Created: Mon Oct 30 07:27:13 CET 2000 --><!-- hhmts start -->Last
modified: Fri Dec. 8 2000&nbsp;<!-- hhmts end -->
<br>&nbsp;
</body>
</html>

View file

@ -7,8 +7,8 @@
</head>
<body text="#000000" link="#0000EE" vlink="#551A8B" alink="#FF0000" background="beige009.jpg">
<a href="eoTutorial.html">Tutorial main page </a>-
<a href="eoTopDown.html">Top-Down
page</a> - <a href="eoBottomUp.html">Bottom-up page</a> - <a href="eoProgramming.html">Programming
<a href="eoTopDown.html">Algorithm-Based
page</a> - <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Programming
hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font>
<br>
@ -241,8 +241,8 @@ Blabla</li>
</ul>
<hr WIDTH="100%">
<br><a href="eoTutorial.html">Tutorial main page </a>- <a href="eoTopDown.html">Top-Down
page</a> - <a href="eoBottomUp.html">Bottom-up page</a> - <a href="eoProgramming.html">Programming
<br><a href="eoTutorial.html">Tutorial main page </a>- <a href="eoTopDown.html">Algorithm-Based
page</a> - <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Programming
hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font>
<br>

View file

@ -7,7 +7,7 @@
</head>
<body text="#000000" bgcolor="#C3C2B4" link="#0000EE" vlink="#551A8B" alink="#FF0000">
<a href="eoLesson1.html">Back to Lesson 1</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font>
<br>
@ -144,7 +144,7 @@ apply&lt;EOT>(eval, _pop);</font></tt></b>
</table>
<hr WIDTH="100%"><a href="eoLesson1.html">Back to Lesson 1</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font>
<hr>

View file

@ -3,25 +3,25 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (X11; U; Linux 2.2.17-21mdk i686) [Netscape]">
<title>EO - The Top-Down approach</title>
<title>EO - The Algorithm-Based approach</title>
</head>
<body text="#000000" link="#0000EE" vlink="#551A8B" alink="#FF0000" background="beige009.jpg">
<a href="eoTutorial.html">Tutorial main page
<a href="eoTutorial.html">Tutorial main
page
</a>-
<a href="eoTopDown.html">Top-Down
page</a> - <a href="eoBottomUp.html">Bottom-up page</a> - <a href="eoProgramming.html">Programming
hints</a> - <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
<a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based</a>
- <a href="eoProgramming.html">Programming hints</a> - <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
documentation</a></font></font></b>
<br>
<hr WIDTH="100%">
<center>
<h1>
<font color="#FF0000">EO - The Top-Down approach</font></h1></center>
<font color="#FF0000">EO - The Algorithm-Based approach</font></h1></center>
<p><br>Congratulations - You have chosen the top-down approach!&nbsp; This
means that you want to start from something that already works, and gradually
learn about the more complex constructs. We have prepared a series of "lessons"
for you.
<p><br>Congratulations - You have chosen the algorithm-based approach!&nbsp;
This means that you want to start from something that already works, and
gradually learn about the more complex constructs. We have prepared a series
of "lessons" for you.
<ul>
<li>
<a href="eoLesson1.html">Lesson 1 </a>- a gentle introduction to the <font color="#FF6600">EO
@ -47,8 +47,10 @@ populations,
<b><font color="#3366FF">restart</font></b> stopped runs,
...).</li>
<p><br>Current version (Nov. 29, 2000) stops here, but here are the plans
(subjected to many changes, of course!)
<br>&nbsp;
<p>&nbsp;
<p>Current version (Nov. 29, 2000) stops here, but here are the plans (subjected
to many changes, of course!)
<br>&nbsp;
<li>
Lesson 4 - More about checkpointing: write your first <font color="#FF6600">adaptive
@ -67,14 +69,14 @@ more sophisticated island model (no totally distributed population yet).</li>
<li>
Lesson 7 - ...</li>
</ul>
Of course, in each lesson, you have links to the Bottom-Up page of the
Of course, in each lesson, you have links to the Component-Based of the
corresponding component of an EA you are modifying.
<br>( ... Well, to tell you the truth, as of today, November 28, this is
not true :-)
<br>
<hr WIDTH="100%">
<br><a href="eoTutorial.html">Tutorial main page </a>- <a href="eoTopDown.html">Top-Down
page</a> - <a href="eoBottomUp.html">Bottom-up page</a> - <a href="eoProgramming.html">Programming
<br><a href="eoTutorial.html">Tutorial main page </a>- <a href="eoTopDown.html">Algorithm-Based</a>
- <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Programming
hints</a> - <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
documentation</a></font></font></b>
<br>
@ -82,7 +84,7 @@ documentation</a></font></font></b>
<address>
<a href="mailto:marc@cmapx.polytechnique.fr">Marc Schoenauer</a></address>
<br><!-- Created: DATE --><!-- hhmts start -->Last modified: Fri Nov 28
<br><!-- Created: DATE --><!-- hhmts start -->Last modified: Tue Dec 19
2000&nbsp;<!-- hhmts end -->
</body>
</html>

View file

@ -2,44 +2,46 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Mozilla/4.75 [en] (X11; U; Linux 2.2.17-21mdk i686) [Netscape]">
<title>Tutorial EO</title>
</head>
<body text="#000000" link="#0000EF" vlink="#51188E" alink="#FF0000" background="beige009.jpg">
<a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
page</a> - <a href="eoProgramming.html">Programming hints</a> - <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
<a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based</a>
- <a href="eoProgramming.html">Programming hints</a> - <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
documentation</a></font></font></b>
<hr WIDTH="100%">
<center>
<h1>
<font color="#FF0000">EO Tutorial</font></h1></center>
Welcome to EO - the Evolving Objects library. What is this tutorial good
for?
<br>Well,&nbsp; the short term idea here is to help you <font color="#FF6600">build
Welcome to EO - the Evolving Objects library.
<p>The short term idea of this tutorial is to help you <font color="#FF6600">build
your own Evolutionary Algorithms</font> using EO - while the long term
idea is that you will be able to contribute to EO, and ultimately write
<font color="#FF6600">our</font>
EAs :-)
<h3>
<b><font color="#000099"><font size=+2>About this tutorial</font></font></b></h3>
This tutorial can be used in 2 different ways: top-down and bottom-up.
This tutorial can be used in 2 different ways: algorithm-based and component-based.
<ul>
<li>
<a href="eoTopDown.html">Top-down</a> means you start from a <font color="#FF6600">very
<a href="eoTopDown.html">Algorithm-Based</a> means you start from a <font color="#FF6600">very
simple, ready-to-run algorithm,</font> and gradually modify it, making
it both more powerful and more complex.</li>
<li>
<a href="eoBottomUp.html">Bottom-up</a> means you start by examining the
<font color="#FF6600">components
of an EA one by one</font>, down to the level of complexity you feel comfortable
with, and then build the whole algorithm using those components you need
(or the one you are mastering). Such approach might be viewed as going
through a simplified user guide, too.</li>
<a href="eoBottomUp.html">Component-Based</a> means you start by examining
the
<font color="#FF6600">components of an EA one by one</font>, down to
the level of complexity you feel comfortable with, and then build the whole
algorithm using those components you need (or the one you are mastering).
Such approach might be viewed as going through a simplified user guide,
too.</li>
</ul>
However, it is <b><font color="#FF6600">strongly recommended</font></b>
that you take some time on the first lesson of the Top-down approach to
get familiar with the basic concepts that are used throughout EO. Anyway,
as of today, November 29, the Bottom-up page is not written yet :-)
that you take some time on the first lesson of the Algorithm-Based approach
to get familiar with the basic concepts that are used throughout EO. Anyway,
as of today, December 19, the Component-Based is only very sparsely written
:-)
<p><b><font color="#000099"><font size=+2>Related documents</font></font></b>
<ul>
<li>
@ -162,8 +164,8 @@ that you think could be improved, you are welcome to <a href="mailto:Marc.Schoen
me</a>.
<center>
<p><font color="#000099"><font size=+2>Enjoy!
<hr WIDTH="100%"></font></font><a href="eoTopDown.html">Top-Down page</a>
- <a href="eoBottomUp.html">Bottom-up page</a> - <a href="eoProgramming.html">Programming
<hr WIDTH="100%"></font></font><a href="eoTopDown.html">Algorithm-Based</a>
- <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Programming
hints</a> -<b><font size=+1> <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font></font></b></center>

View file

@ -6,7 +6,7 @@
<title>Tutorial EO</title>
</head>
<body text="#000000" link="#0000EF" vlink="#51188E" alink="#FF0000" background="beige009.jpg">
<a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
<a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
documentation</a></font></font></b>
<hr WIDTH="100%">
@ -22,15 +22,15 @@ idea is that you will be able to contribute to EO, and ultimately write
EAs :-)
<h3>
<b><font color="#000099"><font size=+2>About this tutorial</font></font></b></h3>
This tutorial can be used in 2 different ways: top-down and bottom-up.
This tutorial can be used in 2 different ways: algorithm-based and component-based.
<ul>
<li>
<a href="eoTopDown.html">Top-down</a> means you start from a <font color="#FF6600">very
<a href="eoTopDown.html">Algorithm-Based</a> means you start from a <font color="#FF6600">very
simple, ready-to-run algorithm,</font> and gradually modify it, making
it both more powerful and more complex.</li>
<li>
<a href="eoBottomUp.html">Bottom-up</a> means you start by examining the
<a href="eoBottomUp.html">Component-Based</a> means you start by examining the
<font color="#FF6600">components
of an EA one by one</font>, down to the level of complexity you feel comfortable
with, and then build the whole algorithm using those components you need
@ -38,9 +38,9 @@ with, and then build the whole algorithm using those components you need
through a simplified user guide, too.</li>
</ul>
However, it is <b><font color="#FF6600">strongly recommended</font></b>
that you take some time on the first lesson of the Top-down approach to
that you take some time on the first lesson of the Algorithm-Based approach to
get familiar with the basic concepts that are used throughout EO. Anyway,
as of today, November 29, the Bottom-up page is not written yet :-)
as of today, November 29, the Component-Based is not written yet :-)
<p><b><font color="#000099"><font size=+2>Related documents</font></font></b>
<ul>
<li>
@ -163,8 +163,8 @@ that you think could be improved, you are welcome to <a href="mailto:Marc.Schoen
me</a>.
<center>
<p><font color="#000099"><font size=+2>Enjoy!
<hr WIDTH="100%"></font></font><a href="eoTopDown.html">Top-Down page</a>
- <a href="eoBottomUp.html">Bottom-up page</a> - <a href="eoProgramming.html">Programming
<hr WIDTH="100%"></font></font><a href="eoTopDown.html">Algorithm-Based</a>
- <a href="eoBottomUp.html">Component-Based</a> - <a href="eoProgramming.html">Programming
hints</a> -<b><font size=+1> <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font></font></b></center>

View file

@ -7,7 +7,7 @@
</head>
<body text="#000000" bgcolor="#C3C2B4" link="#0000EE" vlink="#551A8B" alink="#FF0000">
<a href="eoLesson2.html">Back to Lesson 2</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> -<b><font size=+1>
<font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO documentation</a></font></font></b>
<br>
@ -43,7 +43,7 @@ sum += _ind[i] * _ind[i];</font></tt></b>
</table>
<hr WIDTH="100%"><a href="eoLesson2.html">Back to Lesson 2</a> - <a href="eoTutorial.html">Tutorial
main page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-up
main page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Based
page</a> - <a href="eoProgramming.html">Programming hints</a> - <b><font face="Arial,Helvetica"><font size=+1><a href="../../doc/html/index.html">EO
documentation</a></font></font></b>
<hr>