paradiseo/eo/tutorial/html/eoSGA.html
evomarc 46d9671e05 Changed the links to the EO doc - removed the need for a (Unix) link from
tutorial/html dir to doc/ dir: it's simpler, and I was not able to do
the same thing in Windows anyway!
2000-12-02 08:27:30 +00:00

157 lines
9.5 KiB
HTML

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<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>eoSGA.h</title>
</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
page</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%"><!-- -------------- End of header ------------------ --><!-- ----------------------------------------------- -->
<center>
<h1>
<font color="#FF0000">eoSGA.h</font></h1></center>
<a NAME="start"></a>
<table BORDER=0 CELLSPACING=0 COLS=1 WIDTH="100%" BGCOLOR="#FFCC99" NOSAVE >
<tr NOSAVE>
<td NOSAVE><tt><font color="#993300">//-----------------------------------------------------------------------------</font></tt>
<br><tt><font color="#993300">// eoSGA.h</font></tt>
<br><tt><font color="#993300">//-----------------------------------------------------------------------------</font></tt>
<br><b><tt><font color="#993300">#ifndef _eoSGA_h</font></tt></b>
<br><b><tt><font color="#993300">#define _eoSGA_h</font></tt></b>
<br><b><tt><font color="#993300">#include &lt;eoOp.h></font></tt></b>
<br><b><tt><font color="#993300">#include &lt;eoContinue.h></font></tt></b>
<br><b><tt><font color="#993300">#include &lt;eoPop.h></font></tt></b>
<br><b><tt><font color="#993300">#include &lt;eoSelectOne.h></font></tt></b>
<br><b><tt><font color="#993300">#include &lt;eoSelectPerc.h></font></tt></b>
<br><b><tt><font color="#993300">#include &lt;eoEvalFunc.h></font></tt></b>
<br><b><tt><font color="#993300">#include &lt;eoAlgo.h></font></tt></b>
<br><b><tt><font color="#993300">#include &lt;apply.h></font></tt></b>
<br><tt><font color="#993300">/** The Simple Genetic Algorithm, following
Holland and Goldberg&nbsp;</font></tt>
<br><tt><font color="#993300">*&nbsp; Needs a selector (class eoSelectOne)
a crossover (eoQuadratic,&nbsp;</font></tt>
<br><tt><font color="#993300">*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i.e. a 2->2
operator) and a mutation with their respective rates,&nbsp;</font></tt>
<br><tt><font color="#993300">*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; of course
an evaluation function (eoEvalFunc) and a continuator&nbsp;</font></tt>
<br><tt><font color="#993300">*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (eoContinue)
which gives the stopping criterion. Performs full</font></tt>
<br><tt><font color="#993300">*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; generational
replacement.</font></tt>
<br><tt><font color="#993300">*/&nbsp;</font></tt>
<br><b><tt><font color="#993300">template &lt;class EOT></font></tt></b>
<br><b><tt><font color="#993300">class eoSGA : public eoAlgo&lt;EOT></font></tt></b>
<br><b><tt><font color="#993300">{</font></tt></b>
<br><b><tt><font color="#993300">public :</font></tt></b>
<br><tt><font color="#993300"><b>&nbsp;</b>// added this second ctor as
I didn't like the ordering of the parameters</font></tt>
<br><tt><font color="#993300"><b>&nbsp;</b>// in the one above. Any objection
:-) MS</font></tt>
<br><a NAME="constructor"></a><b><tt><font color="#993300">eoSGA(</font></tt></b>
<br><b><tt><font color="#993300">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eoSelectOne&lt;EOT>&amp;
_select,</font></tt></b>
<br><b><tt><font color="#993300">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eoQuadraticOp&lt;EOT>&amp;
_cross, float _crate,</font></tt></b>
<br><b><tt><font color="#993300">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eoMonOp&lt;EOT>&amp;
_mutate, float _mrate,</font></tt></b>
<br><b><tt><font color="#993300">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eoEvalFunc&lt;EOT>&amp;
_eval,</font></tt></b>
<br><b><tt><font color="#993300">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eoContinue&lt;EOT>&amp;
_cont)</font></tt></b>
<br><b><tt><font color="#993300">&nbsp;&nbsp;&nbsp;&nbsp; : cont(_cont),&nbsp;</font></tt></b>
<br><b><tt><font color="#993300">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mutate(_mutate),&nbsp;</font></tt></b>
<br><b><tt><font color="#993300">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mutationRate(_mrate),</font></tt></b>
<br><b><tt><font color="#993300">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cross(_cross),</font></tt></b>
<br><b><tt><font color="#993300">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; crossoverRate(_crate),</font></tt></b>
<br><b><tt><font color="#993300">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select(_select),</font></tt></b>
<br><b><tt><font color="#993300">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eval(_eval)
{}</font></tt></b></td>
</tr>
</table>
<a NAME="generation"></a>
<table BORDER=0 CELLSPACING=0 COLS=1 WIDTH="100%" BGCOLOR="#FFCC99" NOSAVE >
<tr>
<td><b><tt><font color="#FF6666">&nbsp;void operator()(eoPop&lt;EOT>&amp;
_pop)</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;{</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp; eoPop&lt;EOT> offspring;</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp; do {</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
select(_pop, offspring);</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
unsigned i;</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
for (i=0; i&lt;_pop.size()/2; i++)&nbsp;</font></tt></b>
<br><tt><font color="#FF6666"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{&nbsp;&nbsp; </b>// generates 2 offspring from two parents</font></tt>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if ( rng.flip(crossoverRate) )&nbsp;</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{&nbsp;</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
cross(offspring[2*i], offspring[2*i+1]);</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
for (i=0; i &lt; _pop.size(); i++)&nbsp;</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (rng.flip(mutationRate) )&nbsp;</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
mutate(offspring[i]);</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
_pop.swap(offspring);</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
apply&lt;EOT>(eval, _pop);</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;&nbsp;&nbsp;&nbsp; } while (cont(_pop));</font></tt></b>
<br><b><tt><font color="#FF6666">&nbsp;}</font></tt></b>
<br>&nbsp;</td>
</tr>
</table>
<a NAME="parametres"></a>
<table BORDER=0 CELLSPACING=0 COLS=1 WIDTH="100%" BGCOLOR="#CCFFFF" NOSAVE >
<tr>
<td><b><tt><font color="#3366FF">private :</font></tt></b>
<br><b><tt><font color="#3366FF">&nbsp;eoContinue&lt;EOT>&amp; cont;</font></tt></b>
<br><b><tt><font color="#3366FF">&nbsp;eoMonOp&lt;EOT>&amp; mutate;</font></tt></b>
<br><b><tt><font color="#3366FF">&nbsp;float mutationRate;</font></tt></b>
<br><b><tt><font color="#3366FF">&nbsp;eoQuadraticOp&lt;EOT>&amp; cross;</font></tt></b>
<br><b><tt><font color="#3366FF">&nbsp;float crossoverRate;</font></tt></b>
<br><b><tt><font color="#3366FF">&nbsp;eoSelectPerc&lt;EOT> select;</font></tt></b>
<br><b><tt><font color="#3366FF">&nbsp;eoEvalFunc&lt;EOT>&amp; eval;</font></tt></b></td>
</tr>
</table>
<a NAME="general"></a>
<table BORDER=0 CELLSPACING=0 COLS=1 WIDTH="100%" BGCOLOR="#FFCC99" NOSAVE >
<tr>
<td><b><tt><font color="#993300">};</font></tt></b>
<br><b><tt><font color="#993300">#endif</font></tt></b></td>
</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
page</a> - <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EO
documentation</a></font>
<hr>
<address>
<a href="mailto:marc.schoenauer@polytechnique.fr">Marc Schoenauer</a></address>
<br><!-- Created: Nov 2000 --><!-- hhmts start -->Last modified: Sun Nov
19 19:36:21 2000<!-- hhmts end -->
</body>
</html>