diff --git a/eo/src/do/make_checkpoint.h b/eo/src/do/make_checkpoint.h index a08447d2..d9a60746 100644 --- a/eo/src/do/make_checkpoint.h +++ b/eo/src/do/make_checkpoint.h @@ -33,6 +33,9 @@ #include #include +// at the moment, in utils/make_help.cpp +// this should become some eoUtils.cpp with corresponding eoUtils.h +bool testDirRes(std::string _dirName, bool _erase); /////////////////// The checkpoint and other I/O ////////////// @@ -58,6 +61,12 @@ eoCheckPoint& do_make_checkpoint(eoParameterLoader& _parser, eoState& _stat // and store it in the state _state.storeFunctor(increment); + // dir for DISK output + eoValueParam& dirNameParam = _parser.createParam(string("Res"), "resDir", "Directory to store DISK outputs", '\0', "Output - Disk"); + // shoudl we empty it if exists + eoValueParam& eraseParam = _parser.createParam(false, "eraseDir", "erase files in dirName if any", '\0', "Output - Disk"); + bool dirOK = false; // not tested yet + ///////////////////////////////////////// // now some statistics on the population: ///////////////////////////////////////// @@ -78,12 +87,8 @@ eoCheckPoint& do_make_checkpoint(eoParameterLoader& _parser, eoState& _stat //--------------------------- eoValueParam& printBestParam = _parser.createParam(true, "printBestStat", "Print Best/avg/stdev every gen.", '\0', "Output"); eoValueParam& plotBestParam = _parser.createParam(false, "plotBestStat", "Plot Best/avg Stat", '\0', "Output - Graphical"); - - // dir for DISK output - eoValueParam& dirNameParam = _parser.createParam(string("Res"), "resDir", "Directory to store DISK outputs", '\0', "Output - Disk"); eoValueParam& fileBestParam = _parser.createParam(false, "fileBestStat", "Output bes/avg/std to file", '\0', "Output - Disk"); - eoBestFitnessStat *bestStat = NULL; if ( printBestParam.value() || plotBestParam.value() || fileBestParam.value() ) // we need the bestStat for at least one of the 3 above @@ -152,6 +157,9 @@ eoCheckPoint& do_make_checkpoint(eoParameterLoader& _parser, eoState& _stat checkpoint->add(*fdcStat); } + // do we wnat some histogram of fitnesses snpashots? + eoValueParam plotHistogramParam = _parser.createParam(false, "plotHisto", "Plot histogram of fitnesses", '\0', "Output - Graphical"); + /////////////// // The monitors /////////////// @@ -183,6 +191,12 @@ eoCheckPoint& do_make_checkpoint(eoParameterLoader& _parser, eoState& _stat monitor->add(*popStat); } + // first handle the dir test - if we need at least one file + if ( ( fileBestParam.value() || plotBestParam.value() || + plotFDCParam.value() || plotHistogramParam.value() ) + && !dirOK ) // just in case we add something before + dirOK = testDirRes(dirNameParam.value(), eraseParam.value()); // TRUE + if (fileBestParam.value()) // A file monitor for best & secondMoment { string stmp = dirNameParam.value() + "/best.xg"; @@ -227,7 +241,7 @@ eoCheckPoint& do_make_checkpoint(eoParameterLoader& _parser, eoState& _stat checkpoint->add(*fdcGnuplot); } - eoValueParam plotHistogramParam = _parser.createParam(false, "plotHisto", "Plot histogram of fitnesses", '\0', "Output - Graphical"); + // historgram? if (plotHistogramParam.value()) // want to see how the fitness is spread? { eoScalarFitnessStat *fitStat = new eoScalarFitnessStat; @@ -252,6 +266,10 @@ eoCheckPoint& do_make_checkpoint(eoParameterLoader& _parser, eoState& _stat if (_parser.isItThere(saveFrequencyParam)) { + // first make sure dirName is OK + if (! dirOK ) + dirOK = testDirRes(dirNameParam.value(), eraseParam.value()); // TRUE + unsigned freq = (saveFrequencyParam.value()>0 ? saveFrequencyParam.value() : UINT_MAX ); string stmp = dirNameParam.value() + "/generations"; eoCountedStateSaver *stateSaver1 = new eoCountedStateSaver(freq, _state, stmp); @@ -263,6 +281,10 @@ eoCheckPoint& do_make_checkpoint(eoParameterLoader& _parser, eoState& _stat eoValueParam& saveTimeIntervalParam = _parser.createParam(unsigned(0), "saveTimeInterval", "Save every T seconds (0 or absent = never)", '\0',"Persistence" ); if (_parser.isItThere(saveTimeIntervalParam) && saveTimeIntervalParam.value()>0) { + // first make sure dirName is OK + if (! dirOK ) + dirOK = testDirRes(dirNameParam.value(), eraseParam.value()); // TRUE + string stmp = dirNameParam.value() + "/time"; eoTimedStateSaver *stateSaver2 = new eoTimedStateSaver(saveTimeIntervalParam.value(), _state, stmp); _state.storeFunctor(stateSaver2); diff --git a/eo/src/do/make_pop.h b/eo/src/do/make_pop.h index ed0d6fc6..d8ae0766 100644 --- a/eo/src/do/make_pop.h +++ b/eo/src/do/make_pop.h @@ -27,6 +27,7 @@ #ifndef _make_pop_h #define _make_pop_h +#include // for time(0) for random seeding #include #include #include @@ -50,7 +51,7 @@ eoPop& do_make_pop(eoParser & _parser, eoState& _state, eoInit & _ini // random seed eoValueParam& seedParam = _parser.createParam(uint32(0), "seed", "Random number seed", 'S'); if (seedParam.value() == 0) - seedParam.value() = random_seed(); + seedParam.value() = time(0); eoValueParam& popSize = _parser.createParam(unsigned(20), "popSize", "Population Size", 'P', "Evolution Engine"); // Either load or initialize diff --git a/eo/src/es/eoEsMutationInit.h b/eo/src/es/eoEsMutationInit.h index 9baa340f..86f58c1e 100644 --- a/eo/src/es/eoEsMutationInit.h +++ b/eo/src/es/eoEsMutationInit.h @@ -90,10 +90,10 @@ class eoEsMutationInit virtual std::string section(void) { return repSection; } - virtual std::string TauLclName(void) const { return "TauLcL"; } + virtual std::string TauLclName(void) const { return "TauLoc"; } virtual char TauLclShort(void) const { return 'l'; } - virtual std::string TauGlbName(void) const { return "TauGlb"; } + virtual std::string TauGlbName(void) const { return "TauGlob"; } virtual char TauGlbShort(void) const { return 'g'; } virtual std::string TauBetaName(void) const { return "Beta"; } diff --git a/eo/src/es/eoRealOp.h b/eo/src/es/eoRealOp.h index 18271092..9e20201b 100644 --- a/eo/src/es/eoRealOp.h +++ b/eo/src/es/eoRealOp.h @@ -329,13 +329,13 @@ protected: double range; // == 1+2*alpha }; -/** eoArithmeticCrossover --> uniform choice in hypercube +/** eoHypercubeCrossover --> uniform choice in hypercube == arithmetical with different values for each coordinate \class eoArithmeticCrossover eoRealOp.h Tutorial/eoRealOp.h \ingroup parameteric */ -template class eoArithmeticCrossover: public eoQuadOp +template class eoHypercubeCrossover: public eoQuadOp { public: /** @@ -347,7 +347,7 @@ template class eoArithmeticCrossover: public eoQuadOp * 0 == contractive application * Must be positive */ - eoArithmeticCrossover(const double& _alpha = 0.0): + eoHypercubeCrossover(const double& _alpha = 0.0): bounds(eoDummyVectorNoBounds), alpha(_alpha), range(1+2*_alpha) { if (_alpha < 0) @@ -362,7 +362,7 @@ template class eoArithmeticCrossover: public eoQuadOp * 0 == contractive application * Must be positive */ - eoArithmeticCrossover(eoRealVectorBounds & _bounds, + eoHypercubeCrossover(eoRealVectorBounds & _bounds, const double& _alpha = 0.0): bounds(_bounds), alpha(_alpha), range(1+2*_alpha) { @@ -371,10 +371,10 @@ template class eoArithmeticCrossover: public eoQuadOp } /// The class name. - virtual string className() const { return "eoArithmeticCrossover"; } + virtual string className() const { return "eoHypercubeCrossover"; } /** - * arithmetical crossover - modifies both parents + * hypercube crossover - modifies both parents * @param _eo1 The first parent * @param _eo2 The first parent */ @@ -434,21 +434,21 @@ protected: \ingroup parameteric */ -template class eoRealUxOver: public eoQuadOp +template class eoRealUXover: public eoQuadOp { public: /** * (Default) Constructor. * @param _preference bias in the choice (usually, no bias == 0.5) */ - eoRealUxOver(const float& _preference = 0.5): preference(_preference) + eoRealUXover(const float& _preference = 0.5): preference(_preference) { if ( (_preference <= 0.0) || (_preference >= 1.0) ) runtime_error("UxOver --> invalid preference"); } /// The class name. - virtual string className() const { return "eoRealUxOver"; } + virtual string className() const { return "eoRealUXover"; } /** * Uniform crossover for real vectors diff --git a/eo/src/es/make_op_es.h b/eo/src/es/make_op_es.h index 74f4e6cc..fdda4cd3 100644 --- a/eo/src/es/make_op_es.h +++ b/eo/src/es/make_op_es.h @@ -130,10 +130,10 @@ eoGenOp & do_make_op(eoParameterLoader& _parser, eoState& _state, eoRealIni // crossover ///////////// // ES crossover - eoValueParam& crossTypeParam = _parser.createParam(string("Global"), "crossType", "Type of ES recombination (gloabl or local)", 'C', "Variation Operators"); + eoValueParam& crossTypeParam = _parser.createParam(string("global"), "crossType", "Type of ES recombination (global or standard)", 'C', "Variation Operators"); - eoValueParam& crossObjParam = _parser.createParam(string("Discrete"), "crossObj", "Recombination of object variables (Discrete or Intermediate)", 'O', "Variation Operators"); - eoValueParam& crossStdevParam = _parser.createParam(string("Intermediate"), "crossStdev", "Recombination of mutation strategy parameters (Intermediate or Discrete)", 'S', "Variation Operators"); + eoValueParam& crossObjParam = _parser.createParam(string("discrete"), "crossObj", "Recombination of object variables (discrete or intermediate)", 'O', "Variation Operators"); + eoValueParam& crossStdevParam = _parser.createParam(string("intermediate"), "crossStdev", "Recombination of mutation strategy parameters (intermediate or discrete)", 'S', "Variation Operators"); // The pointers: first the atom Xover eoBinOp *ptObjAtomCross = NULL; @@ -142,22 +142,22 @@ eoGenOp & do_make_op(eoParameterLoader& _parser, eoState& _state, eoRealIni eoGenOp *ptCross; // check for the atom Xovers - if (crossObjParam.value() == string("Discrete")) + if (crossObjParam.value() == string("discrete")) ptObjAtomCross = new eoRealAtomExchange; - else if (crossObjParam.value() == string("Intermediate")) + else if (crossObjParam.value() == string("intermediate")) ptObjAtomCross = new eoRealAtomExchange; else throw runtime_error("Invalid Object variable crossover type"); - if (crossStdevParam.value() == string("Discrete")) + if (crossStdevParam.value() == string("discrete")) ptStdevAtomCross = new eoRealAtomExchange; - else if (crossStdevParam.value() == string("Intermediate")) + else if (crossStdevParam.value() == string("intermediate")) ptStdevAtomCross = new eoRealAtomExchange; else throw runtime_error("Invalid mutation strategy parameter crossover type"); // and build the indi Xover - if (crossTypeParam.value() == string("Global")) + if (crossTypeParam.value() == string("global")) ptCross = new eoEsGlobalXover(*ptObjAtomCross, *ptStdevAtomCross); - else if (crossTypeParam.value() == string("Local")) + else if (crossTypeParam.value() == string("standard")) ptCross = new eoEsLocalXover(*ptObjAtomCross, *ptStdevAtomCross); else throw runtime_error("Invalide Object variable crossover type"); diff --git a/eo/src/es/make_op_real.h b/eo/src/es/make_op_real.h index 315c839f..9de9c171 100644 --- a/eo/src/es/make_op_real.h +++ b/eo/src/es/make_op_real.h @@ -131,19 +131,30 @@ eoGenOp & do_make_op(eoParameterLoader& _parser, eoState& _state, eoRealIni // the crossovers ///////////////// // the parameters + eoValueParam& alphaParam = _parser.createParam(double(0.0), "alpha", "Bound for factor of linear recombinations", 'a', "Variation Operators" ); + // minimum check + if ( (alphaParam.value() < 0) ) + throw runtime_error("Invalid BLX coefficient alpha"); + + eoValueParam& segmentRateParam = _parser.createParam(double(1.0), "segmentRate", "Relative rate for segment crossover", 's', "Variation Operators" ); // minimum check if ( (segmentRateParam.value() < 0) ) throw runtime_error("Invalid segmentRate"); - eoValueParam& arithmeticRateParam = _parser.createParam(double(2.0), "arithmeticRate", "Relative rate for arithmetic crossover", 'A', "Variation Operators" ); + eoValueParam& hypercubeRateParam = _parser.createParam(double(1.0), "hypercubeRate", "Relative rate for hypercube crossover", 'A', "Variation Operators" ); // minimum check - if ( (arithmeticRateParam.value() < 0) ) - throw runtime_error("Invalid arithmeticRate"); + if ( (hypercubeRateParam.value() < 0) ) + throw runtime_error("Invalid hypercubeRate"); + + eoValueParam& uxoverRateParam = _parser.createParam(double(1.0), "uxoverRate", "Relative rate for uniform crossover", 'A', "Variation Operators" ); + // minimum check + if ( (uxoverRateParam.value() < 0) ) + throw runtime_error("Invalid uxoverRate"); // minimum check bool bCross = true; - if (segmentRateParam.value()+arithmeticRateParam.value()==0) + if (segmentRateParam.value()+hypercubeRateParam.value()+uxoverRateParam.value()==0) { cerr << "Warning: no crossover" << endl; bCross = false; @@ -156,14 +167,19 @@ eoGenOp & do_make_op(eoParameterLoader& _parser, eoState& _state, eoRealIni if (bCross) { // segment crossover for bitstring - pass it the bounds - ptQuad = new eoSegmentCrossover(*ptBounds); + ptQuad = new eoSegmentCrossover(*ptBounds, alphaParam.value()); _state.storeFunctor(ptQuad); ptCombinedQuadOp = new eoPropCombinedQuadOp(*ptQuad, segmentRateParam.value()); - // arithmetic crossover - ptQuad = new eoArithmeticCrossover(*ptBounds); + // hypercube crossover + ptQuad = new eoHypercubeCrossover(*ptBounds, alphaParam.value()); _state.storeFunctor(ptQuad); - ptCombinedQuadOp->add(*ptQuad, arithmeticRateParam.value()); + ptCombinedQuadOp->add(*ptQuad, hypercubeRateParam.value()); + + // uniform crossover + ptQuad = new eoRealUXover(); + _state.storeFunctor(ptQuad); + ptCombinedQuadOp->add(*ptQuad, uxoverRateParam.value()); // don't forget to store the CombinedQuadOp _state.storeFunctor(ptCombinedQuadOp); diff --git a/eo/src/utils/eoRNG.cpp b/eo/src/utils/eoRNG.cpp index a7de0d17..62f364b0 100644 --- a/eo/src/utils/eoRNG.cpp +++ b/eo/src/utils/eoRNG.cpp @@ -1,22 +1,9 @@ #include #include "eoRNG.h" -#include -/** this function retunrs a "truly random" seed for RNG - * Replaces the call to time(0) that seems to be non-portable??? - */ -uint32 random_seed() -{ - struct timeval tval; - struct timezone tzp; - - gettimeofday (&tval, &tzp); // milliseconds since midnight January 1, 1970. - return uint32(tval.tv_usec); -} - namespace eo { /// The Global random number generator. -eoRng rng(random_seed()); +eoRng rng(time(0)); } diff --git a/eo/src/utils/eoRNG.h b/eo/src/utils/eoRNG.h index d8b9a623..f9b3050c 100644 --- a/eo/src/utils/eoRNG.h +++ b/eo/src/utils/eoRNG.h @@ -288,9 +288,6 @@ extern eoRng rng; using eo::rng; -/** the random_seed utility in eoRNG.cpp */ -extern uint32 random_seed(); - // Implementation of some eoRng members.... Don't mind the mess, it does work. diff --git a/eo/src/utils/make_help.cpp b/eo/src/utils/make_help.cpp index ecddbd17..493025d6 100644 --- a/eo/src/utils/make_help.cpp +++ b/eo/src/utils/make_help.cpp @@ -25,6 +25,7 @@ //----------------------------------------------------------------------------- #include #include +#include /** Generation of the status file, and output of the help message if needed * @@ -60,3 +61,40 @@ void make_help(eoParser & _parser) exit(1); } } + +/** test a dir. + * Creates it if does not exist + * If exists, throws an exception or erase everything there, + * depending on last parameter + * + * Always return true (for code easy writing on the other side :-) + */ +bool testDirRes(std::string _dirName, bool _erase) +{ + string s = "test -d " + _dirName; + int res = system(s.c_str()); + // test for (unlikely) errors + if ( (res==-1) || (res==127) ) + { + s = "Problem executing test of dir " + _dirName; + throw runtime_error(s); + } + // now make sure there is a dir without any file in it - or quit + if (res) // no dir present + { + s = string("mkdir ")+ _dirName; + system(s.c_str()); + return true; + } + // else + if (_erase) // OK to erase + { + s = string("/bin/rm ")+ _dirName + "/*"; + system(s.c_str()); + return true; + } + //else + s = "Dir " + _dirName + " is not empty"; + throw runtime_error(s); + return true; +} diff --git a/eo/tutorial/Lesson1/FirstRealGA.cpp b/eo/tutorial/Lesson1/FirstRealGA.cpp index 3a4f991a..c753fbb4 100644 --- a/eo/tutorial/Lesson1/FirstRealGA.cpp +++ b/eo/tutorial/Lesson1/FirstRealGA.cpp @@ -107,7 +107,7 @@ void main_function(int argc, char **argv) ////////////////////////////////////// // CROSSOVER // offspring(i) is a linear combination of parent(i) - eoArithmeticCrossover xover; + eoSegmentCrossover xover; // MUTATION // offspring(i) uniformly chosen in [parent(i)-epsilon, parent(i)+epsilon] eoUniformMutation mutation(EPSILON); diff --git a/eo/tutorial/Lesson2/FirstRealEA.cpp b/eo/tutorial/Lesson2/FirstRealEA.cpp index 8d64dd3d..7995896b 100644 --- a/eo/tutorial/Lesson2/FirstRealEA.cpp +++ b/eo/tutorial/Lesson2/FirstRealEA.cpp @@ -48,10 +48,10 @@ void main_function(int argc, char **argv) const double EPSILON = 0.01; // range for real uniform mutation double SIGMA = 0.3; // std dev. for normal mutation // some parameters for chosing among different operators - const double segmentRate = 0.5; // relative weight for 1-pt Xover - const double arithmeticRate = 0.5; // relative weight for 2-pt Xover - const double uniformMutRate = 0.5; // relative weight for bit-flip mutation - const double detMutRate = 0.5; // relative weight for one-bit mutation + const double hypercubeRate = 0.5; // relative weight for hypercube Xover + const double segmentRate = 0.5; // relative weight for segment Xover + const double uniformMutRate = 0.5; // relative weight for uniform mutation + const double detMutRate = 0.5; // relative weight for det-uniform mutation const double normalMutRate = 0.5; // relative weight for normal mutation // GENERAL @@ -113,10 +113,10 @@ void main_function(int argc, char **argv) // uniform chooce on segment made by the parents eoSegmentCrossover xoverS; // uniform choice in hypercube built by the parents - eoArithmeticCrossover xoverA; + eoHypercubeCrossover xoverA; // Combine them with relative weights eoPropCombinedQuadOp xover(xoverS, segmentRate); - xover.add(xoverA, arithmeticRate, true); + xover.add(xoverA, hypercubeRate, true); // MUTATION // offspring(i) uniformly chosen in [parent(i)-epsilon, parent(i)+epsilon] diff --git a/eo/tutorial/Makefile b/eo/tutorial/Makefile index bd3418cb..6c415301 100644 --- a/eo/tutorial/Makefile +++ b/eo/tutorial/Makefile @@ -1,4 +1,4 @@ -SUBDIRS = Lesson1 Lesson2 Lesson3 +SUBDIRS = Lesson1 Lesson2 Lesson3 Lesson4 all: for i in $(SUBDIRS); do pushd $$i && $(MAKE) all; popd; done @@ -12,6 +12,9 @@ lesson2 : lesson3 : cd Lesson3; make +lesson4 : + cd Lesson4; make + #empty dist and distdir to let top-level 'make' do its job dist : diff --git a/eo/tutorial/html/FirstRealEA.html b/eo/tutorial/html/FirstRealEA.html index 49652e6b..1ea2165c 100644 --- a/eo/tutorial/html/FirstRealEA.html +++ b/eo/tutorial/html/FirstRealEA.html @@ -98,14 +98,14 @@ SIGMA = 0.3;        // std dev. for normal mutation
 // some parameters for chosing among different operators -
 const double segmentRate = 0.5;    -// relative weight for 1-pt Xover -
 const double arithmeticRate = 0.5; -// relative weight for 2-pt Xover +
 const double hypercubeRate = 0.5;    +// relative weight for hypercube Xover +
 const double segmentRate = 0.5; +// relative weight for segment Xover
 const double uniformMutRate = 0.5; -// relative weight for bit-flip mutation +// relative weight for uniform mutation
 const double detMutRate = 0.5;     -// relative weight for one-bit mutation +// relative weight for det-uniform mutation
 const double normalMutRate = 0.5;  // relative weight for normal mutation @@ -214,12 +214,12 @@ made by the parents
 eoSegmentCrossover<Indi> xoverS;
 // uniform choice in hypercube built by the parents -
 eoArithmeticCrossover<Indi> xoverA; +
 eoHypercubeCrossover<Indi> xoverA;
 // Combine them with relative weights
 eoPropCombinedQuadOp<Indi> xover(xoverS, segmentRate); -
 xover.add(xoverA, arithmeticRate, +
 xover.add(xoverA, hypercubeRate, true); diff --git a/eo/tutorial/html/FirstRealGA.html b/eo/tutorial/html/FirstRealGA.html index f06c178a..4f77b96a 100644 --- a/eo/tutorial/html/FirstRealGA.html +++ b/eo/tutorial/html/FirstRealGA.html @@ -273,7 +273,7 @@ The actual code is in boldface and the comment in normal face.  // offspring(i) is a linear combination of parent(i)
-  eoArithmeticCrossover<Indi> xover;
+  eoSegmentCrossover<Indi> xover;
diff --git a/eo/tutorial/html/Firstmerge.html b/eo/tutorial/html/Firstmerge.html index 61da23f4..2c45d694 100644 --- a/eo/tutorial/html/Firstmerge.html +++ b/eo/tutorial/html/Firstmerge.html @@ -223,7 +223,7 @@ continuator(MAX_GEN);
eoUniformMutation<Indi>  mutation(EPSILON); -
eoArithmeticCrossover<Indi> +
eoSegmentCrossover<Indi> xover; eoBitMutation<Indi>  diff --git a/eo/tutorial/html/eoLesson1.html b/eo/tutorial/html/eoLesson1.html index 4e98cade..9bc77277 100644 --- a/eo/tutorial/html/eoLesson1.html +++ b/eo/tutorial/html/eoLesson1.html @@ -259,8 +259,8 @@ bit, which is specific of the bit-flip mutation.  Hence, to run the same algorithm as Goldberg's SGA, the mutation probability (at individual level) is 1, and the probability of flipping each bit is P_MUT_PER_BIT.
  • -Real The crossover eoArithmeticCrossover -is the standard arithmetic crossover for real-valued +Real The crossover eoSegmentCrossover +is the standard segment crossover for real-valued vectors, that chooses a point randomly on the segment between both parents (also termed BLX-0). eoUniformMutation is the uniform mutation for real-valued vectors diff --git a/eo/tutorial/html/eoLesson2.html b/eo/tutorial/html/eoLesson2.html index 746c8262..9d8b75e6 100644 --- a/eo/tutorial/html/eoLesson2.html +++ b/eo/tutorial/html/eoLesson2.html @@ -172,8 +172,8 @@ on many problems.
    Two crossover operators are available: the eoSegmentCrossover chooses one point uniformly on the segment joining the parents, while the -eoArithmeticCrossover -performs a segment crossover on each coordinate independently, which amount +eoHypercubeCrossover +performs a linear combination on each coordinate independently, which amount to choosing the offspring uniformly in the hypercube whose diagonal is the segment joining the parents.
    As for mutation @@ -267,7 +267,7 @@ is something else to modify...

  • Use different initializers: for instance, on the real-valued sphere function minimization, try to initialize half of the population in [-2,-1] and the other half in [1,2], with and without -the segment and arithmetic crossovers (and for large values of VEC_SIZE, +the segment and hypercube crossovers (and for large values of VEC_SIZE, the size of the vectors). Amazing, isn't it! Explain that result.

    Exercise 3:  full selection/replacement diff --git a/eo/tutorial/html/eoLesson4.html b/eo/tutorial/html/eoLesson4.html index 61e79664..fd37d4bb 100644 --- a/eo/tutorial/html/eoLesson4.html +++ b/eo/tutorial/html/eoLesson4.html @@ -76,13 +76,20 @@ however thay have been entered (try +
    On the status file, the parameters are organized +in sections. Note, however, that this format is not mandatory in the param +file, as only the keywords +are processed.

    User's guide:Representation-independent parameters -
    The parameters are organized in sections. In -what follows, the fixed font colored text is directly taken from the status -file and is commented between the lines. -
    -


    +
    In what follows, the fixed font colored text +is directly taken from the status file and is commented between the lines. +The presentation follows the status file format - only two sections are +representation-dependent (see the corresponding binary +or real sections). All other sections are presented +now: +

    +



    Section ###### General ######
    # --help=0 # -h : Prints @@ -98,151 +105,20 @@ of seconds since Jan. 1 1980, is used ... and stored in the status file, of course, so you can repeat the same run by simply assigning that value again. There is no default value ("true" random seed). -
    -
    -
    Section ###### -Output ###### -
    This section contains parameters related to output -(to screen, to files, graphical, ...). -

    # --useEval=1 # Use nb of -eval. as counter (vs nb of gen.) -
    Boolean parameter: -whether or not you want the nb of evluations to be displayed and used as -counter in statistics outputs and plots. Default -is true. -

    # --printBestStat=1 # Print -Best/avg/stdev every gen. -
    Boolean parameter: -toggles screen output of indicated statistics. Default -is true. -

    # --plotBestStat=0 # Plot -Best/avg Stat -
    Boolean parameter: -toggles gnuplot output of best and average plots (Linux only at the moment). -Default -is false. -

    # --BestFileName=best.xg -# Name of file for Best/avg/stdev -
    String parameter: -if present, the statistics are stored in that file (no -default) -

    # --printPop=0 # Print sorted -pop. every gen. -
    Boolean parameter: -adds a dump of the whole population to the screen every generation. Is -likely to generate huge -output! Default is false. -

    # --printFDC=1 # Print FDC -coeff. every gen. -
    Boolean parameter: -adds Fitness Distance Correlation to output every generation. Default -is false. -

    # --plotFDCStat=0 # Plot -FDC scatter plot -
    Boolean parameter: -toggles the Fitness Distance Correlation plot (Fitness vs distance to best). -Default -is false. -

    # --plotHisto=0 # Plot histogram -of fitnesses -
    Boolean parameter: -if on, gnuplot is used to plot the sorted population (fitness vs rank). -Gives a graphical idea of the diversity. Default -is false. -
    -


    -
    Section ###### -Persistence ###### -
    This section contains parameters handling job -dump and restart mechanism -

    # --Load= # -L : A save file -to restart from -
    String parameter: -if present, the initial population (and the RNG) is read from indicated -file. That file must -come from a previous save (or must be in same format!), i.e. must contain -a popualtion, the RNG and all parameters. If no other parameter is modified, -using a previously saved population and RNG will give exactly the same -results than having run that previous run longer. And a way to be sure -to re-use the same parameters is to ... use that very save file as parameter -file, as it contains all actual parameters in the right format. -
    Note that if not enough individuals are read, -the remaining are randomly initialized. No -default value. -

    # --recomputeFitness=0 # --r : Recompute the fitness after re-loading the pop.? -
    Boolean parameter: -in case some individuals are read from a file, their fitness is read too. -If this one is true, it is nevertheless recomputed. Default -is false i.e. use fitnes that's in the file. -

    # --saveFrequency=0 # Save -every F generation (0 = only final state, absent = never) -
    Integer parameter: -interval between two dump to disk of the whole population (+RNG + parameters) -to disk, in a file named genNN.sav, where NN is the generation number. -If this prameter is present (even with 0 or negative value), the final -population will always be saved, whatever the reason for stopping. Hence -the only way to avoid all saves is to omit the parameter (there is no -default value). -

    # --saveTimeInterval=0 # -Save every T seconds (0 or absent = never) -
    Integer parameter: -time interval between two population (+RNG + parameters) dumps to disks. -Files are names timeNN.sav. See pervious parameter description for ore -details. No default value. -

    # --status=t-eoGA.status -# Status file -
    String parameter: -name of the status file (that contains all parameters in the input format). -There is no way to avoid creating that file except recompiling ... or giving -the name /dev/null (Unix). Default value is ProgramName.status -
    -


    -
    Section ###### -Stopping criterion ###### -
    This section allows to decide when the algorithm -will stop. -

    # --maxGen=100 # -G : Maximum -number of generations (0 = none) -
    Integer parameter: maximum number of generations. -A value of 0 disables that stopping criterion. Default -is 100. -

    # --steadyGen=100 # -s : -Number of generations with no improvement -
    Integer parameter: -stops whenever that number of generations is passed without any improvement -of the best fitness in the population, provided the following minimum number -of generations has been done. No default value. -

    # --minGen=0 # -g : Minimum -number of generations -
    Integer parameter: the above steadyGen parameter -starts its job only after that minimum nuber of generations is passed. -No -default value. -

    # --maxEval=0 # -E : Maximum -number of evaluations (0 = none) -
    Integer parameter: maximum number of generations. -No -default value. -

    # --targetFitness=0 # -T -: Stop when fitness reaches -
    Real-valued parameter: the algorithm stops whenever -the best fitness reaches that target. No default -value. -

    # --CtrlC=0 # -C : Terminate -current generation upon Ctrl C -
    Boolean parameter: if true, Ctrl C only stops -after the current generation as completed (eventually dumping population -to a file if some saver is active). THis very useful feature is only available -in Unix at the moment. Default is false. -
    -


    -
    Section ###### +

    +


    +

    Section ###### engine ######
    In this section, one chooses all components of the Evolution Engine (selection, replacemenet and the like). -

    # --selection=DetTour(2) +

    # --popSize=20 # -P : Population +Size +
    Integer parameter: +the size of the population (constant along evolution). And yes, this is +a representation independent parameter, as the population is created either +from a file or using an eoInit object - and only that object is representation-dependent. +
    # --selection=DetTour(2) # -S : Selection: Roulette, DetTour(T), StochTour(t) or Sequential(ordered/unordered)
    String parameter: Name of selection procedure. Availabable @@ -304,10 +180,534 @@ if true, weak elitism is added to the replacement procedure (i.e. if the best fitness among the offspring is less than the best fitness, the best parent replaces the worst offspring). Default is false. -

    User's guide: -Bistring specific parameters +

    +


    +

    Section ###### +Output ###### +
    This first section on Output contains parameters +related to screen text output. +

    # --useEval=1 # Use nb of +eval. as counter (vs nb of gen.) +
    Boolean parameter: +whether or not you want the nb of evluations to be displayed and used as +counter in statistics outputs and plots. Default +is true. +

    # --printBestStat=1 # Print +Best/avg/stdev every gen. +
    Boolean parameter: +toggles screen output of indicated statistics. Default +is true. +

    # --printPop=0 # Print sorted +pop. every gen. +
    Boolean parameter: +adds a dump of the whole population to the screen every generation. Is +likely to generate huge +output! Default is false. +

    # --printFDC=1 # Print FDC +coeff. every gen. +
    Boolean parameter: +adds Fitness Distance Correlation to output every generation. Default +is false. +

    +


    +

    Section ###### +Output - Disk ###### +
    This second section on Output contains parameters +related to DISK output. +

    # --resDir=Res # Directory +to store DISK outputs +
    String parameter: All +DISK +output will be stored in a separate directory +-this is its name. If the directory does not exist, it is created. Note +that all graphical displays +will use that directory for their temporary files. Also all +job dump (see section Persistence +below) store their files there too. +

    # --eraseDir=0 # erase files +in dirName if any +
    Boolean parameter: +in order not to mix up files from different runs, it is mandatory to ensure +that the directory where all files will be stored is empty. However, if +this parameter is not set and the directory already exists, an exception +is thrown and the program stops. It it is set, all +files in the result directory are erased. +

    # --fileBestStat=0 # Output +Best/avg/stdev to a file +
    Boolean parameter: +if present, the best, average and standard deviation statistics are stored +in file resDir/best.xg. +Each line contains the generation number, eventualy the evaluation count +(depending on parameter useEval +then the statistics. Default is false.
     

    +


    +

    Section ###### +Output - Graphical ###### +
    This last section on Output contains parameters +related to graphical output (only available in Unix through gnuplot at +the moment). +

    # --plotBestStat=0 # Plot +Best/avg Stat +
    Boolean parameter: +toggles gnuplot output of best and average plots (Linux only at the moment). +Default +is false. +

    # --plotFDCStat=0 # Plot +FDC scatter plot +
    Boolean parameter: +toggles the Fitness Distance Correlation plot (Fitness vs distance to best). +Default +is false. +

    # --plotHisto=0 # Plot histogram +of fitnesses +
    Boolean parameter: +if on, gnuplot is used to plot the sorted population (fitness vs rank). +Gives a graphical idea of the diversity. Default +is false. +

    +


    +

    Section ###### +Persistence ###### +
    This section contains parameters handling job +dump and restart mechanism. +

    # --Load= # -L : A save file +to restart from +
    String parameter: +if present, the initial population (and the RNG) is read from indicated +file. That file must +come from a previous save (or must be in same format!), i.e. must contain +a popualtion, the RNG and all parameters. If no other parameter is modified, +using a previously saved population and RNG will give exactly the same +results than having run that previous run longer. And a way to be sure +to re-use the same parameters is to ... use that very save file as parameter +file, as it contains all actual parameters in the right format. +
    Note that if not enough individuals are read, +the remaining are randomly initialized. No +default value. +

    # --recomputeFitness=0 # +-r : Recompute the fitness after re-loading the pop.? +
    Boolean parameter: +in case some individuals are read from a file, their fitness is read too. +If this one is true, it is nevertheless recomputed. Default +is false i.e. use fitnes that's in the file. +

    # --saveFrequency=0 # Save +every F generation (0 = only final state, absent = never) +
    Integer parameter: +interval between two dump to disk of the whole population (+RNG + parameters), +in a file named genNN.sav in the dirRes +directory, where NN is the generation number. If this prameter is present +(even with 0 or negative value), the final population will always be saved, +whatever the reason for stopping. Hence the only way to avoid all saves +is to omit the parameter (there is no default +value). +

    # --saveTimeInterval=0 # +Save every T seconds (0 or absent = never) +
    Integer parameter: +time interval between two population (+RNG + parameters) dumps to disks. +Files are names timeNN.sav. See pervious parameter description for ore +details. No default value. +

    # --status=t-eoGA.status +# Status file +
    String parameter: +name of the status file (that contains all parameters in the input format). +There is no way to avoid creating that file except recompiling ... or giving +the name /dev/null (Unix). Default value is ProgramName.status +

    +


    +

    Section ###### +Stopping criterion ###### +
    This section allows to decide when the algorithm +will stop. +

    # --maxGen=100 # -G : Maximum +number of generations (0 = none) +
    Integer parameter: maximum number of generations. +A value of 0 disables that stopping criterion. Default +is 100. +

    # --steadyGen=100 # -s : +Number of generations with no improvement +
    Integer parameter: +stops whenever that number of generations is passed without any improvement +of the best fitness in the population, provided the following minimum number +of generations has been done. No default value. +

    # --minGen=0 # -g : Minimum +number of generations +
    Integer parameter: the above steadyGen parameter +starts its job only after that minimum nuber of generations is passed. +No +default value. +

    # --maxEval=0 # -E : Maximum +number of evaluations (0 = none) +
    Integer parameter: +maximum number of generations. +No default +value. +

    # --targetFitness=0 # -T +: Stop when fitness reaches +
    Real-valued parameter: +the algorithm stops whenever the best fitness reaches that target. No +default value. +

    # --CtrlC=0 # -C : Terminate +current generation upon Ctrl C +
    Boolean parameter: +if true, Ctrl C only stops after the current generation as completed (eventually +dumping population to a file if some saver is active). THis very useful +feature is only available in Unix at the moment. Default +is false. +
    +


    +

    User's guide: +Bistring specific parameters +
    The following describes the specific parameters that are available +in program BitEA to evolve genotypes that are bitstrings. +
    The two representation-dependent sections are concerned repectively +with genotype initilization and variation operators. +

    +


    +

    Section ######    +Genotype Initialization    ###### +
    This section should allow input if all necessary +parameters for genitype initialization +

    # --ChromSize=10 # -n : The +length of the bitstrings +
    Integer parameter: +The bitstring initilization only requires the length of the chromosome. +

    +


    +

    Section ######    +Variation Operators    ###### +
    This section allows to tune the way the variation +operators will be applied to the individuals (in the strict limit of SGA +model at the moment, see below). +

    # --operator=SGA # -o : Description +of the operator (SGA only now) +
    String parameter: +Describes the way the operators are applied. At the moment, only +SGA is available. SGA sequentially +applies a (quadratic) crossover operator with probability pCross +and a mutation operator with probability  pMut. +Both these operators can in turn be proportional +combinations of simple operators of the +same arity. +

    # --pCross=0.6 # -C : Probability +of Crossover +
    Floating-point parameter: +The probability that a given couple of selected genitors is applied the +crossover operator. In SGA operator model, each couple of selected genitors +is applied the crossover operator with that probability (and remains unchanged +with probability 1-pCross. +Whenever a couple undergoes crossover, a choice is made upon available +crossover operators proportionaly to their +relative rates (see below). Default +is 0.6. +

    # --pMut=0.1 # -M : Probability +of Mutation +
    Floating-point parameter: +The probability that a given individual (resulting from a crossover or +a non-crossover operation, see above) is applied the mutation operator. +Whenever an individual undergoes mutation, a choice is made upon available +mutation operators proportionaly to their +relative rates (see below). Default +is 0.1. +

    # --onePointRate=1 # -1 : +Relative rate for one point crossover +
    Floating-point parameter: +Rate of aplication of the 1-point crossover relatively +to 2-point and uniform below (see pCross +parameter). Default is 1. +

    # --twoPointRate=1 # -2 : +Relative rate for two point crossover +
    Floating-point parameter: +Rate of aplication of the 2-point crossover relatively +to 1-point above and uniform below (see pCross +parameter). Default is 1. +

    # --uRate=2 # -U : Relative +rate for uniform crossover +
    Floating-point parameter: +Rate of aplication of the 1-point crossover relatively +to 1- and 2-point above (see pCross +parameter). Default is 2. +

    # --pMutPerBit=0.01 # -b +: Probability of flipping 1 bit in bit-flip mutation +
    Floating-point parameter: +When bit-flip mutation +is applied, each bit is flipped independently with probability  pMutPerBit. +

    # --bitFlipRate=0.01 # -s +: Relative rate for bit-flip mutation +
    Floating-point parameter: +Rate of aplication of the bit-flip mutation relatively +to one-Bit mutation below (see pMut +above). Default is 0.01 +(if all relative rates are equal, the choice is uniform among available +operators). +

    # --oneBitRate=0.01 # -d +: Relative rate for deterministic bit-flip mutation +
    Floating-point parameter: +Rate of aplication of the one-bit mutation relatively +to bit-flip mutation below (see pMut +above). One-bit mutation flips one and only one bit, uniformly chosen in +the individual. Default is 0.01 +(if all relative rates are equal, the choice is uniform among available +operators). +
      +

    +


    +

    User's guide: +Real-valued specific parameters +
    The following describes the specific parameters that are available +in programs RealEA +and ESEA +to evolve genotypes that are vector<double>. +
    RealEA  +implements what can be called a "real-coded GA", where everything is identical +to the bitstring case above (except initialization and operators that are +specific to vector<double> of course) and ESEA +implements the full Evolution-Strategy self-adaptive mutation mechanism +- together with specific ES crossover operators. The initialization section +for both programs are identical, but the operator sections are totally +different. See next paragraph for a description of ES +specific parameters. +

    +


    +

    Section ######    +Genotype Initialization    ###### +
    This section should allow input if all necessary +parameters for genitype initialization +

    # --vecSize=10 # -n : The +number of variables +
    Integer parameter: +The initilization requires the length of the vector<double>. +

    # --initBounds=(0,1) # -B +: Bounds for uniform initialization +
    Special string parameter: +Bounds for uniform initialization of the real variables. At the moment +only the same bounds for all variables can be chosen, and the format is +(min,max) without any white space.  This argument is mandatory, and +default is (0,1). +

    # --sigmaInit=0.3 # -s : +Initial value for Sigma(s) +
    Floating-point parameter: +The initial value for all standard-deviation mutation strategy parameters. +Useless when no self-adaptive mutation mechanism is used. +

    +


    +

    Section ######    +Variation Operators    ###### +
    This section allows to tune the way the variation +operators will be applied to the individuals (in the strict limit of SGA +model at the moment, see below). +

    # --objectBounds=(0,1) # +-B : Bounds for variables (unbounded if absent) +
    Special string parameter: +Bounds for the variables to be met by all variation operators (see format +in initBounds +above). If this parameter is absent, unbounded +variables are assumed (but they still +need some initBounds +for initialization). For the arithmetic crossovers below, and when parameter +alpha is greater than 0, those bounds result in restricting the values +of possible combination factors. For the uniform mutation, the interval +of uniform choice of the variables is restricted by those bounds. Finally, +in the case of Gaussian mutation, the probability distribution is folded +back into the boundeds as many times as necesssary. No +default (i.e. unbounded variables). +

    # --operator=SGA # -o : Description +of the operator (SGA only now) +
    String parameter: +Describes the way the operators are applied. At the moment, only +SGA is available. SGA sequentially +applies a (quadratic) crossover operator with probability pCross +and a mutation operator with probability  pMut. +Both these operators can in turn be proportional +combinations of simple operators of the +same arity. +

    # --pCross=0.6 # -C : Probability +of Crossover +
    Floating-point parameter: +The probability that a given couple of selected genitors is applied the +crossover operator. In SGA operator model, each couple of selected genitors +is applied the crossover operator with that probability (and remains unchanged +with probability 1-pCross. +Whenever a couple undergoes crossover, a choice is made upon available +crossover operators proportionaly to their +relative rates (see below). Default +is 0.6. +

    # --pMut=0.1 # -M : Probability +of Mutation +
    Floating-point parameter: +The probability that a given individual (resulting from a crossover or +a non-crossover operation, see above) is applied the mutation operator. +Whenever an individual undergoes mutation, a choice is made upon available +mutation operators proportionaly to their +relative rates (see below). Default +is 0.1. +

    # --alpha=0 # -a : bound +for combination factor in real crossover +
    Floating-point parameter: +Bound for the choices of linear combination factors in both crossover belows +(similar to BLX-alpha notation). Default is +0 (i.e. combination factor are chosen in [0,1]). +

    # --segmentRate=1 # -s : +Relative rate for segment crossover +
    Floating-point parameter: +Rate of application of the segment crossover relatively +to hypercube and uniform crossovers (see pCross +parameter). Segment crossover generates offspring uniformly on the segment +joining both parents, i.e. constructs two linear combinations of the parents +with a random number uniformly drawn in [alpha,1+alpha]. +Default is 1. +

    # --hypercubeRate=1 # -A +: Relative rate for hypercube crossover +
    Floating-point parameter: +Rate of application of the hypercube crossover relatively +to segment and uniform crossovers (see pCross +parameter). Hypercube crossover generates offspring uniformly on the hypercube +whose diagonal is the segment joining both parents, i.e. by doing linear +combinations of each variable independently (a random number in [alpha,1+alpha] +is drawn anew for each variable). Default +is 1. +

    # --uxoverRate=1 # -A : Relative +rate for uniform crossover +
    Floating-point parameter: +Rate of application of the segment crossover relatively +to hypercube and segment crossovers (see pCross +parameter). Uniform crossover simply exchanges values of variables, i.e. +uniformly picks up two other summits of the hypercube defined by the parents. +Default is 1. +

    # --epsilon=0.01 # -e : Half-size +of interval for Uniform Mutation +
    Floating-point parameter: +The uniform and deterministic-uniform mutations will choose values of variable +X uniformly in [X-epsilon, +X+epsilon]. +Default is 0.01. +

    # --uniformMutRate=1 # -u +: Relative rate for uniform mutation +
    Floating-point parameter: +Rate of aplication of the uniform mutation relatively +to determinitic uniform and the normal mutations (see pMut +above). Uniform mutation modifies all variables by choosing new values +uniformly on an interval centered on the old value of width 2*epsilon +(see above). Default is1. +

    # --detMutRate=1 # -d : Relative +rate for deterministic uniform mutation +
    Floating-point parameter: +Rate of aplication of the determinisitc-uniform mutation relatively +to uniform and normal mutations (see pMut +above). Deterministic-uniform mutation modifies one single variable uniformly +based on epsilon epsilon. +Default is1. +

    # --normalMutRate=1 # -d +: Relative rate for Gaussian mutation +
    Floating-point parameter: +Rate of aplication of the normal mutation relatively +to two uniform mutations above (see pMut +above). Default is1. +

    # --sigma=0.3 # -s : Sigma +(fixed) for Gaussian mutation +
    Floating-point parameter: +The value of standard deviation for Gaussian mutation - fixed along evolution +(see the Evolution Strategy program below for self-adaptive mutations). +

    +


    +

    User's guide: +ES-real-valued specific parameters +
    The following describes the specific parameters for program ESEA, +that implements the full Evolution-Strategy self-adaptive mutation mechanism +- together with specific ES crossover operators. The initialization section +is the same as the one for plain vector<double> above, so only the opeartor +sections will be described here. A new section is now concerned with deciding +what kind of self-adaptive mutation strategy will be applied - it has been +separated from the other variation operators because it has consequences +on the choice of the genotype. +
    Warning: if you choose not to use +any self-adaptive mechanism (i.e. setting all parameters of this section +to false) you end up with ... an algorithm that is identical to RealEA +above (try it and take alook at the status file). +

    +


    +

    Section ######     +ES mutation    ###### +
    This section allows to decide which type of self-adaptive +mutation will be used. There are three available types: isotropic mutation, +using one standard deviation for each individual, that will be applied +to all variables; anisotropic mutation, where each individual carries as +many standard deviations as it has variables; and correlated mutation where +each individuals has its own full correlation matrix. +

    # --Isotropic=1 # -i : Isotropic +self-adaptive mutation +
    Boolean parameter: +If true, at least one self-adaptive parameter will be used for each individual. +Default is true. +

    # --Stdev=0 # -s : One self-adaptive +stDev per variable +
    Boolean parameter: +If true, at least one self-adaptive parameter per variable will be used +for each individual. Default is false. +

    # --Correl=0 # -c : Use correlated +mutations +
    Boolean parameter: +If true, full correalted self-adaptive mutation will be used for each individual. +Default is false. +

    Note: The +default values result in an isotropic self-adaptive mutation to be chosen. +

    +


    +

    Section ######    +Variation Operators    ###### +
    Only the parameters that are specific to ESEA +are presented here - the objectBounds, +operator, +pCross +and pMut +are exactly the same as for RealEA +above. +

    # --crossType=global # -C +: Type of ES recombination (global or standard) +
    String parameter:  +Es crossover can involve only two parents - and it is then identical to +the standard +hypercube crossover describe for the RealEA +parameters above. But new parents can also be chosen anew for each variable +before doing the crossover for that variable - and this is called global +recombination. +

    # --crossObj=discrete # -O +: Recombination of object variables (discrete or intermediate) +
    String parameter:  +There are two possible crossovers in plain ES. The discrete +crossover simpy exchanges variables among the parents. It is similar to +the plain uniform crossover for real variables. The  crossover performs +a linear combination of parents;variables - it si similar to the hypercube +crossover described for  with alpah parameter set to 0. This parameter +allso to choose the type of crossover that will be applied to the object +variables (i.e. the origianl variables +of the problem). Default is discrete. +

    # --crossStdev=intermediate +# -S : Recombination of mutation strategy parameters (intermediate or discrete) +
    String parameter:  +This parameter allows to choose the type of crossover (see above) that +will be applied to the mutation strategy +parameters that are part of the genotype. +Default is intermediate. +

    # --TauLoc=1 # -l : Local +Tau (before normalization) +
    Floating-point parameter: +The local factor for the mutation of the mutation strategy parameters (the +only one used when a single standard deviation is used). Default +is 1. +

    # --TauGlob=1 # -g : Global +Tau (before normalization) +
    Floating-point parameter: +The global factor for the mutation of the mutation strategy parameters +(only useful when more than one standard deviation are used). Default +is 1. +

    # --Beta=0.0873 # -b : Beta +
    Floating-point parameter: +The factor for the mutation of the rotation angles in the case of the full +correlated mutation. Default is 0.0873 +(following Schwefel). +



    Programmer's guide diff --git a/eo/tutorial/html/eoTutorial.html b/eo/tutorial/html/eoTutorial.html index 38e87a92..c7363a8d 100644 --- a/eo/tutorial/html/eoTutorial.html +++ b/eo/tutorial/html/eoTutorial.html @@ -17,9 +17,9 @@ and to

    EO Tutorial

    -
    Version 0.95 - May. 2 2001 -
    New: Lesson4 -- with user guide of fully operational program
    +
    Version 0.95 - May. 4 2001 +
    New: Lesson4 +- with user guide of fully operational program for bitstrings and real-valued, including full support of ES self-adaptive mutation strategies

    Welcome to EO tutorial/on-line documentation.

    Please note that this tutorial is not supposed