📄 firstbitga.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.76 [en] (X11; U; Linux 2.2.17-21mdksmp i686) [Netscape]"> <title>FirstBitGA.html</title><!-- Changed by: Marc Schoenauer, 29-Nov-2000 --></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">Tutorialmain page </a>- <a href="eoTopDown.html">Algorithm-Based</a> - <a href="eoBottomUp.html">Component-Basedpage</a> - <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><a href="../../doc/html/index.html">EOdocumentation</a></font><br><hr WIDTH="100%"><!-- -------------- End of header ------------------ --><!-- ----------------------------------------------- --><center><h1><font color="#FF0000">Code for FirstBitGA</font></h1></center>Click on the figure to see the corresponding code.<br>In the code, the <a href="eoTutorial.html#colors">colors are meaningfull</a><br>The actual code is in boldface and the comment in normal face.<br><img SRC="EA_tutorial.jpg" USEMAP="#Map" ><map NAME="Map"><!-- Init --><area SHAPE="rect" HREF="#init" COORDS="14,31,135,70"><area SHAPE="rect" HREF="#eval" COORDS="14,110,135,150"><!-- main loop --><area SHAPE="rect" HREF="#representation" COORDS="170,110,295,150"><area SHAPE="rect" HREF="#output" COORDS="280,45,480,70"><area SHAPE="rect" HREF="#stop" COORDS="348,110,430,150"><area SHAPE="rect" HREF="#select" COORDS="495,110,615,150"><area SHAPE="rect" HREF="#representation" COORDS="495,190,615,230"><area SHAPE="rect" HREF="#crossover" COORDS="495,265,625,287"><area SHAPE="rect" HREF="#mutation" COORDS="495,287,625,305"><area SHAPE="rect" HREF="#representation" COORDS="240,270,465,310"><area SHAPE="rect" HREF="#eval" COORDS="170,270,295,310"><area SHAPE="rect" HREF="#replace" COORDS="170,190,295,230"><!-- Center of loop --><area SHAPE="rect" HREF="#generation" COORDS="310,160,485,260"><!-- 4 bottom lines --><area SHAPE="rect" HREF="#operators" COORDS="15,350,260,370"><area SHAPE="rect" HREF="#representation" COORDS="270,350,460,370"><area SHAPE="rect" HREF="#engine" COORDS="15,377,400,397"><area SHAPE="rect" HREF="#eval" COORDS="15,403,230,423"><area SHAPE="rect" HREF="#checkpoint" COORDS="15,430,221,450"><area SHAPE="rect" HREF="#stop" COORDS="221,430,345,450"><area SHAPE="rect" HREF="#stat" COORDS="375,430,445,450"><area SHAPE="rect" HREF="#parametres" COORDS="0,358,278,378"></map><br><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">// FirstBitGA.cpp</font></tt><br><tt><font color="#993300">//-----------------------------------------------------------------------------</font></tt><br><tt><font color="#993300">//*</font></tt><br><tt><font color="#993300">// An instance of a VERY simple BitstringGenetic Algorithm</font></tt><br><tt><font color="#993300">//</font></tt><br><tt><font color="#993300">//-----------------------------------------------------------------------------</font></tt><br><tt><font color="#993300">// standard includes</font></tt><br><tt><font color="#993300"><b>#include <stdexcept> </b>// runtime_error </font></tt><br><tt><font color="#993300"><b>#include <iostream> </b>// cout</font></tt><br><tt><font color="#993300"><b>#include <strstream> </b>// ostrstream,istrstream</font></tt><br><tt><font color="#993300">// the general include for eo</font></tt><br><b><tt><font color="#993300">#include <eo></font></tt></b></td></tr></table><a NAME="representation"></a><table BORDER=0 CELLSPACING=0 COLS=1 WIDTH="100%" BGCOLOR="#FFFFCC" NOSAVE ><tr><td><b><tt><font color="#999900">#include <ga.h></font></tt></b><br><tt><font color="#999900">//-----------------------------------------------------------------------------</font></tt><br><tt><font color="#999900">// define your individuals</font></tt><br><tt><font color="#999900"><b>typedef eoBit<double> Indi; </b>// A bitstring with fitness double</font></tt></td></tr></table><table BORDER=0 CELLSPACING=0 COLS=1 WIDTH="100%" BGCOLOR="#FFCCCC" NOSAVE ><tr><td><tt><font color="#CC0000">//-----------------------------------------------------------------------------</font></tt><br><tt><font color="#CC0000">// a simple fitness function that computesthe number of ones of a bitstring</font></tt><br><tt><font color="#CC0000">// @param _indi A biststring individual</font></tt><br><a NAME="evalfunc"></a><b><tt><font color="#CC0000">double binary_value(constIndi & _indi)</font></tt></b><br><b><tt><font color="#CC0000">{</font></tt></b><br><b><tt><font color="#CC0000"> double sum = 0;</font></tt></b><br><b><tt><font color="#CC0000"> for (unsigned i = 0; i < _indi.size();i++)</font></tt></b><br><b><tt><font color="#CC0000"> sum += _indi[i];</font></tt></b><br><b><tt><font color="#CC0000"> return sum;</font></tt></b><br><b><tt><font color="#CC0000">}</font></tt></b></td></tr></table><a NAME="general"></a><table BORDER=0 CELLSPACING=0 COLS=1 WIDTH="100%" BGCOLOR="#FFCC99" NOSAVE ><tr><td><tt><font color="#993300">//-----------------------------------------------------------------------------</font></tt><br><b><tt><font color="#993300">void main_function(int argc, char **argv)</font></tt></b><br><b><tt><font color="#993300">{</font></tt></b></td></tr></table><a NAME="parametres"></a><table BORDER=0 CELLSPACING=0 COLS=1 WIDTH="100%" BGCOLOR="#CCFFFF" NOSAVE ><tr><td><tt><font color="#3366FF"><b> </b>// all parameters are hard-coded!</font></tt><br><tt><font color="#3366FF"><b> const unsigned int SEED = 42; </b>// seed for random number generator</font></tt><br><tt><font color="#3366FF"><b> const unsigned int T_SIZE = 3; </b>// size for tournament selection</font></tt><br><tt><font color="#3366FF"><b> const unsigned int VEC_SIZE = 8; </b>// Number of bits in genotypes</font></tt><br><tt><font color="#3366FF"><b> const unsigned int POP_SIZE = 20; </b>// Size of population</font></tt><br><tt><font color="#3366FF"><b> const unsigned int MAX_GEN = 100; </b>// Maximum number of generation before STOP</font></tt><br><tt><font color="#3366FF"><b> const float CROSS_RATE = 0.8; </b>// Crossover rate</font></tt><br><tt><font color="#3366FF"><b> const double P_MUT_PER_BIT = 0.01;</b>// probability of bit-flip mutation</font></tt><br><tt><font color="#3366FF"><b> const float MUT_RATE = 1.0; </b>// mutation rate</font></tt></td></tr></table><a NAME="general"></a><table BORDER=0 CELLSPACING=0 COLS=1 WIDTH="100%" BGCOLOR="#FFCC99" NOSAVE ><tr><td><a NAME="random"></a><tt><font color="#993300"><b> </b>//////////////////////////</font></tt><br><tt><font color="#993300"><b> </b>// Random seed</font></tt><br><tt><font color="#993300"><b> </b>//////////////////////////</font></tt><br><tt><font color="#993300"><b> </b>//reproducible random seed:if you don't change SEED above, </font></tt><br><tt><font color="#993300"><b> </b>// you'll aways get the sameresult, NOT a random run</font></tt><br><b><tt><font color="#993300"> rng.reseed(SEED);</font></tt></b></td></tr></table><a NAME="eval"></a><table BORDER=0 CELLSPACING=0 COLS=1 WIDTH="100%" BGCOLOR="#FFCCCC" NOSAVE ><tr><td><tt><font color="#CC0000"><b> </b>/////////////////////////////</font></tt><br><tt><font color="#CC0000"><b> </b>// Fitness function</font></tt><br><tt><font color="#CC0000"><b> </b>////////////////////////////</font></tt><br><tt><font color="#CC0000"><b> </b>// Evaluation: from a plainC++ fn to an EvalFunc Object</font></tt><br><b><tt><font color="#CC0000"> eoEvalFuncPtr<Indi> eval( binary_value );</font></tt></b></td></tr></table><a NAME="init"></a><table BORDER=0 CELLSPACING=0 COLS=1 WIDTH="100%" BGCOLOR="#FFCCFF" NOSAVE ><tr><td><tt><font color="#993399"><b> </b>////////////////////////////////</font></tt><br><tt><font color="#993399"><b> </b>// Initilisation of population</font></tt><br><tt><font color="#993399"><b> </b>////////////////////////////////</font></tt><br><tt><font color="#993399"><b> </b>// declare the population</font></tt><br><b><tt><font color="#993399"> eoPop<Indi> pop;</font></tt></b><br><tt><font color="#993399"><b> </b>// fill it!</font></tt><br><b><tt><font color="#993399"> for (unsigned int igeno=0; igeno<POP_SIZE;igeno++)</font></tt></b><br><b><tt><font color="#993399"> {</font></tt></b><br><tt><font color="#993399"><b> Indi v; </b>// void individual, to be filled</font></tt><br><b><tt><font color="#993399"> for (unsigned ivar=0; ivar<VEC_SIZE; ivar++)</font></tt></b><br><b><tt><font color="#993399"> {</font></tt></b><br><tt><font color="#993399"><b> bool r = rng.flip(); </b>// new value, random in {0,1}</font></tt><br><tt><font color="#993399"><b> v.push_back(r); </b>//append that random value to v</font></tt><br><b><tt><font color="#993399"> }</font></tt></b><br><tt><font color="#993399"><b> eval(v); </b>// evaluate it</font></tt><br><b><tt><font color="#993399"> pop.push_back(v);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -