diff --git a/trunk/install.cmake b/trunk/install.cmake index dc7021434..b6f4f4456 100644 --- a/trunk/install.cmake +++ b/trunk/install.cmake @@ -72,7 +72,7 @@ IF(WIN32 AND NOT CYGWIN) ENDIF(CMAKE_CXX_COMPILER MATCHES cl) ELSE(WIN32 AND NOT CYGWIN) IF(CMAKE_COMPILER_IS_GNUCXX) - SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g -fprofile-arcs -ftest-coverage -Wall -Wextra -Wno-unused-parameter -Wno-ignored-qualifiers") + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g -fprofile-arcs -ftest-coverage -Wall -Wextra -Wno-unused-parameter") SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") SET(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -O6") ENDIF(CMAKE_COMPILER_IS_GNUCXX) diff --git a/trunk/paradiseo-mo/src/continuator/moCombinedContinuator.h b/trunk/paradiseo-mo/src/continuator/moCombinedContinuator.h index a12d4caa6..9e7ab54c0 100644 --- a/trunk/paradiseo-mo/src/continuator/moCombinedContinuator.h +++ b/trunk/paradiseo-mo/src/continuator/moCombinedContinuator.h @@ -42,16 +42,11 @@ class moCombinedContinuator : public moContinuator public: typedef typename Neighbor::EOT EOT ; - /** - * @param _maxFit maximum fitness to reach - */ - moCombinedContinuator(Fitness _maxFit): maxFit(_maxFit){} - /** * Default constructor (moCheckpoint must have at least one continuator) * @param _cont a continuator */ - moCombinedContinuator(moContinuator& _cont) : { + moCombinedContinuator(moContinuator& _cont) { continuators.push_back(&_cont); } @@ -73,7 +68,7 @@ public: // some data may be update in each continuator. // So, all continuators are tested for(unsigned int i = 0; i < continuators.size(); ++i) - if ( !(*continuators[i])(_sol) ) + if ( !(*continuators[i])(_solution) ) bContinue = false; return bContinue; diff --git a/trunk/paradiseo-mo/src/eval/moEvalCounter.h b/trunk/paradiseo-mo/src/eval/moEvalCounter.h index 2a9d49184..902c96749 100644 --- a/trunk/paradiseo-mo/src/eval/moEvalCounter.h +++ b/trunk/paradiseo-mo/src/eval/moEvalCounter.h @@ -53,7 +53,7 @@ public: * @param _solution a solution * @param _neighbor a neighbor */ - void operator()(EOT& _solution, Neighbor& _neigbor) { + void operator()(EOT& _solution, Neighbor& _neighbor) { value()++; eval(_solution, _neighbor); } diff --git a/trunk/paradiseo-mo/src/problems/eval/moOneMaxIncrEval.h b/trunk/paradiseo-mo/src/problems/eval/moOneMaxIncrEval.h index 501b3fba9..56edaf2d6 100644 --- a/trunk/paradiseo-mo/src/problems/eval/moOneMaxIncrEval.h +++ b/trunk/paradiseo-mo/src/problems/eval/moOneMaxIncrEval.h @@ -51,7 +51,7 @@ public: _neighbor.fitness(_solution.fitness() + 1); else _neighbor.fitness(_solution.fitness() - 1); - }g + } }; #endif diff --git a/trunk/paradiseo-mo/tutorial/Lesson1/CMakeLists.txt b/trunk/paradiseo-mo/tutorial/Lesson1/CMakeLists.txt index fb04d5ef2..c4237c6d3 100644 --- a/trunk/paradiseo-mo/tutorial/Lesson1/CMakeLists.txt +++ b/trunk/paradiseo-mo/tutorial/Lesson1/CMakeLists.txt @@ -9,8 +9,10 @@ ADD_EXECUTABLE(lesson1_simpleHC lesson1_simpleHC.cpp) ADD_EXECUTABLE(lesson1_firstImprHC lesson1_firstImprHC.cpp) ADD_EXECUTABLE(lesson1_randomBestHC lesson1_randomBestHC.cpp) ADD_EXECUTABLE(lesson1_neutralHC lesson1_neutralHC.cpp) +ADD_EXECUTABLE(lesson1_continuator lesson1_continuator.cpp) TARGET_LINK_LIBRARIES(lesson1_simpleHC eoutils ga eo) TARGET_LINK_LIBRARIES(lesson1_firstImprHC eoutils ga eo) TARGET_LINK_LIBRARIES(lesson1_randomBestHC eoutils ga eo) TARGET_LINK_LIBRARIES(lesson1_neutralHC eoutils ga eo) +TARGET_LINK_LIBRARIES(lesson1_continuator eoutils ga eo) diff --git a/trunk/paradiseo-mo/tutorial/Lesson1/lesson1_continuator.cpp b/trunk/paradiseo-mo/tutorial/Lesson1/lesson1_continuator.cpp new file mode 100644 index 000000000..51e2a28c4 --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/Lesson1/lesson1_continuator.cpp @@ -0,0 +1,215 @@ +//----------------------------------------------------------------------------- +/** lesson1_continuator.cpp + * + * SV - 27/04/10 - version 1 + * + */ +//----------------------------------------------------------------------------- + +// standard includes +#define HAVE_SSTREAM + +#include // runtime_error +#include // cout +#include // ostrstream, istrstream +#include +#include + +// the general include for eo +#include + +// declaration of the namespace +using namespace std; + +//----------------------------------------------------------------------------- +// representation of solutions, and neighbors +#include // bit string : see also EO tutorial lesson 1: FirstBitGA.cpp +#include // neighbor of bit string + +//----------------------------------------------------------------------------- +// fitness function, and evaluation of neighbors +#include +#include +#include + +//----------------------------------------------------------------------------- +// neighborhood description +#include // visit all neighbors in increasing order of bit index + +//----------------------------------------------------------------------------- +// the possible continuators +#include +#include +#include +#include +#include + +//----------------------------------------------------------------------------- +// the simple Hill-Climbing local search +#include + +// Declaration of types +//----------------------------------------------------------------------------- +// Indi is the typedef of the solution type like in paradisEO-eo +typedef eoBit Indi; // bit string with unsigned fitness type +// Neighbor is the typedef of the neighbor type, +// Neighbor = How to compute the neighbor from the solution + information on it (i.e. fitness) +// all classes from paradisEO-mo use this template type +typedef moBitNeighbor Neighbor ; // bit string neighbor with unsigned fitness type + + +// Main function +//----------------------------------------------------------------------------- +void main_function(int argc, char **argv) +{ + /* ========================================================= + * + * Parameters from parser + * + * ========================================================= */ + // more information on the input parameters: see EO tutorial lesson 3 + // but don't care at first it just read the parameters of the bit string size and the random seed. + + // First define a parser from the command-line arguments + eoParser parser(argc, argv); + + // For each parameter, define Parameter, read it through the parser, + // and assign the value to the variable + + // random seed parameter + eoValueParam seedParam(time(0), "seed", "Random number seed", 'S'); + parser.processParam( seedParam ); + unsigned seed = seedParam.value(); + + // length of the bit string + eoValueParam vecSizeParam(20, "vecSize", "Genotype size", 'V'); + parser.processParam( vecSizeParam, "Representation" ); + unsigned vecSize = vecSizeParam.value(); + + // the name of the "status" file where all actual parameter values will be saved + string str_status = parser.ProgramName() + ".status"; // default value + eoValueParam statusParam(str_status.c_str(), "status", "Status file"); + parser.processParam( statusParam, "Persistence" ); + + // do the following AFTER ALL PARAMETERS HAVE BEEN PROCESSED + // i.e. in case you need parameters somewhere else, postpone these + if (parser.userNeedsHelp()) { + parser.printHelp(cout); + exit(1); + } + if (statusParam.value() != "") { + ofstream os(statusParam.value().c_str()); + os << parser;// and you can use that file as parameter file + } + + /* ========================================================= + * + * Random seed + * + * ========================================================= */ + + // reproducible random seed: if you don't change SEED above, + // you'll aways get the same result, NOT a random run + // more information: see EO tutorial lesson 1 (FirstBitGA.cpp) + rng.reseed(seed); + + /* ========================================================= + * + * Initialization of the solution + * + * ========================================================= */ + + // a Indi random initializer: each bit is random + // more information: see EO tutorial lesson 1 (FirstBitGA.cpp) + eoUniformGenerator uGen; + eoInitFixedLength random(vecSize, uGen); + + /* ========================================================= + * + * Eval fitness function (full evaluation) + * + * ========================================================= */ + + // the fitness function is just the number of 1 in the bit string + oneMaxEval fullEval; + + /* ========================================================= + * + * evaluation of a neighbor solution + * + * ========================================================= */ + + // Use it if there is no incremental evaluation: a neighbor is evaluated by the full evaluation of a solution + // moFullEvalByModif neighborEval(fullEval); + + // Incremental evaluation of the neighbor: fitness is modified by +/- 1 + moOneMaxIncrEval neighborEval; + + /* ========================================================= + * + * the neighborhood of a solution + * + * ========================================================= */ + + // Exploration of the neighborhood in increasing order of the neigbor's index: + // bit-flip from bit 0 to bit (vecSize - 1) + moOrderNeighborhood neighborhood(vecSize); + + /* ========================================================= + * + * the external continuators + * + * ========================================================= */ + + moIterContinuator continuator(10); // maximum number of iterations : 10 + // moFitContinuator continuator(17); // fitness to reach : 17 + // moFullEvalContinuator continuator(2); // maximum number of full evaluation : 2 + // moNeighborEvalContinuator continuator(20); // maximum number of neighbor evaluation : 20 + + /* ========================================================= + * + * the local search algorithm + * + * ========================================================= */ + + moSimpleHC hc(neighborhood, fullEval, neighborEval, continuator); + + /* ========================================================= + * + * executes the local search from a random solution + * + * ========================================================= */ + + // The current solution + Indi solution; + + // Apply random initialization + random(solution); + + // Evaluation of the initial solution: + // can be evaluated here, or else it will be done at the beginning of the local search + fullEval(solution); + + // Output: the intial solution + std::cout << "initial: " << solution << std::endl ; + + // Apply the local search on the solution ! + hc(solution); + + // Output: the final solution + std::cout << "final: " << solution << std::endl ; + +} + +// A main that catches the exceptions + +int main(int argc, char **argv) +{ + try { + main_function(argc, argv); + } + catch (exception& e) { + cout << "Exception: " << e.what() << '\n'; + } + return 1; +}