diff --git a/mo/src/continuator/moCounterMonitorSaver.h b/mo/src/continuator/moCounterMonitorSaver.h index f57e05d2d..6ac5a7062 100644 --- a/mo/src/continuator/moCounterMonitorSaver.h +++ b/mo/src/continuator/moCounterMonitorSaver.h @@ -52,7 +52,11 @@ public : moCounterMonitorSaver(unsigned _interval, eoMonitor& _mon) : interval(_interval), counter(0) { monitors.push_back(&_mon); } - + + moCounterMonitorSaver(unsigned _interval) + : interval(_interval), counter(0) + { } + /** * call monitors if interval is reach by a counter */ diff --git a/mo/src/continuator/moFitnessMomentsStat.h b/mo/src/continuator/moFitnessMomentsStat.h index 794d113b8..4bd550b76 100644 --- a/mo/src/continuator/moFitnessMomentsStat.h +++ b/mo/src/continuator/moFitnessMomentsStat.h @@ -1,35 +1,26 @@ /* - - Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 - Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau +(c) Thales group, 2010 - This software is governed by the CeCILL license under French law and - abiding by the rules of distribution of free software. You can use, - modify and/ or redistribute the software under the terms of the CeCILL - license as circulated by CEA, CNRS and INRIA at the following URL - "http://www.cecill.info". + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; + version 2 of the License. - As a counterpart to the access to the source code and rights to copy, - modify and redistribute granted by the license, users are provided only - with a limited warranty and the software's author, the holder of the - economic rights, and the successive licensors have only limited liability. + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. - In this respect, the user's attention is drawn to the risks associated - with loading, using, modifying and/or developing or reproducing the - software by the user in light of its specific status of free software, - that may mean that it is complicated to manipulate, and that also - therefore means that it is reserved for developers and experienced - professionals having in-depth computer knowledge. Users are therefore - encouraged to load and test the software's suitability as regards their - requirements in conditions enabling the security of their systems and/or - data to be ensured and, more generally, to use and operate it in the - same conditions as regards security. - The fact that you are presently reading this means that you have had - knowledge of the CeCILL license and that you accept its terms. + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Contact: http://eodev.sourceforge.net + +Authors: +Lionel Parreaux - ParadisEO WebSite : http://paradiseo.gforge.inria.fr - Contact: paradiseo-help@lists.gforge.inria.fr */ #ifndef moFitnessMomentsStat_h @@ -39,7 +30,7 @@ #include /** - * Statistic that saves the standard deviation of the fitness of the solutions during the search + * Statistic that saves the average and variance of the fitness of the solutions during the search */ template //class moFitnessMomentsStat : public moStat > @@ -50,7 +41,7 @@ public : //typedef std::pair Pair; typedef std::pair Pair; using moStat::value; - + /** * Default Constructor * @param _reInitSol when true the best so far is reinitialized @@ -66,38 +57,33 @@ public : * @param _sol the first solution */ virtual void init(EOT & _sol) { - if (reInitSol || firstTime) - { - value() = Pair(0.0,0.0); - nbSolutionsEncountered = currentAvg = currentVar = 0; - firstTime = false; - } - /*else if (firstTime) - { - value() = 0.0; - firstTime = false; - }*/ - operator()(_sol); + if (reInitSol || firstTime) + { + value() = Pair(0.0,0.0); + nbSolutionsEncountered = currentAvg = currentVar = 0; + firstTime = false; + } + operator()(_sol); + } + + /** + * Update the best solution + * @param _sol the current solution + */ + virtual void operator()(EOT & _sol) { + ++nbSolutionsEncountered; + double x = _sol.fitness(); + double oldAvg = currentAvg; + currentAvg = oldAvg + (x - oldAvg)/nbSolutionsEncountered; + if (nbSolutionsEncountered > 1) // <- not really necessary + { + //value() = (value()/nbSolutionsEncountered + _sol.fitness())/(nbSolutionsEncountered+1); + double oldVar = currentVar; + currentVar = oldVar + (x - oldAvg) * (x - currentAvg); + value() = Pair(currentAvg, currentVar/nbSolutionsEncountered); + } } - /** - * Update the best solution - * @param _sol the current solution - */ - virtual void operator()(EOT & _sol) { - ++nbSolutionsEncountered; - double x = _sol.fitness(); - double oldAvg = currentAvg; - currentAvg = oldAvg + (x - oldAvg)/nbSolutionsEncountered; - if (nbSolutionsEncountered > 1) // <- not really necessary - { - //value() = (value()/nbSolutionsEncountered + _sol.fitness())/(nbSolutionsEncountered+1); - double oldVar = currentVar; - currentVar = oldVar + (x - oldAvg) * (x - currentAvg); - value() = Pair(currentAvg, currentVar/nbSolutionsEncountered); - } - } - /** * @return name of the class */ @@ -113,7 +99,7 @@ protected: , currentAvg , currentVar // actually the var * n ; - + }; #endif // moFitnessMomentsStat_h diff --git a/mo/src/continuator/moFitnessVarianceStat.h b/mo/src/continuator/moFitnessVarianceStat.h index 3769c5983..844b8af5d 100644 --- a/mo/src/continuator/moFitnessVarianceStat.h +++ b/mo/src/continuator/moFitnessVarianceStat.h @@ -1,35 +1,26 @@ /* - - Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 - Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau +(c) Thales group, 2010 - This software is governed by the CeCILL license under French law and - abiding by the rules of distribution of free software. You can use, - modify and/ or redistribute the software under the terms of the CeCILL - license as circulated by CEA, CNRS and INRIA at the following URL - "http://www.cecill.info". + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; + version 2 of the License. - As a counterpart to the access to the source code and rights to copy, - modify and redistribute granted by the license, users are provided only - with a limited warranty and the software's author, the holder of the - economic rights, and the successive licensors have only limited liability. + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. - In this respect, the user's attention is drawn to the risks associated - with loading, using, modifying and/or developing or reproducing the - software by the user in light of its specific status of free software, - that may mean that it is complicated to manipulate, and that also - therefore means that it is reserved for developers and experienced - professionals having in-depth computer knowledge. Users are therefore - encouraged to load and test the software's suitability as regards their - requirements in conditions enabling the security of their systems and/or - data to be ensured and, more generally, to use and operate it in the - same conditions as regards security. - The fact that you are presently reading this means that you have had - knowledge of the CeCILL license and that you accept its terms. + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Contact: http://eodev.sourceforge.net + +Authors: +Lionel Parreaux - ParadisEO WebSite : http://paradiseo.gforge.inria.fr - Contact: paradiseo-help@lists.gforge.inria.fr */ #ifndef moFitnessVarianceStat_h @@ -68,12 +59,7 @@ public : nbSolutionsEncountered = currentAvg = currentVar = 0; firstTime = false; } - /*else if (firstTime) - { - value() = 0.0; - firstTime = false; - }*/ - operator()(_sol); + operator()(_sol); } /** @@ -85,13 +71,9 @@ public : double x = _sol.fitness(); double oldAvg = currentAvg; currentAvg = oldAvg + (x - oldAvg)/nbSolutionsEncountered; - if (nbSolutionsEncountered > 1) // <- not really necessary - { - //value() = (value()/nbSolutionsEncountered + _sol.fitness())/(nbSolutionsEncountered+1); - double oldVar = currentVar; - currentVar = oldVar + (x - oldAvg) * (x - currentAvg); - value() = currentVar/nbSolutionsEncountered; - } + double oldVar = currentVar; + currentVar = oldVar + (x - oldAvg) * (x - currentAvg); + value() = currentVar/nbSolutionsEncountered; } /** diff --git a/mo/src/continuator/moUpdater.h b/mo/src/continuator/moUpdater.h index 0be846d38..37a26a04f 100644 --- a/mo/src/continuator/moUpdater.h +++ b/mo/src/continuator/moUpdater.h @@ -39,9 +39,8 @@ #include /** - * Base class for to update what ever you want - * similar to eoUpdater - * But there is an init method ! + * Base class for updating whatever you want. + * Similar to eoUpdater, but there is an "init" method ! */ class moUpdater : public eoF { diff --git a/mo/src/coolingSchedule/moDynSpanCoolingSchedule.h b/mo/src/coolingSchedule/moDynSpanCoolingSchedule.h index 4e6216ad5..5ec3a886c 100644 --- a/mo/src/coolingSchedule/moDynSpanCoolingSchedule.h +++ b/mo/src/coolingSchedule/moDynSpanCoolingSchedule.h @@ -82,25 +82,25 @@ public: * @param _acceptedMove true when the move is accepted, false otherwise * @param _currentSolution the current solution */ - virtual void update(double& _temp, bool _acceptedMove, EOT & _currentSolution) { - spanTries++; - - if (_acceptedMove) - spanMove++; - - if (spanTries >= spanTriesMax || spanMove >= spanMoveMax) { - _temp *= alpha; - - if (spanMove == 0) // no move during this span ? - nbSpan++; - else - nbSpan = 0; - - spanTries = 0; - spanMove = 0; - } - } - + virtual void update(double& _temp, bool _acceptedMove, EOT & _currentSolution) { + spanTries++; + + if (_acceptedMove) + spanMove++; + + if (spanTries >= spanTriesMax || spanMove >= spanMoveMax) { + _temp *= alpha; + + if (spanMove == 0) // no move during this span ? + nbSpan++; + else + nbSpan = 0; + + spanTries = 0; + spanMove = 0; + } + } + /** * compare the number of span with no move * @param _temp current temperature diff --git a/mo/src/explorer/moNeighborhoodExplorer.h b/mo/src/explorer/moNeighborhoodExplorer.h index 8b4113b7a..76ee12af7 100644 --- a/mo/src/explorer/moNeighborhoodExplorer.h +++ b/mo/src/explorer/moNeighborhoodExplorer.h @@ -65,15 +65,19 @@ public: typedef typename Neighbor::EOT EOT; typedef typename EOT::Fitness Fitness ; - moNeighborhoodExplorer():neighborhood(dummyNeighborhood), eval(dummyEval), isMoved(false) {} + moNeighborhoodExplorer() + : neighborhood(dummyNeighborhood), eval(dummyEval), isMoved(false) + { } /** * Constructor with a Neighborhood and evaluation function * @param _neighborhood the neighborhood * @param _eval the evaluation function */ - moNeighborhoodExplorer(Neighborhood& _neighborhood, moEval& _eval):neighborhood(_neighborhood), eval(_eval), isMoved(false) {} - + moNeighborhoodExplorer(Neighborhood& _neighborhood, moEval& _eval) + : neighborhood(_neighborhood), eval(_eval), isMoved(false) + { } + /** * Init Search parameters * @param _solution the solution to explore diff --git a/mo/src/neighborhood/moRealNeighbor.h b/mo/src/neighborhood/moRealNeighbor.h index 4af8924f2..e4a4a18d6 100644 --- a/mo/src/neighborhood/moRealNeighbor.h +++ b/mo/src/neighborhood/moRealNeighbor.h @@ -1,3 +1,28 @@ +/* + +(c) Thales group, 2010 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; + version 2 of the License. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Contact: http://eodev.sourceforge.net + +Authors: +Lionel Parreaux + +*/ + #ifndef __moRealNeighbor_h__ #define __moRealNeighbor_h__ diff --git a/mo/src/neighborhood/moRealNeighborhood.h b/mo/src/neighborhood/moRealNeighborhood.h index 9219eb69b..a54564868 100644 --- a/mo/src/neighborhood/moRealNeighborhood.h +++ b/mo/src/neighborhood/moRealNeighborhood.h @@ -1,11 +1,36 @@ +/* + +(c) Thales group, 2010 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; + version 2 of the License. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Contact: http://eodev.sourceforge.net + +Authors: +Lionel Parreaux + +*/ #ifndef __moRealNeighborhood_h__ #define __moRealNeighborhood_h__ #include +#include template -class moRealNeighborhood : public moRndNeighborhood< Neighbor >, public eoFunctorBase +class moRealNeighborhood : public moRndNeighborhood< Neighbor > { public: typedef typename Distrib::EOType EOT; @@ -17,7 +42,14 @@ protected: public: - moRealNeighborhood( Distrib & distrib, edoSampler & sampler, edoBounder & bounder ) : _distrib(distrib), _sampler(sampler), _bounder(bounder) {} + moRealNeighborhood( + Distrib& distrib, + edoSampler& sampler, + edoBounder& bounder + ): _distrib(distrib), + _sampler(sampler), + _bounder(bounder) + { } /** * It alway remains at least a solution in an infinite neighborhood diff --git a/mo/src/sampling/moStdDevEstimator.h b/mo/src/sampling/moStdDevEstimator.h index e517240db..4daa9057b 100644 --- a/mo/src/sampling/moStdDevEstimator.h +++ b/mo/src/sampling/moStdDevEstimator.h @@ -1,19 +1,39 @@ +/* + +(c) Thales group, 2010 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; + version 2 of the License. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Contact: http://eodev.sourceforge.net + +Authors: +Lionel Parreaux + +*/ + #ifndef __moStdDevEstimator_h__ #define __moStdDevEstimator_h__ #include #include -#include // TODO rm -#include // TODO rm - // TODO make tests - - template< class EOT, class Neighbor > class moStdDevEstimator : public eoUF { public: - + /** * General constructor for the estimator * @param continuator a user-defined continuator @@ -22,29 +42,31 @@ public: * @param eval neighbor's evaluation function * @param walker a local search algorithm */ - moStdDevEstimator ( - moContinuator& continuator, - moNeighborhood < Neighbor > & neighborhood, - eoEvalFunc& fullEval, - - /* The following should be read: - moEval& eval = _default_eval - * (which is not possible to achieve as is in C++) */ - const eoOptional< moEval >& eval = eoOptional< moEval >::null, - - const eoOptional< moLocalSearch >& walker = eoOptional< moLocalSearch >::null - ) - : _default_eval ( fullEval ), - _eval(eval.hasValue()? eval.get(): _default_eval), - _default_continuator( 0 ), - _continuator( _continuator ), - _checkpoint( _continuator ), - _default_walker( neighborhood, fullEval, _eval, _checkpoint ), - _walker( walker.hasValue()? walker.get(): _default_walker ) - { - _checkpoint.add( _varStat ); - } - + moStdDevEstimator ( + moContinuator& continuator, + moNeighborhood& neighborhood, + eoEvalFunc& fullEval, + + /* + The following should be read: + moEval& eval = _default_eval + (which is not possible to achieve as is in C++) + */ + const eoOptional< moEval >& eval = eoOptional< moEval >::null, + + const eoOptional< moLocalSearch >& walker = eoOptional< moLocalSearch >::null + ) + : _default_eval ( fullEval ), + _eval(eval.hasValue()? eval.get(): _default_eval), + _default_continuator( 0 ), + _continuator( _continuator ), + _checkpoint( _continuator ), + _default_walker( neighborhood, fullEval, _eval, _checkpoint ), + _walker( walker.hasValue()? walker.get(): _default_walker ) + { + _checkpoint.add( _varStat ); + } + /** * Simpler constructor for the estimator * @param max_iters the number of steps the default moIterContinuator should perform @@ -53,34 +75,34 @@ public: * @param eval neighbor's evaluation function * @param walker a local search algorithm */ - moStdDevEstimator ( - unsigned int max_iters, - moNeighborhood < Neighbor > & neighborhood, - eoEvalFunc& fullEval, - const eoOptional< moEval >& eval = eoOptional< moEval >::null, - const eoOptional< moLocalSearch >& walker = eoOptional< moLocalSearch >::null - ) - : _default_eval ( fullEval ), - _eval(eval.hasValue()? eval.get(): _default_eval), - _default_continuator( max_iters, false ), - _continuator( _default_continuator ), - _checkpoint( _continuator ), - _default_walker( neighborhood, fullEval, _eval, _checkpoint ), - _walker( walker.hasValue()? walker.get(): _default_walker ) - { - _checkpoint.add( _varStat ); - } - - /** - * Evaluates the estimator with the walker algorithm and returns the standard deviation - * @param solution the solution from where to start the walk - */ - double operator()( EOT & solution ) - { - _walker(solution); - return sqrt(_varStat.value()); - } - + moStdDevEstimator ( + unsigned int max_iters, + moNeighborhood < Neighbor > & neighborhood, + eoEvalFunc& fullEval, + const eoOptional< moEval >& eval = eoOptional< moEval >::null, + const eoOptional< moLocalSearch >& walker = eoOptional< moLocalSearch >::null + ) + : _default_eval ( fullEval ), + _eval(eval.hasValue()? eval.get(): _default_eval), + _default_continuator( max_iters, false ), + _continuator( _default_continuator ), + _checkpoint( _continuator ), + _default_walker( neighborhood, fullEval, _eval, _checkpoint ), + _walker( walker.hasValue()? walker.get(): _default_walker ) + { + _checkpoint.add( _varStat ); + } + + /** + * Evaluates the estimator with the walker algorithm and returns the standard deviation + * @param solution the solution from where to start the walk + */ + double operator()( EOT & solution ) + { + _walker(solution); + return sqrt(_varStat.value()); + } + /** * @return the class name */ @@ -92,16 +114,16 @@ private: moFullEvalByCopy _default_eval; moEval& _eval; - - moIterContinuator _default_continuator; - moContinuator & _continuator; - - moCheckpoint _checkpoint; - + + moIterContinuator _default_continuator; + moContinuator & _continuator; + + moCheckpoint _checkpoint; + moRandomWalk _default_walker; moLocalSearch _walker; - - moFitnessVarianceStat _varStat; + + moFitnessVarianceStat _varStat; }; #endif // __moStdDevEstimator_h__ diff --git a/problems/eval/queenEval.h b/problems/eval/queenEval.h index da8dd9ee3..154261b4c 100644 --- a/problems/eval/queenEval.h +++ b/problems/eval/queenEval.h @@ -40,17 +40,18 @@ class queenEval : public eoEvalFunc { public: - /** - * Count number of threat - * @param _queen a solution - */ - void operator()(EOT& _queen){ - unsigned int fit=0; - for(unsigned int i=0; i<_queen.size()-1; i++) - for(unsigned int j=i+1; j< _queen.size(); j++) - if(((unsigned int)_queen[i]+j-i == (unsigned int)_queen[j]) || ((unsigned int)_queen[i]+i-j == (unsigned int)_queen[j])) - fit++; - _queen.fitness(fit); + /** + * Count number of threat + * @param _queen a solution + */ + void operator()(EOT& _queen) + { + unsigned int fit = 0; + for(unsigned int i = 0; i < _queen.size()-1; i++) + for(unsigned int j = i+1; j < _queen.size(); j++) + if(((unsigned int)_queen[i]+j-i == (unsigned int)_queen[j]) || ((unsigned int)_queen[i]+i-j == (unsigned int)_queen[j])) + fit++; + _queen.fitness(fit); } };