⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 make_op_onemax.html

📁 这是linux下的进化计算的源代码。 === === === === === === === === === === === ===== check latest news at http:
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<table BORDER=0 CELLSPACING=0 COLS=1 WIDTH="100%" BGCOLOR="#FFCCCC" NOSAVE ><tr><td><a NAME="crossover"></a><tt><font color="#993399"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b>// Optional: A second(and third, and ...)&nbsp; crossover&nbsp;</font></tt><br><tt><font color="#993399"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b> //&nbsp;&nbsp;&nbsp;of course you must create the corresponding classes</font></tt><br><tt><font color="#993399"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b> //and all ***MUST*** derive from eoQuadOp&lt;Indi></font></tt><p><tt><font color="#993399"><b>&nbsp;</b> /* Uncomment if necessary -and replicate as many time as you need</font></tt><br><tt><font color="#993399">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cross = new eoOneMaxSecondCrossover&lt;Indi>(varType&nbsp; _anyVariable);&nbsp;</font></tt><br><tt><font color="#993399">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_state.storeFunctor(cross);</font></tt><br><tt><font color="#993399">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double cross2Rate = _parser.createParam(1.0, "cross2Rate", "Relative ratefor crossover 2", '2', "Variation Operators").value();&nbsp;</font></tt><br><tt><font color="#993399">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propXover.add(*cross, cross2Rate);&nbsp;</font></tt><br><tt><font color="#993399">&nbsp;*/</font></tt><br><tt><font color="#993399"><b>&nbsp;</b> // if you want some gentleoutput, the last one shoudl be like</font></tt><br><tt><font color="#993399"><b>&nbsp;</b> //&nbsp; propXover.add(*cross,crossXXXRate, true);</font></tt><br>&nbsp;</td></tr></table><table BORDER=0 CELLSPACING=0 COLS=1 WIDTH="100%" BGCOLOR="#CCCCCC" NOSAVE ><tr><td><br><tt><font color="#993399"><b>&nbsp;</b> // the mutation: same story</font></tt><br><tt><font color="#993399"><b>&nbsp;</b> ////////////////</font></tt><br><tt><font color="#993399"><b>&nbsp;</b> // you can have more than one- combined in a proportional way</font></tt><p><tt><font color="#993399"><b>&nbsp;</b> // for each mutation,&nbsp;</font></tt><br><tt><font color="#993399"><b>&nbsp;</b> // - define the mutator object</font></tt><br><tt><font color="#993399"><b>&nbsp;</b> // - read its rate from theparser</font></tt><br><tt><font color="#993399"><b>&nbsp;</b> // - add it to the proportionalcombination</font></tt><p><tt><font color="#993399"><b>&nbsp;</b> // a first mutation&nbsp;</font></tt><br><a NAME="mut_ctor"></a><tt><font color="#993399"><b>eoMonOp&lt;Indi>*mut = new eoOneMaxMutation&lt;Indi></b> /* </font><font color="#FF6666">(varType&nbsp;_anyVariable)</font><font color="#993399"> */;</font></tt><br><b><tt><font color="#993399">&nbsp;_state.storeFunctor(mut);</font></tt></b><br><tt><font color="#993399"><b>&nbsp;</b> // its relative rate in thecombination</font></tt><br><b><tt><font color="#993399">&nbsp;double mut1Rate = _parser.createParam(1.0,"mut1Rate", "Relative rate for mutation 1", '1', "Variation Operators").value();</font></tt></b><br><tt><font color="#993399"><b>&nbsp;</b> // and the creation of thecombined operator with this one</font></tt><br><b><tt><font color="#993399">&nbsp;eoPropCombinedMonOp&lt;Indi> *propMutation= new eoPropCombinedMonOp&lt;Indi>(*mut, mut1Rate);</font></tt></b><br><b><tt><font color="#993399">&nbsp;_state.storeFunctor(propMutation);</font></tt></b><br>&nbsp;</td></tr></table><table BORDER=0 CELLSPACING=0 COLS=1 WIDTH="100%" BGCOLOR="#FFCCCC" NOSAVE ><tr><td><a NAME="mutation"></a><tt><font color="#993399"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b>// Optional: A second(and third, and ...)&nbsp; mutation with their rates</font></tt><br><tt><font color="#993399"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b> //&nbsp;&nbsp;&nbsp;of course you must create the corresponding classes</font></tt><br><tt><font color="#993399"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b> //and all ***MUST*** derive from eoMonOp&lt;Indi></font></tt><p><tt><font color="#993399"><b>&nbsp;</b> /* Uncomment if necessary -and replicate as many time as you need</font></tt><br><tt><font color="#993399">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mut = new eoOneMaxSecondMutation&lt;Indi>(varType&nbsp; _anyVariable);</font></tt><br><tt><font color="#993399">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_state.storeFunctor(mut);</font></tt><br><tt><font color="#993399">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double mut2Rate = _parser.createParam(1.0, "mut2Rate", "Relative rate formutation 2", '2', "Variation Operators").value();&nbsp;</font></tt><br><tt><font color="#993399">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propMutation.add(*mut, mut2Rate);&nbsp;</font></tt><br><tt><font color="#993399">&nbsp;*/</font></tt><br><tt><font color="#993399"><b>&nbsp;</b> // if you want some gentleoutput, the last one shoudl be like</font></tt><br><tt><font color="#993399"><b>&nbsp;</b> //&nbsp; propMutation.add(*mut,mutXXXRate, true);</font></tt><p><tt><font color="#993399"><b>&nbsp;</b> // end of crossover and mutationdefinitions</font></tt><br>&nbsp;</td></tr></table><table BORDER=0 CELLSPACING=0 COLS=1 WIDTH="100%" BGCOLOR="#CCCCCC" NOSAVE ><tr><td><br><tt><font color="#993399">// from now on, you do not need to modifyanything</font></tt><br><tt><font color="#993399">// though you CAN add things to the checkpointing(see tutorial)</font></tt><p><tt><font color="#993399"><b>&nbsp;</b> // now build the eoGenOp:</font></tt><br><tt><font color="#993399"><b>&nbsp;</b> // to simulate SGA (crossoverwith proba pCross + mutation with proba pMut</font></tt><br><tt><font color="#993399"><b>&nbsp;</b> // we must construct</font></tt><br><tt><font color="#993399"><b>&nbsp;</b> //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a sequential combination of</font></tt><br><tt><font color="#993399"><b>&nbsp;</b> //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with proba 1, a proportional combination of&nbsp;</font></tt><br><tt><font color="#993399"><b>&nbsp;</b> //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a QuadCopy and our crossover</font></tt><br><tt><font color="#993399"><b>&nbsp;</b> //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with proba pMut, our mutation</font></tt><p><tt><font color="#993399"><b>&nbsp;</b> // but of course you're freeto use any smart combination you could think of</font></tt><br><tt><font color="#993399"><b>&nbsp;</b> // especially, if you haveto use eoBinOp rather than eoQuad Op you&ugrave;ll have</font></tt><br><tt><font color="#993399"><b>&nbsp;</b> // to modify that part</font></tt><p><a NAME="donottouch"></a><tt><font color="#993399"><b>&nbsp;</b> //First read the individual level parameters</font></tt><br><b><tt><font color="#993399">&nbsp;&nbsp;&nbsp;&nbsp; eoValueParam&lt;double>&amp;pCrossParam = _parser.createParam(0.6, "pCross", "Probability of Crossover",'C', "Variation Operators" );</font></tt></b><br><tt><font color="#993399"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b> //minimum check</font></tt><br><b><tt><font color="#993399">&nbsp;&nbsp;&nbsp;&nbsp; if ( (pCrossParam.value()&lt; 0) || (pCrossParam.value() > 1) )</font></tt></b><br><b><tt><font color="#993399">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw runtime_error("Invalid pCross");</font></tt></b><p><b><tt><font color="#993399">&nbsp;&nbsp;&nbsp;&nbsp; eoValueParam&lt;double>&amp;pMutParam = _parser.createParam(0.1, "pMut", "Probability of Mutation",'M', "Variation Operators" );</font></tt></b><br><tt><font color="#993399"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b> //minimum check</font></tt><br><b><tt><font color="#993399">&nbsp;&nbsp;&nbsp;&nbsp; if ( (pMutParam.value()&lt; 0) || (pMutParam.value() > 1) )</font></tt></b><br><b><tt><font color="#993399">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw runtime_error("Invalid pMut");</font></tt></b><p><tt><font color="#993399"><b>&nbsp;</b> // the crossover - with probabilitypCross</font></tt><br><b><tt><font color="#993399">&nbsp;eoProportionalOp&lt;Indi> * propOp= new eoProportionalOp&lt;Indi> ;</font></tt></b><br><b><tt><font color="#993399">&nbsp;_state.storeFunctor(propOp);</font></tt></b><br><b><tt><font color="#993399">&nbsp;eoQuadOp&lt;Indi> *ptQuad = neweoQuadCloneOp&lt;Indi>;</font></tt></b><br><b><tt><font color="#993399">&nbsp;_state.storeFunctor(ptQuad);</font></tt></b><br><tt><font color="#993399"><b>&nbsp;propOp->add(*propXover, pCrossParam.value());</b>//crossover, with proba pcross</font></tt><br><tt><font color="#993399"><b>&nbsp;propOp->add(*ptQuad, 1-pCrossParam.value());</b>//nothing, with proba 1-pcross</font></tt><p><tt><font color="#993399"><b>&nbsp;</b> // now the sequential</font></tt><br><b><tt><font color="#993399">&nbsp;eoSequentialOp&lt;Indi> *op = neweoSequentialOp&lt;Indi>;</font></tt></b><br><b><tt><font color="#993399">&nbsp;_state.storeFunctor(op);</font></tt></b><br><tt><font color="#993399"><b>&nbsp;op->add(*propOp, 1.0); </b>// alwaysdo combined crossover</font></tt><br><tt><font color="#993399"><b>&nbsp;op->add(*propMutation, pMutParam.value());</b>//then mutation, with proba pmut</font></tt><p><tt><font color="#993399"><b>&nbsp;</b> // that's it - return a reference</font></tt><br><b><tt><font color="#993399">&nbsp;return *op;</font></tt></b><br><b><tt><font color="#993399">}</font></tt></b><p><b><tt><font color="#993399">#endif</font></tt></b></td></tr></table><hr WIDTH="100%"><a href="eoLesson5.html">Back to Lesson 5</a> - <a href="eoTutorial.html">Tutorialmain page </a>- <a href="eoTopDown.html">Top-Down page</a> - <a href="eoBottomUp.html">Bottom-uppage</a> - <a href="eoProgramming.html">Programming hints</a> - <font face="Arial,Helvetica"><a href="doc/html/index.html">EOdocumentation</a></font><hr><address><a href="mailto:marc.schoenauer@inria.fr">Marc Schoenauer</a></address><br><!-- Created: Nov 2000 --><!-- hhmts start -->Last modified: Fri May3 08:06:20 2002<!-- hhmts end --></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -