diff --git a/trunk/paradiseo-mo/src/index.h b/trunk/paradiseo-mo/src/index.h
index 1cca31998..4dfce5992 100644
--- a/trunk/paradiseo-mo/src/index.h
+++ b/trunk/paradiseo-mo/src/index.h
@@ -53,7 +53,7 @@ It contains classes for almost any kind of one solution based heuristics.
@section Installation
-The installation procedure of the package is detailed in the
+The installation procedure of the package is detailed in the
README file in the top-directory of the source-tree.
*/
diff --git a/trunk/paradiseo-mo/src/mo.h b/trunk/paradiseo-mo/src/mo.h
index a443a302f..12c882665 100755
--- a/trunk/paradiseo-mo/src/mo.h
+++ b/trunk/paradiseo-mo/src/mo.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
diff --git a/trunk/paradiseo-mo/src/moAlgo.h b/trunk/paradiseo-mo/src/moAlgo.h
index c9886dee6..a2e45ab45 100755
--- a/trunk/paradiseo-mo/src/moAlgo.h
+++ b/trunk/paradiseo-mo/src/moAlgo.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -44,8 +44,6 @@
moHC, moTS and moSA are 3 examples of algorithm of the paradiseo-mo library.
*/
template < class EOT > class moAlgo:public eoMonOp < EOT >
-{
-
-};
+ {};
#endif
diff --git a/trunk/paradiseo-mo/src/moAspirCrit.h b/trunk/paradiseo-mo/src/moAspirCrit.h
index e8390aed8..ba757e687 100755
--- a/trunk/paradiseo-mo/src/moAspirCrit.h
+++ b/trunk/paradiseo-mo/src/moAspirCrit.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -45,18 +45,18 @@
See moNoAspriCrit for example.
*/
template < class M > class moAspirCrit:public eoBF < const M &, const typename
- M::EOType::Fitness &,
- bool >
-{
+ M::EOType::Fitness &,
+ bool >
+ {
-public:
- //! Procedure which initialises all that needs a aspiration criterion.
- /*!
- It can be possible that this procedure do nothing...
- */
- virtual void
- init () = 0;
+ public:
+ //! Procedure which initialises all that needs a aspiration criterion.
+ /*!
+ It can be possible that this procedure do nothing...
+ */
+ virtual void
+ init () = 0;
-};
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moBestImprSelect.h b/trunk/paradiseo-mo/src/moBestImprSelect.h
index 715ab6149..031344cea 100755
--- a/trunk/paradiseo-mo/src/moBestImprSelect.h
+++ b/trunk/paradiseo-mo/src/moBestImprSelect.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -45,74 +45,74 @@
which enables the best improvement is selected.
*/
template < class M > class moBestImprSelect:public moMoveSelect < M >
-{
-
-public:
-
- //! Alias for the fitness.
- typedef typename M::EOType::Fitness Fitness;
-
- //! Procedure which initialise the exploration
- void init (const Fitness & __fit)
{
- first_time = true;
- }
+ public:
+
+ //! Alias for the fitness.
+ typedef typename M::EOType::Fitness Fitness;
+
+ //! Procedure which initialise the exploration
+ void init (const Fitness & __fit)
+ {
+
+ first_time = true;
+ }
- //!Function that indicates if the current move has not improved the fitness.
- /*!
- If the given fitness enables an improvment,
- the move (moMove) and the fitness linked to this move are saved.
+ //!Function that indicates if the current move has not improved the fitness.
+ /*!
+ If the given fitness enables an improvment,
+ the move (moMove) and the fitness linked to this move are saved.
- \param __move a move.
- \param __fit a fitness linked to the move.
- \return TRUE if the move does not improve the fitness.
- */
- bool update (const M & __move, const Fitness & __fit)
- {
+ \param __move a move.
+ \param __fit a fitness linked to the move.
+ \return TRUE if the move does not improve the fitness.
+ */
+ bool update (const M & __move, const Fitness & __fit)
+ {
- if (first_time || __fit > best_fit)
- {
+ if (first_time || __fit > best_fit)
+ {
- best_fit = __fit;
- best_move = __move;
+ best_fit = __fit;
+ best_move = __move;
- first_time = false;
- }
+ first_time = false;
+ }
- return true;
- }
+ return true;
+ }
- //! Procedure which saved the best move and fitness.
- /*!
- \param __move the current move (result of the procedure).
- \param __fit the current fitness (result of the procedure).
- \throws EmptySelection if no move has improved the fitness.
- */
- void operator () (M & __move, Fitness & __fit) throw (EmptySelection)
- {
+ //! Procedure which saved the best move and fitness.
+ /*!
+ \param __move the current move (result of the procedure).
+ \param __fit the current fitness (result of the procedure).
+ \throws EmptySelection if no move has improved the fitness.
+ */
+ void operator () (M & __move, Fitness & __fit) throw (EmptySelection)
+ {
- if (!first_time)
- {
- __move = best_move;
- __fit = best_fit;
- }
- else
- throw EmptySelection ();
- }
+ if (!first_time)
+ {
+ __move = best_move;
+ __fit = best_fit;
+ }
+ else
+ throw EmptySelection ();
+ }
-private:
+ private:
- //! Allowing to know if at least one move has been generated.
- bool first_time;
+ //! Allowing to know if at least one move has been generated.
+ bool first_time;
- //! The best move.
- M best_move;
+ //! The best move.
+ M best_move;
- //! The best fitness.
- Fitness best_fit;
+ //! The best fitness.
+ Fitness best_fit;
-};
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moComparator.h b/trunk/paradiseo-mo/src/moComparator.h
index 231dd4e23..3b2b1d17e 100644
--- a/trunk/paradiseo-mo/src/moComparator.h
+++ b/trunk/paradiseo-mo/src/moComparator.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -38,13 +38,12 @@
#define __moComparator_h
-//! Template for classes which need to compare two EOT and indicate if the first is "better" than the second.
+//! Template for classes which need to compare two EOT and indicate if the first is "better" than the second.
/*!
The objects that extend this template describe how an EOT is "better" than an other.
*/
template
class moComparator: public eoBF
-{
-};
+ {};
#endif
diff --git a/trunk/paradiseo-mo/src/moCoolingSchedule.h b/trunk/paradiseo-mo/src/moCoolingSchedule.h
index a757fde04..5f5477b6f 100644
--- a/trunk/paradiseo-mo/src/moCoolingSchedule.h
+++ b/trunk/paradiseo-mo/src/moCoolingSchedule.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -45,8 +45,6 @@
See moExponentialCoolingSchedule or moLinearCoolingSchedule for example.
*/
class moCoolingSchedule:public eoUF < double &, bool >
-{
-
-};
+ {};
#endif
diff --git a/trunk/paradiseo-mo/src/moExponentialCoolingSchedule.h b/trunk/paradiseo-mo/src/moExponentialCoolingSchedule.h
index 5a717b735..cebebf7df 100644
--- a/trunk/paradiseo-mo/src/moExponentialCoolingSchedule.h
+++ b/trunk/paradiseo-mo/src/moExponentialCoolingSchedule.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -45,36 +45,36 @@
the temperature is greater than a given threshold.
*/
class moExponentialCoolingSchedule: public moCoolingSchedule
-{
-
-public:
- //! Simple constructor
- /*!
- \param __threshold the threshold.
- \param __ratio the ratio used to descrease the temperature.
- */
- moExponentialCoolingSchedule (double __threshold, double __ratio):threshold (__threshold), ratio (__ratio)
- {}
-
- //! Function which proceeds to the cooling.
- /*!
- It decreases the temperature and indicates if it is greater than the threshold.
-
- \param __temp the current temperature.
- \return if the new temperature (current temperature * ratio) is greater than the threshold.
- */
- bool operator() (double &__temp)
{
- return (__temp *= ratio) > threshold;
- }
-private:
+ public:
+ //! Simple constructor
+ /*!
+ \param __threshold the threshold.
+ \param __ratio the ratio used to descrease the temperature.
+ */
+ moExponentialCoolingSchedule (double __threshold, double __ratio):threshold (__threshold), ratio (__ratio)
+ {}
- //! The temperature threhold.
- double threshold;
+ //! Function which proceeds to the cooling.
+ /*!
+ It decreases the temperature and indicates if it is greater than the threshold.
- //! The decreasing factor of the temperature.
- double ratio;
-};
+ \param __temp the current temperature.
+ \return if the new temperature (current temperature * ratio) is greater than the threshold.
+ */
+ bool operator() (double &__temp)
+ {
+ return (__temp *= ratio) > threshold;
+ }
+
+ private:
+
+ //! The temperature threhold.
+ double threshold;
+
+ //! The decreasing factor of the temperature.
+ double ratio;
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moFirstImprSelect.h b/trunk/paradiseo-mo/src/moFirstImprSelect.h
index 6f4b91a02..d64b053a6 100755
--- a/trunk/paradiseo-mo/src/moFirstImprSelect.h
+++ b/trunk/paradiseo-mo/src/moFirstImprSelect.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -46,84 +46,84 @@
current solution.
*/
template < class M > class moFirstImprSelect:public moMoveSelect < M >
-{
-
-public:
-
- //! Alias for the fitness.
- typedef typename M::EOType::Fitness Fitness;
-
- //! Procedure which initialise the exploration.
- /*!
- It save the current fitness as the initial value for the fitness.
- */
- virtual void init (const Fitness & __fit)
{
- valid = false;
- init_fit = __fit;
- }
+ public:
+
+ //! Alias for the fitness.
+ typedef typename M::EOType::Fitness Fitness;
+
+ //! Procedure which initialise the exploration.
+ /*!
+ It save the current fitness as the initial value for the fitness.
+ */
+ virtual void init (const Fitness & __fit)
+ {
+
+ valid = false;
+ init_fit = __fit;
+ }
- //!Function that indicates if the current move has not improved the fitness.
- /*!
- If the given fitness enables an improvment,
- the move (moMove) should be applied to the current solution.
+ //!Function that indicates if the current move has not improved the fitness.
+ /*!
+ If the given fitness enables an improvment,
+ the move (moMove) should be applied to the current solution.
- \param __move a move.
- \param __fit a fitness linked to the move.
- \return TRUE if the move does not improve the fitness.
- */
- bool update (const M & __move, const typename M::EOType::Fitness & __fit)
- {
+ \param __move a move.
+ \param __fit a fitness linked to the move.
+ \return TRUE if the move does not improve the fitness.
+ */
+ bool update (const M & __move, const typename M::EOType::Fitness & __fit)
+ {
- if (__fit > init_fit)
- {
+ if (__fit > init_fit)
+ {
- best_fit = __fit;
- best_move = __move;
- valid = true;
+ best_fit = __fit;
+ best_move = __move;
+ valid = true;
- return false;
- }
- else
- {
- return true;
- }
- }
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+ }
- //! Procedure which saved the best move and fitness.
- /*!
- \param __move the current move (result of the procedure).
- \param __fit the current fitness (result of the procedure).
- \throws EmptySelection if no move has improved the fitness.
- */
- void operator () (M & __move, Fitness & __fit) throw (EmptySelection)
- {
+ //! Procedure which saved the best move and fitness.
+ /*!
+ \param __move the current move (result of the procedure).
+ \param __fit the current fitness (result of the procedure).
+ \throws EmptySelection if no move has improved the fitness.
+ */
+ void operator () (M & __move, Fitness & __fit) throw (EmptySelection)
+ {
- if (valid)
- {
- __move = best_move;
- __fit = best_fit;
- }
- else
- throw EmptySelection ();
- }
+ if (valid)
+ {
+ __move = best_move;
+ __fit = best_fit;
+ }
+ else
+ throw EmptySelection ();
+ }
-private:
+ private:
- //! Allow to know if at least one move has improved the solution.
- bool valid;
+ //! Allow to know if at least one move has improved the solution.
+ bool valid;
- //! Best stored movement.
- M best_move;
+ //! Best stored movement.
+ M best_move;
- //! Initial fitness.
- Fitness init_fit;
+ //! Initial fitness.
+ Fitness init_fit;
- //! Best stored fitness.
- Fitness best_fit;
+ //! Best stored fitness.
+ Fitness best_fit;
-};
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moFitComparator.h b/trunk/paradiseo-mo/src/moFitComparator.h
index ca06196f0..588c97a28 100644
--- a/trunk/paradiseo-mo/src/moFitComparator.h
+++ b/trunk/paradiseo-mo/src/moFitComparator.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -37,25 +37,25 @@
#ifndef __moFitComparator_h
#define __moFitComparator_h
-//! Comparison according to the fitness.
+//! Comparison according to the fitness.
/*!
An EOT is better than an other if its fitness is better.
*/
template
class moFitComparator: public moComparator
-{
- public:
-
- //! Function which makes the comparison and gives the result.
- /*!
- \param _solution1 The first solution.
- \param _solution2 The second solution.
- \return true if the fitness of the first solution is better than the second solution, false else.
- */
- bool operator()(const EOT& _solution1, const EOT& _solution2)
{
- return _solution1.fitness()>_solution2.fitness();
- }
-};
+ public:
+
+ //! Function which makes the comparison and gives the result.
+ /*!
+ \param _solution1 The first solution.
+ \param _solution2 The second solution.
+ \return true if the fitness of the first solution is better than the second solution, false else.
+ */
+ bool operator()(const EOT& _solution1, const EOT& _solution2)
+ {
+ return _solution1.fitness()>_solution2.fitness();
+ }
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moFitSolContinue.h b/trunk/paradiseo-mo/src/moFitSolContinue.h
index e3f6be592..b50722031 100644
--- a/trunk/paradiseo-mo/src/moFitSolContinue.h
+++ b/trunk/paradiseo-mo/src/moFitSolContinue.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -44,48 +44,48 @@
The stop criterion corresponds to a fitness threshold gained.
*/
template < class EOT > class moFitSolContinue:public moSolContinue < EOT >
-{
-
-public:
-
- //! Alias for the fitness.
- typedef typename EOT::Fitness Fitness;
-
- //! Basic constructor.
- /*!
- \param __fitness The fitness to reach.
- */
- moFitSolContinue (Fitness __fitness): fitness (__fitness)
- {}
-
- //! Function that activates the stopping criterion.
- /*!
- Indicates if the fitness threshold has not yet been reached.
-
- \param __sol the current solution.
- \return true or false according to the value of the fitness.
- */
- bool operator () (const EOT & __sol)
{
- if(__sol.invalid())
- {
- return true;
- }
- return __sol.fitness() < fitness;
- }
+ public:
- //! Procedure which allows to initialise all the stuff needed.
- /*!
- It can be also used to reinitialize all the needed things.
- */
- void init ()
- {}
+ //! Alias for the fitness.
+ typedef typename EOT::Fitness Fitness;
-private:
+ //! Basic constructor.
+ /*!
+ \param __fitness The fitness to reach.
+ */
+ moFitSolContinue (Fitness __fitness): fitness (__fitness)
+ {}
- //! Fitness target.
- Fitness fitness;
-};
+ //! Function that activates the stopping criterion.
+ /*!
+ Indicates if the fitness threshold has not yet been reached.
+
+ \param __sol the current solution.
+ \return true or false according to the value of the fitness.
+ */
+ bool operator () (const EOT & __sol)
+ {
+ if (__sol.invalid())
+ {
+ return true;
+ }
+
+ return __sol.fitness() < fitness;
+ }
+
+ //! Procedure which allows to initialise all the stuff needed.
+ /*!
+ It can be also used to reinitialize all the needed things.
+ */
+ void init ()
+ {}
+
+ private:
+
+ //! Fitness target.
+ Fitness fitness;
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moGenSolContinue.h b/trunk/paradiseo-mo/src/moGenSolContinue.h
index 0e18e18a5..09aa4c291 100755
--- a/trunk/paradiseo-mo/src/moGenSolContinue.h
+++ b/trunk/paradiseo-mo/src/moGenSolContinue.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -44,51 +44,49 @@
The stop criterion corresponds to a maximum number of iteration.
*/
template < class EOT > class moGenSolContinue:public moSolContinue < EOT >
-{
-
-public:
-
- //! Simple constructor.
- /*!
- \param __maxNumGen the maximum number of generation.
- */
- moGenSolContinue (unsigned int __maxNumGen):maxNumGen (__maxNumGen), numGen (0)
{
- }
+ public:
- //! Function that activates the stop criterion.
- /*!
- Increments the counter and returns TRUE if the
- current number of iteration is lower than the given
- maximum number of iterations.
+ //! Simple constructor.
+ /*!
+ \param __maxNumGen the maximum number of generation.
+ */
+ moGenSolContinue (unsigned int __maxNumGen):maxNumGen (__maxNumGen), numGen (0)
+ {}
- \param __sol the current solution.
- \return TRUE or FALSE according to the current generation number.
- */
- bool operator () (const EOT & __sol)
- {
+ //! Function that activates the stop criterion.
+ /*!
+ Increments the counter and returns TRUE if the
+ current number of iteration is lower than the given
+ maximum number of iterations.
- return (++numGen < maxNumGen);
- }
+ \param __sol the current solution.
+ \return TRUE or FALSE according to the current generation number.
+ */
+ bool operator () (const EOT & __sol)
+ {
- //! Procedure which allows to initialise the generation counter.
- /*!
- It can also be used to reset the iteration counter.
- */
- void init ()
- {
+ return (++numGen < maxNumGen);
+ }
- numGen = 0;
- }
+ //! Procedure which allows to initialise the generation counter.
+ /*!
+ It can also be used to reset the iteration counter.
+ */
+ void init ()
+ {
-private:
+ numGen = 0;
+ }
- //! Iteration maximum number.
- unsigned int maxNumGen;
+ private:
- //! Iteration current number.
- unsigned int numGen;
-};
+ //! Iteration maximum number.
+ unsigned int maxNumGen;
+
+ //! Iteration current number.
+ unsigned int numGen;
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moHC.h b/trunk/paradiseo-mo/src/moHC.h
index e2f1e9b64..6e189f25b 100755
--- a/trunk/paradiseo-mo/src/moHC.h
+++ b/trunk/paradiseo-mo/src/moHC.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -48,110 +48,106 @@
Class which describes the algorithm for a hill climbing.
*/
template < class M > class moHC:public moAlgo < typename M::EOType >
-{
+ {
- //! Alias for the type.
- typedef
+ //! Alias for the type.
+ typedef
typename
M::EOType
EOT;
- //! Alias for the fitness.
- typedef
+ //! Alias for the fitness.
+ typedef
typename
EOT::Fitness
Fitness;
-public:
+ public:
- //! Full constructor.
- /*!
- All the boxes are given in order the HC to use a moHCMoveLoopExpl.
+ //! Full constructor.
+ /*!
+ All the boxes are given in order the HC to use a moHCMoveLoopExpl.
- \param __move_init a move initialiser.
- \param __next_move a neighborhood explorer.
- \param __incr_eval a (generally) efficient evaluation function.
- \param __move_select a move selector.
- \param __full_eval a full evaluation function.
- */
-moHC (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval, moMoveSelect < M > &__move_select, eoEvalFunc < EOT > &__full_eval):move_expl (*new moHCMoveLoopExpl < M >
- (__move_init, __next_move, __incr_eval, __move_select)),
- full_eval (__full_eval)
- {
+ \param __move_init a move initialiser.
+ \param __next_move a neighborhood explorer.
+ \param __incr_eval a (generally) efficient evaluation function.
+ \param __move_select a move selector.
+ \param __full_eval a full evaluation function.
+ */
+ moHC (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval, moMoveSelect < M > &__move_select, eoEvalFunc < EOT > &__full_eval):move_expl (*new moHCMoveLoopExpl < M >
+ (__move_init, __next_move, __incr_eval, __move_select)),
+ full_eval (__full_eval)
+ {}
- }
+ //! Light constructor.
+ /*!
+ This constructor allow to use another moMoveExpl (generally not a moHCMoveLoopExpl).
- //! Light constructor.
- /*!
- This constructor allow to use another moMoveExpl (generally not a moHCMoveLoopExpl).
+ \param __move_expl a complete explorer.
+ \param __full_eval a full evaluation function.
+ */
+ moHC (moMoveExpl < M > &__move_expl, eoEvalFunc < EOT > &__full_eval):move_expl (__move_expl),
+ full_eval
+ (__full_eval)
+ {}
- \param __move_expl a complete explorer.
- \param __full_eval a full evaluation function.
- */
-moHC (moMoveExpl < M > &__move_expl, eoEvalFunc < EOT > &__full_eval):move_expl (__move_expl),
- full_eval
- (__full_eval)
- {
+ //! Function which launches the HC
+ /*!
+ The HC has to improve a current solution.
+ As the moSA and the mo TS, it can be used for HYBRIDATION in an evolutionnary algorithm.
- }
+ \param __sol a current solution to improve.
+ \return TRUE.
+ */
+ bool operator ()(EOT & __sol)
+ {
- //! Function which launches the HC
- /*!
- The HC has to improve a current solution.
- As the moSA and the mo TS, it can be used for HYBRIDATION in an evolutionnary algorithm.
+ if (__sol.invalid ())
+ {
+ full_eval (__sol);
+ }
- \param __sol a current solution to improve.
- \return TRUE.
- */
- bool operator ()(EOT & __sol)
- {
+ EOT new_sol;
- if (__sol.invalid ())
- {
- full_eval (__sol);
- }
+ do
+ {
- EOT new_sol;
+ new_sol = __sol;
- do
- {
+ try
+ {
- new_sol = __sol;
+ move_expl (__sol, new_sol);
- try
- {
+ }
+ catch (EmptySelection & __ex)
+ {
- move_expl (__sol, new_sol);
+ break;
+ }
- }
- catch (EmptySelection & __ex)
- {
+ if (new_sol.fitness () > __sol.fitness ())
+ {
+ __sol = new_sol;
+ }
+ else
+ {
+ break;
+ }
- break;
- }
+ }
+ while (true);
- if (new_sol.fitness () > __sol.fitness ())
- {
- __sol = new_sol;
- }
- else
- {
- break;
- }
+ return true;
+ }
- }
- while (true);
+ private:
- return true;
- }
+ //! Complete exploration of the neighborhood.
+ moMoveExpl < M > &move_expl;
-private:
-
- //! Complete exploration of the neighborhood.
- moMoveExpl < M > &move_expl;
-
- //! A full evaluation function.
- eoEvalFunc < EOT > &full_eval;
-};
+ //! A full evaluation function.
+ eoEvalFunc < EOT > &full_eval;
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moHCMoveLoopExpl.h b/trunk/paradiseo-mo/src/moHCMoveLoopExpl.h
index 42db68647..ec3c23d2d 100755
--- a/trunk/paradiseo-mo/src/moHCMoveLoopExpl.h
+++ b/trunk/paradiseo-mo/src/moHCMoveLoopExpl.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -46,88 +46,86 @@
//! Iterative explorer used by a moHC.
template < class M > class moHCMoveLoopExpl:public moMoveLoopExpl < M >
-{
-
- //! Alias for the type.
- typedef typename M::EOType EOT;
-
- //! Alias for the fitness.
- typedef typename M::EOType::Fitness Fitness;
-
-public:
-
- //! Constructor.
- /*!
- All the boxes have to be specified.
-
- \param __move_init the move initialiser.
- \param __next_move the neighborhood explorer.
- \param __incr_eval (generally) efficient evaluation function.
- \param __move_select the move selector.
- */
-moHCMoveLoopExpl (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval, moMoveSelect < M > &__move_select):
-
- move_init (__move_init),
- next_move (__next_move),
- incr_eval (__incr_eval), move_select (__move_select)
{
- }
+ //! Alias for the type.
+ typedef typename M::EOType EOT;
- //! Procedure which launches the explorer.
- /*!
- The exploration starts from an old solution and provides a new solution.
+ //! Alias for the fitness.
+ typedef typename M::EOType::Fitness Fitness;
- \param __old_sol the current solution.
- \param __new_sol the new_sol (result of the procedure).
- */
- void operator () (const EOT & __old_sol, EOT & __new_sol)
- {
+ public:
- M move;
+ //! Constructor.
+ /*!
+ All the boxes have to be specified.
- //
- move_init (move, __old_sol); /* Restarting the exploration of
- of the neighborhood ! */
+ \param __move_init the move initialiser.
+ \param __next_move the neighborhood explorer.
+ \param __incr_eval (generally) efficient evaluation function.
+ \param __move_select the move selector.
+ */
+ moHCMoveLoopExpl (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval, moMoveSelect < M > &__move_select):
- move_select.init (__old_sol.fitness ());
+ move_init (__move_init),
+ next_move (__next_move),
+ incr_eval (__incr_eval), move_select (__move_select)
+ {}
- while (move_select.update (move, incr_eval (move, __old_sol))
- && next_move (move, __old_sol));
+ //! Procedure which launches the explorer.
+ /*!
+ The exploration starts from an old solution and provides a new solution.
- try
+ \param __old_sol the current solution.
+ \param __new_sol the new_sol (result of the procedure).
+ */
+ void operator () (const EOT & __old_sol, EOT & __new_sol)
{
- M best_move;
+ M move;
- Fitness best_move_fit;
+ //
+ move_init (move, __old_sol); /* Restarting the exploration of
+ of the neighborhood ! */
- move_select (best_move, best_move_fit);
- __new_sol.fitness (best_move_fit);
- best_move (__new_sol);
+ move_select.init (__old_sol.fitness ());
+ while (move_select.update (move, incr_eval (move, __old_sol))
+ && next_move (move, __old_sol));
+
+ try
+ {
+
+ M best_move;
+
+ Fitness best_move_fit;
+
+ move_select (best_move, best_move_fit);
+ __new_sol.fitness (best_move_fit);
+ best_move (__new_sol);
+
+ }
+ catch (EmptySelection & __ex)
+ {
+
+ // ?
+ }
}
- catch (EmptySelection & __ex)
- {
- // ?
- }
- }
+ private:
-private:
+ //! Move initialiser.
+ moMoveInit < M > &move_init;
- //! Move initialiser.
- moMoveInit < M > &move_init;
+ //! Neighborhood explorer.
+ moNextMove < M > &next_move;
- //! Neighborhood explorer.
- moNextMove < M > &next_move;
+ //! (generally) Efficient evaluation.
+ moMoveIncrEval < M > &incr_eval;
- //! (generally) Efficient evaluation.
- moMoveIncrEval < M > &incr_eval;
+ //! Move selector.
+ moMoveSelect < M > &move_select;
- //! Move selector.
- moMoveSelect < M > &move_select;
-
-};
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moILS.h b/trunk/paradiseo-mo/src/moILS.h
index b76857848..3eb050049 100644
--- a/trunk/paradiseo-mo/src/moILS.h
+++ b/trunk/paradiseo-mo/src/moILS.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -48,156 +48,156 @@
Class which describes the algorithm for a iterated local search.
*/
template < class M > class moILS:public moAlgo < typename M::EOType >
-{
-
- //! Alias for the type.
- typedef typename M::EOType EOT;
-
- //! Alias for the fitness.
- typedef typename EOT::Fitness Fitness;
-
-public:
-
- //! Generic constructor
- /*!
- Generic constructor using a moAlgo
-
- \param __algo The solution based heuristic to use.
- \param __continue The stopping criterion.
- \param __acceptance_criterion The acceptance criterion.
- \param __perturbation The pertubation generator.
- \param __full_eval The evaluation function.
- */
- moILS (moAlgo &__algo, moSolContinue &__continue, moComparator &__acceptance_criterion, eoMonOp &__perturbation,
- eoEvalFunc &__full_eval):
- algo(__algo), cont(__continue), acceptance_criterion(__acceptance_criterion), perturbation(__perturbation), full_eval(__full_eval)
- {}
-
- //! Constructor for using a moHC for the moAlgo
- /*!
- \param __move_init The move initialisation (for the moHC).
- \param __next_move The move generator (for the moHC).
- \param __incr_eval The partial evaluation function (for the moHC).
- \param __move_select The move selection strategy (for the moHC).
- \param __continue The stopping criterion.
- \param __acceptance_criterion The acceptance criterion.
- \param __perturbation The pertubation generator.
- \param __full_eval The evaluation function.
- */
- moILS (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval,
- moMoveSelect < M > &__move_select, moSolContinue &__continue, moComparator &__acceptance_criterion,
- eoMonOp &__perturbation, eoEvalFunc &__full_eval):
- algo(*new moHC(__move_init, __next_move, __incr_eval, __move_select, __full_eval)), cont(__continue),
- acceptance_criterion(__acceptance_criterion), perturbation(__perturbation), full_eval(__full_eval)
- {}
-
- //! Constructor for using a moTS for the moAlgo
- /*!
- \param __move_init The move initialisation (for the moTS).
- \param __next_move The move generator (for the moTS).
- \param __incr_eval The partial evaluation function (for the moTS).
- \param __tabu_list The tabu list (for the moTS !!!!).
- \param __aspir_crit The aspiration criterion (for the moTS).
- \param __moTS_continue The stopping criterion (for the moTS).
- \param __continue The stopping criterion.
- \param __acceptance_criterion The acceptance criterion.
- \param __perturbation The pertubation generator.
- \param __full_eval The evaluation function.
- */
- moILS (moMoveInit &__move_init, moNextMove &__next_move, moMoveIncrEval &__incr_eval,
- moTabuList &__tabu_list, moAspirCrit &__aspir_crit, moSolContinue &__moTS_continue,
- moSolContinue &__continue, moComparator &__acceptance_criterion, eoMonOp &__perturbation,
- eoEvalFunc &__full_eval):
- algo(*new moTS(__move_init, __next_move, __incr_eval, __tabu_list, __aspir_crit, __moTS_continue, __full_eval)),
- cont(__continue), acceptance_criterion(__acceptance_criterion), perturbation(__perturbation), full_eval(__full_eval)
- {}
-
- //! Constructor for using a moSA for the moAlgo
- /*!
- \param __move_rand The random move generator (for the moSA).
- \param __incr_eval The partial evaluation function (for the moSA).
- \param __moSA_continue The stopping criterion (for the moSA).
- \param __init_temp The initial temperature (for the moSA).
- \param __cool_sched The cooling scheduler (for the moSA).
- \param __continue The stopping criterion.
- \param __acceptance_criterion The acceptance criterion.
- \param __perturbation The pertubation generator.
- \param __full_eval The evaluation function.
- */
- moILS (moRandMove &__move_rand, moMoveIncrEval &__incr_eval, moSolContinue &__moSA_continue, double __init_temp,
- moCoolingSchedule & __cool_sched, moSolContinue &__continue, moComparator &__acceptance_criterion,
- eoMonOp &__perturbation, eoEvalFunc &__full_eval):
- algo(*new moSA(__move_rand, __incr_eval, __moSA_continue, __init_temp, __cool_sched, __full_eval)),
- cont(__continue), acceptance_criterion(__acceptance_criterion), perturbation(__perturbation), full_eval(__full_eval)
- {}
-
-
-
- //! Function which launches the ILS
- /*!
- The ILS has to improve a current solution.
- As the moSA, the moTS and the moHC, it can be used for HYBRIDATION in an evolutionnary algorithm.
-
- \param __sol a current solution to improve.
- \return TRUE.
- */
- bool operator()(EOT & __sol)
{
- EOT __sol_saved=__sol;
-
- cont.init ();
- //some code has been duplicated in order to avoid one perturbation and one evaluation without adding a test in the loop.
- // better than a do {} while; with a test in the loop.
+ //! Alias for the type.
+ typedef typename M::EOType EOT;
- algo(__sol);
-
- if(acceptance_criterion(__sol, __sol_saved))
- {
- __sol_saved=__sol;
-
- }
- else
- {
- __sol=__sol_saved;
- }
-
- while (cont (__sol))
+ //! Alias for the fitness.
+ typedef typename EOT::Fitness Fitness;
+
+ public:
+
+ //! Generic constructor
+ /*!
+ Generic constructor using a moAlgo
+
+ \param __algo The solution based heuristic to use.
+ \param __continue The stopping criterion.
+ \param __acceptance_criterion The acceptance criterion.
+ \param __perturbation The pertubation generator.
+ \param __full_eval The evaluation function.
+ */
+ moILS (moAlgo &__algo, moSolContinue &__continue, moComparator &__acceptance_criterion, eoMonOp &__perturbation,
+ eoEvalFunc &__full_eval):
+ algo(__algo), cont(__continue), acceptance_criterion(__acceptance_criterion), perturbation(__perturbation), full_eval(__full_eval)
+ {}
+
+ //! Constructor for using a moHC for the moAlgo
+ /*!
+ \param __move_init The move initialisation (for the moHC).
+ \param __next_move The move generator (for the moHC).
+ \param __incr_eval The partial evaluation function (for the moHC).
+ \param __move_select The move selection strategy (for the moHC).
+ \param __continue The stopping criterion.
+ \param __acceptance_criterion The acceptance criterion.
+ \param __perturbation The pertubation generator.
+ \param __full_eval The evaluation function.
+ */
+ moILS (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval,
+ moMoveSelect < M > &__move_select, moSolContinue &__continue, moComparator &__acceptance_criterion,
+ eoMonOp &__perturbation, eoEvalFunc &__full_eval):
+ algo(*new moHC(__move_init, __next_move, __incr_eval, __move_select, __full_eval)), cont(__continue),
+ acceptance_criterion(__acceptance_criterion), perturbation(__perturbation), full_eval(__full_eval)
+ {}
+
+ //! Constructor for using a moTS for the moAlgo
+ /*!
+ \param __move_init The move initialisation (for the moTS).
+ \param __next_move The move generator (for the moTS).
+ \param __incr_eval The partial evaluation function (for the moTS).
+ \param __tabu_list The tabu list (for the moTS !!!!).
+ \param __aspir_crit The aspiration criterion (for the moTS).
+ \param __moTS_continue The stopping criterion (for the moTS).
+ \param __continue The stopping criterion.
+ \param __acceptance_criterion The acceptance criterion.
+ \param __perturbation The pertubation generator.
+ \param __full_eval The evaluation function.
+ */
+ moILS (moMoveInit &__move_init, moNextMove &__next_move, moMoveIncrEval &__incr_eval,
+ moTabuList &__tabu_list, moAspirCrit &__aspir_crit, moSolContinue &__moTS_continue,
+ moSolContinue &__continue, moComparator &__acceptance_criterion, eoMonOp &__perturbation,
+ eoEvalFunc &__full_eval):
+ algo(*new moTS(__move_init, __next_move, __incr_eval, __tabu_list, __aspir_crit, __moTS_continue, __full_eval)),
+ cont(__continue), acceptance_criterion(__acceptance_criterion), perturbation(__perturbation), full_eval(__full_eval)
+ {}
+
+ //! Constructor for using a moSA for the moAlgo
+ /*!
+ \param __move_rand The random move generator (for the moSA).
+ \param __incr_eval The partial evaluation function (for the moSA).
+ \param __moSA_continue The stopping criterion (for the moSA).
+ \param __init_temp The initial temperature (for the moSA).
+ \param __cool_sched The cooling scheduler (for the moSA).
+ \param __continue The stopping criterion.
+ \param __acceptance_criterion The acceptance criterion.
+ \param __perturbation The pertubation generator.
+ \param __full_eval The evaluation function.
+ */
+ moILS (moRandMove &__move_rand, moMoveIncrEval &__incr_eval, moSolContinue &__moSA_continue, double __init_temp,
+ moCoolingSchedule & __cool_sched, moSolContinue &__continue, moComparator &__acceptance_criterion,
+ eoMonOp &__perturbation, eoEvalFunc &__full_eval):
+ algo(*new moSA(__move_rand, __incr_eval, __moSA_continue, __init_temp, __cool_sched, __full_eval)),
+ cont(__continue), acceptance_criterion(__acceptance_criterion), perturbation(__perturbation), full_eval(__full_eval)
+ {}
+
+
+
+ //! Function which launches the ILS
+ /*!
+ The ILS has to improve a current solution.
+ As the moSA, the moTS and the moHC, it can be used for HYBRIDATION in an evolutionnary algorithm.
+
+ \param __sol a current solution to improve.
+ \return TRUE.
+ */
+ bool operator()(EOT & __sol)
{
- perturbation(__sol);
- full_eval(__sol);
-
+ EOT __sol_saved=__sol;
+
+ cont.init ();
+
+ //some code has been duplicated in order to avoid one perturbation and one evaluation without adding a test in the loop.
+ // better than a do {} while; with a test in the loop.
+
algo(__sol);
-
- if(acceptance_criterion(__sol, __sol_saved))
- {
- __sol_saved=__sol;
- }
+
+ if (acceptance_criterion(__sol, __sol_saved))
+ {
+ __sol_saved=__sol;
+
+ }
else
- {
- __sol=__sol_saved;
- }
+ {
+ __sol=__sol_saved;
+ }
+
+ while (cont (__sol))
+ {
+ perturbation(__sol);
+ full_eval(__sol);
+
+ algo(__sol);
+
+ if (acceptance_criterion(__sol, __sol_saved))
+ {
+ __sol_saved=__sol;
+ }
+ else
+ {
+ __sol=__sol_saved;
+ }
+ }
+
+ return true;
}
-
- return true;
- }
-private:
+ private:
- //! The solution based heuristic.
- moAlgo &algo;
+ //! The solution based heuristic.
+ moAlgo &algo;
- //! The stopping criterion.
- moSolContinue &cont;
+ //! The stopping criterion.
+ moSolContinue &cont;
- //! The acceptance criterion.
- moComparator &acceptance_criterion;
+ //! The acceptance criterion.
+ moComparator &acceptance_criterion;
- //! The perturbation generator
- eoMonOp &perturbation;
-
- //! The full evaluation function
- eoEvalFunc &full_eval;
-};
+ //! The perturbation generator
+ eoMonOp &perturbation;
+
+ //! The full evaluation function
+ eoEvalFunc &full_eval;
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moImprBestFitAspirCrit.h b/trunk/paradiseo-mo/src/moImprBestFitAspirCrit.h
index 0a808d822..687b28bfb 100755
--- a/trunk/paradiseo-mo/src/moImprBestFitAspirCrit.h
+++ b/trunk/paradiseo-mo/src/moImprBestFitAspirCrit.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -45,65 +45,65 @@
is the best ever considered.
*/
template < class M > class moImprBestFitAspirCrit:public moAspirCrit < M >
-{
-
-public:
-
- //! Alias for the fitness
- typedef typename M::EOType::Fitness Fitness;
-
- //! Contructor
- moImprBestFitAspirCrit ()
{
- first_time = true;
- }
+ public:
- //! Initialisation procedure
- void init ()
- {
+ //! Alias for the fitness
+ typedef typename M::EOType::Fitness Fitness;
- first_time = true;
- }
+ //! Contructor
+ moImprBestFitAspirCrit ()
+ {
- //! Function that indicates if the fit is better that the already saved fit
- /*!
- The first time, the function only saved the current move and fitness.
+ first_time = true;
+ }
- \param __move a move.
- \param __fit a fitnes linked to the move.
- \return TRUE the first time and if __fit > best_fit, else FALSE.
- */
- bool operator () (const M & __move, const Fitness & __fit)
- {
+ //! Initialisation procedure
+ void init ()
+ {
- if (first_time)
- {
+ first_time = true;
+ }
- best_fit = __fit;
- first_time = false;
+ //! Function that indicates if the fit is better that the already saved fit
+ /*!
+ The first time, the function only saved the current move and fitness.
- return true;
- }
- else if (__fit < best_fit)
- return false;
+ \param __move a move.
+ \param __fit a fitnes linked to the move.
+ \return TRUE the first time and if __fit > best_fit, else FALSE.
+ */
+ bool operator () (const M & __move, const Fitness & __fit)
+ {
- else
- {
+ if (first_time)
+ {
- best_fit = __fit;
+ best_fit = __fit;
+ first_time = false;
- return true;
- }
- }
+ return true;
+ }
+ else if (__fit < best_fit)
+ return false;
-private:
+ else
+ {
- //! Best fitness found until now
- Fitness best_fit;
+ best_fit = __fit;
- //! Indicates that a fitness has been already saved or not
- bool first_time;
-};
+ return true;
+ }
+ }
+
+ private:
+
+ //! Best fitness found until now
+ Fitness best_fit;
+
+ //! Indicates that a fitness has been already saved or not
+ bool first_time;
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moItRandNextMove.h b/trunk/paradiseo-mo/src/moItRandNextMove.h
index 00e0f2aea..cbdceb7b8 100755
--- a/trunk/paradiseo-mo/src/moItRandNextMove.h
+++ b/trunk/paradiseo-mo/src/moItRandNextMove.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -45,65 +45,63 @@
This class is a move (moMove) generator with a bound for the maximum number of iterations.
*/
template < class M > class moItRandNextMove:public moNextMove < M >
-{
-
- //! Alias for the type.
- typedef typename M::EOType EOT;
-
-public:
-
- //! The constructor.
- /*!
- Parameters only for initialising the attributes.
-
- \param __rand_move the random move generator.
- \param __max_iter the iteration maximum number.
- */
- moItRandNextMove (moRandMove < M > &__rand_move,
- unsigned int __max_iter):rand_move (__rand_move),
- max_iter (__max_iter), num_iter (0)
{
- }
+ //! Alias for the type.
+ typedef typename M::EOType EOT;
- //! Generation of a new move
- /*!
- If the maximum number is not already reached, the current move is forgotten and remplaced by another one.
+ public:
- \param __move the current move.
- \param __sol the current solution.
- \return FALSE if the maximum number of iteration is reached, else TRUE.
- */
- bool operator () (M & __move, const EOT & __sol)
- {
+ //! The constructor.
+ /*!
+ Parameters only for initialising the attributes.
- if (num_iter++ > max_iter)
- {
+ \param __rand_move the random move generator.
+ \param __max_iter the iteration maximum number.
+ */
+ moItRandNextMove (moRandMove < M > &__rand_move,
+ unsigned int __max_iter):rand_move (__rand_move),
+ max_iter (__max_iter), num_iter (0)
+ {}
- num_iter = 0;
- return false;
- }
- else
- {
+ //! Generation of a new move
+ /*!
+ If the maximum number is not already reached, the current move is forgotten and remplaced by another one.
- /* The given solution is discarded here */
- rand_move (__move);
- num_iter++;
- return true;
- }
- }
+ \param __move the current move.
+ \param __sol the current solution.
+ \return FALSE if the maximum number of iteration is reached, else TRUE.
+ */
+ bool operator () (M & __move, const EOT & __sol)
+ {
-private:
+ if (num_iter++ > max_iter)
+ {
- //! A move generator (generally randomly).
- moRandMove < M > &rand_move;
+ num_iter = 0;
+ return false;
+ }
+ else
+ {
- //! Iteration maximum number.
- unsigned int max_iter;
+ /* The given solution is discarded here */
+ rand_move (__move);
+ num_iter++;
+ return true;
+ }
+ }
- //! Iteration current number.
- unsigned int num_iter;
+ private:
-};
+ //! A move generator (generally randomly).
+ moRandMove < M > &rand_move;
+
+ //! Iteration maximum number.
+ unsigned int max_iter;
+
+ //! Iteration current number.
+ unsigned int num_iter;
+
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moLSCheckPoint.h b/trunk/paradiseo-mo/src/moLSCheckPoint.h
index 9a41e28a2..1ca0ba5e1 100755
--- a/trunk/paradiseo-mo/src/moLSCheckPoint.h
+++ b/trunk/paradiseo-mo/src/moLSCheckPoint.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -44,48 +44,48 @@
Thanks to this class, at each iteration, additionnal function can be used (and not only one).
*/
template < class M > class moLSCheckPoint:public eoBF < const M &, const typename
- M::EOType &, void >
-{
-
-public:
- //! Function which launches the checkpointing
- /*!
- Each saved function is used on the current move and the current solution.
-
- \param __move a move.
- \param __sol a solution.
- */
- void
- operator () (const M & __move, const typename M::EOType & __sol)
+ M::EOType &, void >
{
- for (unsigned int i = 0; i < func.size (); i++)
+ public:
+ //! Function which launches the checkpointing
+ /*!
+ Each saved function is used on the current move and the current solution.
+
+ \param __move a move.
+ \param __sol a solution.
+ */
+ void
+ operator () (const M & __move, const typename M::EOType & __sol)
+ {
+
+ for (unsigned int i = 0; i < func.size (); i++)
+ {
+ func[i]->operator ()(__move, __sol);
+ }
+ }
+
+ //! Procedure which add a new function to the function vector
+ /*!
+ The new function is added at the end of the vector.
+ \param __f a new function to add.
+ */
+ void
+ add (eoBF < const M &, const typename M::EOType &, void >&__f)
{
- func[i]->operator ()(__move, __sol);
+
+ func.push_back (&__f);
}
- }
- //! Procedure which add a new function to the function vector
- /*!
- The new function is added at the end of the vector.
- \param __f a new function to add.
- */
- void
- add (eoBF < const M &, const typename M::EOType &, void >&__f)
- {
+ private:
- func.push_back (&__f);
- }
-
-private:
-
- //! vector of function
- std::vector < eoBF < const
+ //! vector of function
+ std::vector < eoBF < const
M &, const
typename
- M::EOType &, void >*>
+ M::EOType &, void >*>
func;
-};
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moLinearCoolingSchedule.h b/trunk/paradiseo-mo/src/moLinearCoolingSchedule.h
index 6c4e213d1..120bfbe79 100644
--- a/trunk/paradiseo-mo/src/moLinearCoolingSchedule.h
+++ b/trunk/paradiseo-mo/src/moLinearCoolingSchedule.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -45,36 +45,36 @@
the temperature is greater than a threshold.
*/
class moLinearCoolingSchedule: public moCoolingSchedule
-{
-
-public:
- //! Simple constructor
- /*!
- \param __threshold the threshold.
- \param __quantity the quantity used to descrease the temperature.
- */
- moLinearCoolingSchedule (double __threshold, double __quantity):threshold (__threshold), quantity (__quantity)
- {}
-
- //! Function which proceeds to the cooling.
- /*!
- It decreases the temperature and indicates if it is greater than the threshold.
-
- \param __temp the current temperature.
- \return if the new temperature (current temperature - quantity) is greater than the threshold.
- */
- bool operator() (double &__temp)
{
- return (__temp -= quantity) > threshold;
- }
-private:
+ public:
+ //! Simple constructor
+ /*!
+ \param __threshold the threshold.
+ \param __quantity the quantity used to descrease the temperature.
+ */
+ moLinearCoolingSchedule (double __threshold, double __quantity):threshold (__threshold), quantity (__quantity)
+ {}
- //! The temperature threhold.
- double threshold;
+ //! Function which proceeds to the cooling.
+ /*!
+ It decreases the temperature and indicates if it is greater than the threshold.
- //! The quantity that allows the temperature to decrease.
- double quantity;
-};
+ \param __temp the current temperature.
+ \return if the new temperature (current temperature - quantity) is greater than the threshold.
+ */
+ bool operator() (double &__temp)
+ {
+ return (__temp -= quantity) > threshold;
+ }
+
+ private:
+
+ //! The temperature threhold.
+ double threshold;
+
+ //! The quantity that allows the temperature to decrease.
+ double quantity;
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moMove.h b/trunk/paradiseo-mo/src/moMove.h
index 991114005..5cbc98cac 100755
--- a/trunk/paradiseo-mo/src/moMove.h
+++ b/trunk/paradiseo-mo/src/moMove.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -46,12 +46,12 @@
It describes how a solution can be modified to another one.
*/
template < class EOT > class moMove:public eoUF < EOT &, void >
-{
+ {
-public:
- //! Alias for the type
- typedef EOT EOType;
+ public:
+ //! Alias for the type
+ typedef EOT EOType;
-};
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moMoveExpl.h b/trunk/paradiseo-mo/src/moMoveExpl.h
index 462cae8bb..961663307 100755
--- a/trunk/paradiseo-mo/src/moMoveExpl.h
+++ b/trunk/paradiseo-mo/src/moMoveExpl.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -44,11 +44,9 @@
Only a description...See moMoveLoopExpl.
*/
template < class M > class moMoveExpl:public eoBF < const typename
- M::EOType &,
- typename
-M::EOType &, void >
-{
-
-};
+ M::EOType &,
+ typename
+ M::EOType &, void >
+ {};
#endif
diff --git a/trunk/paradiseo-mo/src/moMoveIncrEval.h b/trunk/paradiseo-mo/src/moMoveIncrEval.h
index f3b6385c5..cfc3da65c 100755
--- a/trunk/paradiseo-mo/src/moMoveIncrEval.h
+++ b/trunk/paradiseo-mo/src/moMoveIncrEval.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -47,11 +47,9 @@
the solution if this one is updated.
*/
template < class M > class moMoveIncrEval:public eoBF < const M &, const typename
- M::EOType &,
- typename
- M::EOType::Fitness >
-{
-
-};
+ M::EOType &,
+ typename
+ M::EOType::Fitness >
+ {};
#endif
diff --git a/trunk/paradiseo-mo/src/moMoveInit.h b/trunk/paradiseo-mo/src/moMoveInit.h
index 26d922a45..e5f1017c9 100755
--- a/trunk/paradiseo-mo/src/moMoveInit.h
+++ b/trunk/paradiseo-mo/src/moMoveInit.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -45,9 +45,7 @@
Only a description... An object that herits from this class needs to be designed to be used.
*/
template < class M > class moMoveInit:public eoBF < M &, const typename
-M::EOType &, void >
-{
-
-};
+ M::EOType &, void >
+ {};
#endif
diff --git a/trunk/paradiseo-mo/src/moMoveLoopExpl.h b/trunk/paradiseo-mo/src/moMoveLoopExpl.h
index 80947b896..cc60e92ff 100755
--- a/trunk/paradiseo-mo/src/moMoveLoopExpl.h
+++ b/trunk/paradiseo-mo/src/moMoveLoopExpl.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -44,8 +44,6 @@
Only a description... moHCMoveLoopExpl and moTSMoveLoopExpl are exemples of class that are a moMoveLoopExpl.
*/
template < class M > class moMoveLoopExpl:public moMoveExpl < M >
-{
-
-};
+ {};
#endif
diff --git a/trunk/paradiseo-mo/src/moMoveSelect.h b/trunk/paradiseo-mo/src/moMoveSelect.h
index 309ddc021..492654f9f 100755
--- a/trunk/paradiseo-mo/src/moMoveSelect.h
+++ b/trunk/paradiseo-mo/src/moMoveSelect.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -44,47 +44,45 @@
This class is used as an exception that can be thrown if a solution selector has completly failed.
*/
class EmptySelection
-{
-
-};
+ {};
//! Class that describes a move selector (moMove).
-/*!
+/*!
It iteratively considers some moves (moMove) and their
associated fitnesses. The best move is so regularly updated.
At any time, it could be accessed.
*/
template < class M > class moMoveSelect:public eoBF < M &, typename M::EOType::Fitness &,
- void >
-{
-public:
- //! Alias for the fitness
- typedef
+ void >
+ {
+ public:
+ //! Alias for the fitness
+ typedef
typename
M::EOType::Fitness
Fitness;
- //! Procedure which initialises all that the move selector needs including the initial fitness.
- /*!
- In order to know the fitness of the solution,
- for which the neighborhood will
- be soon explored
+ //! Procedure which initialises all that the move selector needs including the initial fitness.
+ /*!
+ In order to know the fitness of the solution,
+ for which the neighborhood will
+ be soon explored
- \param __fit the current fitness.
- */
- virtual void
- init (const Fitness & __fit) = 0;
+ \param __fit the current fitness.
+ */
+ virtual void
+ init (const Fitness & __fit) = 0;
- //! Function which updates the best solutions.
- /*!
- \param __move a new move.
- \param __fit a fitness linked to the new move.
- \return a boolean that expresses the need to resume the exploration.
- */
- virtual
+ //! Function which updates the best solutions.
+ /*!
+ \param __move a new move.
+ \param __fit a fitness linked to the new move.
+ \return a boolean that expresses the need to resume the exploration.
+ */
+ virtual
bool
- update (const M & __move, const Fitness & __fit) = 0;
+ update (const M & __move, const Fitness & __fit) = 0;
-};
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moNextMove.h b/trunk/paradiseo-mo/src/moNextMove.h
index 6a6a5659a..2812b376c 100755
--- a/trunk/paradiseo-mo/src/moNextMove.h
+++ b/trunk/paradiseo-mo/src/moNextMove.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -45,10 +45,8 @@
Does nothing... An object that herits from this class needs to be designed for being used.
*/
template < class M > class moNextMove:public eoBF < M &, const typename
- M::EOType &,
- bool >
-{
-
-};
+ M::EOType &,
+ bool >
+ {};
#endif
diff --git a/trunk/paradiseo-mo/src/moNoAspirCrit.h b/trunk/paradiseo-mo/src/moNoAspirCrit.h
index 4f4d1d4a3..64e0dc06d 100755
--- a/trunk/paradiseo-mo/src/moNoAspirCrit.h
+++ b/trunk/paradiseo-mo/src/moNoAspirCrit.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -44,30 +44,29 @@
The simplest : never satisfied.
*/
template < class M > class moNoAspirCrit:public moAspirCrit < M >
-{
-
- //! Function which describes the aspiration criterion behaviour
- /*!
- Does nothing.
-
- \param __move a move.
- \param __sol a fitness.
- \return FALSE.
- */
- bool operator () (const M & __move,
- const typename M::EOType::Fitness & __sol)
{
- return false;
- }
+ //! Function which describes the aspiration criterion behaviour
+ /*!
+ Does nothing.
- //! Procedure which initialises all that needs a moNoAspirCrit
- /*!
- Nothing...
- */
- void init ()
- {
- }
-};
+ \param __move a move.
+ \param __sol a fitness.
+ \return FALSE.
+ */
+ bool operator () (const M & __move,
+ const typename M::EOType::Fitness & __sol)
+ {
+
+ return false;
+ }
+
+ //! Procedure which initialises all that needs a moNoAspirCrit
+ /*!
+ Nothing...
+ */
+ void init ()
+ {}
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moNoFitImprSolContinue.h b/trunk/paradiseo-mo/src/moNoFitImprSolContinue.h
index 110458865..40b63bdde 100644
--- a/trunk/paradiseo-mo/src/moNoFitImprSolContinue.h
+++ b/trunk/paradiseo-mo/src/moNoFitImprSolContinue.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -44,80 +44,80 @@
The stop criterion corresponds to a maximum number of iterations without improvement.
*/
template < class EOT > class moNoFitImprSolContinue:public moSolContinue < EOT >
-{
-
-public:
-
- //! Alias for the fitness.
- typedef typename EOT::Fitness Fitness;
-
- //! Basic constructor.
- /*!
- \param __maxNumberOfIterationWithoutImprovement The number of iterations without fitness improvement to reach for stop.
- */
- moNoFitImprSolContinue (unsigned int __maxNumberOfIterationWithoutImprovement)
- : maxNumberOfIterationsWithoutImprovement(__maxNumberOfIterationWithoutImprovement), firstFitnessSaved(true), counter(0)
- {}
-
- //! Function that activates the stopping criterion.
- /*!
- Indicates if the fitness has not been improved since a given number of iterations (after a minimum of iterations).
- \param __sol the current solution.
- \return true or false.
- */
- bool operator () (const EOT & __sol)
{
- if(__sol.invalid())
- {
- return true;
- }
- if(firstFitnessSaved)
- {
- fitness=__sol.fitness();
- counter=0;
- firstFitnessSaved=false;
- return true;
- }
-
- counter++;
+ public:
- if( __sol.fitness() > fitness)
- {
- fitness=__sol.fitness();
- counter=0;
- }
-
- if(counter==maxNumberOfIterationsWithoutImprovement)
- {
- std::cout << "moNoFitImrpSolContinue: Done [" << counter << "] iterations without improvement." << std::endl;
- }
- return counter!=maxNumberOfIterationsWithoutImprovement;
- }
+ //! Alias for the fitness.
+ typedef typename EOT::Fitness Fitness;
- //! Procedure which allows to initialise all the stuff needed.
- /*!
- It can be also used to reinitialize all the needed things.
- */
- void init ()
- {
- firstFitnessSaved=true;
- counter=0;
- }
+ //! Basic constructor.
+ /*!
+ \param __maxNumberOfIterationWithoutImprovement The number of iterations without fitness improvement to reach for stop.
+ */
+ moNoFitImprSolContinue (unsigned int __maxNumberOfIterationWithoutImprovement)
+ : maxNumberOfIterationsWithoutImprovement(__maxNumberOfIterationWithoutImprovement), firstFitnessSaved(true), counter(0)
+ {}
-private:
+ //! Function that activates the stopping criterion.
+ /*!
+ Indicates if the fitness has not been improved since a given number of iterations (after a minimum of iterations).
+ \param __sol the current solution.
+ \return true or false.
+ */
+ bool operator () (const EOT & __sol)
+ {
+ if (__sol.invalid())
+ {
+ return true;
+ }
- //! Maximum number of iterations without improvement allowed.
- unsigned int maxNumberOfIterationsWithoutImprovement;
+ if (firstFitnessSaved)
+ {
+ fitness=__sol.fitness();
+ counter=0;
+ firstFitnessSaved=false;
+ return true;
+ }
- //! Flag that this is the first time that the fitness is used.
- bool firstFitnessSaved;
+ counter++;
- //! Current Fitness.
- Fitness fitness;
+ if ( __sol.fitness() > fitness)
+ {
+ fitness=__sol.fitness();
+ counter=0;
+ }
- //! The iteration couter.
- unsigned int counter;
-};
+ if (counter==maxNumberOfIterationsWithoutImprovement)
+ {
+ std::cout << "moNoFitImrpSolContinue: Done [" << counter << "] iterations without improvement." << std::endl;
+ }
+ return counter!=maxNumberOfIterationsWithoutImprovement;
+ }
+
+ //! Procedure which allows to initialise all the stuff needed.
+ /*!
+ It can be also used to reinitialize all the needed things.
+ */
+ void init ()
+ {
+ firstFitnessSaved=true;
+ counter=0;
+ }
+
+ private:
+
+ //! Maximum number of iterations without improvement allowed.
+ unsigned int maxNumberOfIterationsWithoutImprovement;
+
+ //! Flag that this is the first time that the fitness is used.
+ bool firstFitnessSaved;
+
+ //! Current Fitness.
+ Fitness fitness;
+
+ //! The iteration couter.
+ unsigned int counter;
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moRandImprSelect.h b/trunk/paradiseo-mo/src/moRandImprSelect.h
index db8b4b474..2391e946a 100755
--- a/trunk/paradiseo-mo/src/moRandImprSelect.h
+++ b/trunk/paradiseo-mo/src/moRandImprSelect.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -44,86 +44,86 @@
//! One of the possible moMove selector (moMoveSelect)
/*!
- All the neighbors are considered.
+ All the neighbors are considered.
One of them that enables an improvment of the objective function is choosen.
*/
template < class M > class moRandImprSelect:public moMoveSelect < M >
-{
-
-public:
-
- //! Alias for the fitness
- typedef typename M::EOType::Fitness Fitness;
-
- //!Procedure which all that needs a moRandImprSelect
- /*!
- Give a value to the initialise fitness.
- Clean the move and fitness vectors.
-
- \param __fit the current best fitness
- */
- void init (const Fitness & __fit)
- {
- init_fit = __fit;
- vect_better_fit.clear ();
- vect_better_moves.clear ();
- }
-
- //! Function that updates the fitness and move vectors
- /*!
- if a move give a better fitness than the initial fitness,
- it is saved and the fitness too.
-
- \param __move a new move.
- \param __fit a new fitness associated to the new move.
- \return TRUE.
- */
- bool update (const M & __move, const Fitness & __fit)
{
- if (__fit > init_fit)
- {
+ public:
- vect_better_fit.push_back (__fit);
- vect_better_moves.push_back (__move);
- }
+ //! Alias for the fitness
+ typedef typename M::EOType::Fitness Fitness;
- return true;
- }
+ //!Procedure which all that needs a moRandImprSelect
+ /*!
+ Give a value to the initialise fitness.
+ Clean the move and fitness vectors.
- //! The move selection
- /*!
- One the saved move is randomly chosen.
+ \param __fit the current best fitness
+ */
+ void init (const Fitness & __fit)
+ {
+ init_fit = __fit;
+ vect_better_fit.clear ();
+ vect_better_moves.clear ();
+ }
- \param __move the reference of the move that can be initialised by the function.
- \param __fit the reference of the fitness that can be initialised by the function.
- \throws EmptySelection If no move which improves the current fitness are found.
- */
- void operator () (M & __move, Fitness & __fit) throw (EmptySelection)
- {
+ //! Function that updates the fitness and move vectors
+ /*!
+ if a move give a better fitness than the initial fitness,
+ it is saved and the fitness too.
- if (!vect_better_fit.empty ())
- {
+ \param __move a new move.
+ \param __fit a new fitness associated to the new move.
+ \return TRUE.
+ */
+ bool update (const M & __move, const Fitness & __fit)
+ {
- unsigned n = rng.random (vect_better_fit.size ());
+ if (__fit > init_fit)
+ {
- __move = vect_better_moves[n];
- __fit = vect_better_fit[n];
- }
- else
- throw EmptySelection ();
- }
+ vect_better_fit.push_back (__fit);
+ vect_better_moves.push_back (__move);
+ }
-private:
+ return true;
+ }
- //! Fitness of the current solution.
- Fitness init_fit;
+ //! The move selection
+ /*!
+ One the saved move is randomly chosen.
- //! Candidate fitnesse vector.
- std::vector < Fitness > vect_better_fit;
+ \param __move the reference of the move that can be initialised by the function.
+ \param __fit the reference of the fitness that can be initialised by the function.
+ \throws EmptySelection If no move which improves the current fitness are found.
+ */
+ void operator () (M & __move, Fitness & __fit) throw (EmptySelection)
+ {
- //! Candidate move vector.
- std::vector < M > vect_better_moves;
-};
+ if (!vect_better_fit.empty ())
+ {
+
+ unsigned n = rng.random (vect_better_fit.size ());
+
+ __move = vect_better_moves[n];
+ __fit = vect_better_fit[n];
+ }
+ else
+ throw EmptySelection ();
+ }
+
+ private:
+
+ //! Fitness of the current solution.
+ Fitness init_fit;
+
+ //! Candidate fitnesse vector.
+ std::vector < Fitness > vect_better_fit;
+
+ //! Candidate move vector.
+ std::vector < M > vect_better_moves;
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moRandMove.h b/trunk/paradiseo-mo/src/moRandMove.h
index 2c11e9aea..b8bf33ac8 100755
--- a/trunk/paradiseo-mo/src/moRandMove.h
+++ b/trunk/paradiseo-mo/src/moRandMove.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -41,11 +41,9 @@
//! Random move generator
/*!
- Only a description... An object that herits from this class needs to be designed in order to use a moSA.
+ Only a description... An object that herits from this class needs to be designed in order to use a moSA.
*/
template < class M > class moRandMove:public eoUF < M &, void >
-{
-
-};
+ {};
#endif
diff --git a/trunk/paradiseo-mo/src/moSA.h b/trunk/paradiseo-mo/src/moSA.h
index 2b980c044..f49bf6041 100755
--- a/trunk/paradiseo-mo/src/moSA.h
+++ b/trunk/paradiseo-mo/src/moSA.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -53,122 +53,120 @@
Class that describes a Simulated Annealing algorithm.
*/
template < class M > class moSA:public moAlgo < typename M::EOType >
-{
+ {
- //! Alias for the type
- typedef
+ //! Alias for the type
+ typedef
typename
M::EOType
EOT;
- //! Alias for the fitness
- typedef
+ //! Alias for the fitness
+ typedef
typename
EOT::Fitness
Fitness;
-public:
+ public:
- //! SA constructor
- /*!
- All the boxes used by a SA need to be given.
+ //! SA constructor
+ /*!
+ All the boxes used by a SA need to be given.
- \param __move_rand a move generator (generally randomly).
- \param __incr_eval a (generaly) efficient evaluation function
- \param __cont a stopping criterion.
- \param __init_temp the initial temperature.
- \param __cool_sched a cooling schedule, describes how the temperature is modified.
- \param __full_eval a full evaluation function.
- */
- moSA (moRandMove < M > &__move_rand,
- moMoveIncrEval < M > &__incr_eval,
- moSolContinue < EOT > &__cont,
- double __init_temp,
- moCoolingSchedule & __cool_sched, eoEvalFunc < EOT > &__full_eval):
- move_rand (__move_rand),
- incr_eval (__incr_eval),
- cont (__cont),
- init_temp (__init_temp),
- cool_sched (__cool_sched),
- full_eval (__full_eval)
- {
+ \param __move_rand a move generator (generally randomly).
+ \param __incr_eval a (generaly) efficient evaluation function
+ \param __cont a stopping criterion.
+ \param __init_temp the initial temperature.
+ \param __cool_sched a cooling schedule, describes how the temperature is modified.
+ \param __full_eval a full evaluation function.
+ */
+ moSA (moRandMove < M > &__move_rand,
+ moMoveIncrEval < M > &__incr_eval,
+ moSolContinue < EOT > &__cont,
+ double __init_temp,
+ moCoolingSchedule & __cool_sched, eoEvalFunc < EOT > &__full_eval):
+ move_rand (__move_rand),
+ incr_eval (__incr_eval),
+ cont (__cont),
+ init_temp (__init_temp),
+ cool_sched (__cool_sched),
+ full_eval (__full_eval)
+ {}
- }
+ //! function that launches the SA algorithm.
+ /*!
+ As a moTS or a moHC, the SA can be used for HYBRIDATION in an evolutionary algorithm.
- //! function that launches the SA algorithm.
- /*!
- As a moTS or a moHC, the SA can be used for HYBRIDATION in an evolutionary algorithm.
+ \param __sol a solution to improve.
+ \return TRUE.
+ */
+ bool operator ()(EOT & __sol)
+ {
- \param __sol a solution to improve.
- \return TRUE.
- */
- bool operator ()(EOT & __sol)
- {
+ if (__sol.invalid ())
+ {
+ full_eval (__sol);
+ }
- if (__sol.invalid ())
- {
- full_eval (__sol);
- }
+ double temp = init_temp;
- double temp = init_temp;
+ M move;
- M move;
+ EOT best_sol = __sol;
- EOT best_sol = __sol;
+ do
+ {
- do
- {
+ cont.init ();
+ do
+ {
- cont.init ();
- do
- {
+ move_rand (move);
- move_rand (move);
+ Fitness delta_fit = incr_eval (move, __sol) - __sol.fitness ();
- Fitness delta_fit = incr_eval (move, __sol) - __sol.fitness ();
+ if (delta_fit > 0 || rng.uniform () < exp (delta_fit / temp))
+ {
- if (delta_fit > 0 || rng.uniform () < exp (delta_fit / temp))
- {
+ __sol.fitness (incr_eval (move, __sol));
+ move (__sol);
- __sol.fitness (incr_eval (move, __sol));
- move (__sol);
+ /* Updating the best solution found
+ until now ? */
+ if (__sol.fitness () > best_sol.fitness ())
+ best_sol = __sol;
+ }
- /* Updating the best solution found
- until now ? */
- if (__sol.fitness () > best_sol.fitness ())
- best_sol = __sol;
- }
+ }
+ while (cont (__sol));
- }
- while (cont (__sol));
+ }
+ while (cool_sched (temp));
- }
- while (cool_sched (temp));
+ __sol = best_sol;
- __sol = best_sol;
+ return true;
+ }
- return true;
- }
+ private:
-private:
+ //! A move generator (generally randomly)
+ moRandMove < M > &move_rand;
- //! A move generator (generally randomly)
- moRandMove < M > &move_rand;
+ //! A (generally) efficient evaluation function.
+ moMoveIncrEval < M > &incr_eval;
- //! A (generally) efficient evaluation function.
- moMoveIncrEval < M > &incr_eval;
+ //! Stopping criterion before temperature update
+ moSolContinue < EOT > &cont;
- //! Stopping criterion before temperature update
- moSolContinue < EOT > &cont;
+ //! Initial temperature
+ double init_temp;
- //! Initial temperature
- double init_temp;
+ //! The cooling schedule
+ moCoolingSchedule & cool_sched;
- //! The cooling schedule
- moCoolingSchedule & cool_sched;
-
- //! A full evaluation function.
- eoEvalFunc < EOT > &full_eval; // Full evaluator.
-};
+ //! A full evaluation function.
+ eoEvalFunc < EOT > &full_eval; // Full evaluator.
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moSimpleMoveTabuList.h b/trunk/paradiseo-mo/src/moSimpleMoveTabuList.h
index 1f29c88fc..54d1db772 100755
--- a/trunk/paradiseo-mo/src/moSimpleMoveTabuList.h
+++ b/trunk/paradiseo-mo/src/moSimpleMoveTabuList.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -45,107 +45,107 @@
//! Class describing a move tabu list with a limited memory.
template
class moSimpleMoveTabuList: public moTabuList < M >
-{
-
-public:
-
- //! Alias for the type
- typedef typename M::EOType EOT;
+ {
- //! Constructor
- /*
- \param __size The maximum size of the move tabu list.
- */
- moSimpleMoveTabuList(unsigned int __size): maxSize(__size)
- {
- currentSize=0;
- }
+ public:
- //! Function that indicates if, in a given state, the _move is tabu or not.
- /*!
- \param __move A given moMove.
- \param __sol A solution.
- \return true or false.
- */
- bool
- operator () (const M & __move, const EOT & __sol)
- {
- typename std::list::iterator it;
-
- it=tabuList.begin();
- while(it!=tabuList.end()&&(!((*it)==__move)))
+ //! Alias for the type
+ typedef typename M::EOType EOT;
+
+ //! Constructor
+ /*
+ \param __size The maximum size of the move tabu list.
+ */
+ moSimpleMoveTabuList(unsigned int __size): maxSize(__size)
+ {
+ currentSize=0;
+ }
+
+ //! Function that indicates if, in a given state, the _move is tabu or not.
+ /*!
+ \param __move A given moMove.
+ \param __sol A solution.
+ \return true or false.
+ */
+ bool
+ operator () (const M & __move, const EOT & __sol)
+ {
+ typename std::list::iterator it;
+
+ it=tabuList.begin();
+ while (it!=tabuList.end()&&(!((*it)==__move)))
+ {
+ it++;
+ }
+
+ return it!=tabuList.end();
+ }
+
+ void
+ add (const M & __move, const EOT & __sol)
{
- it++;
- }
-
- return it!=tabuList.end();
- }
-
- void
- add (const M & __move, const EOT & __sol)
- {
- if(currentSize!=0)
- {
- // Useful in the case of a move has been kept thanks to the moAspirCrit.
- // In this case, the move can already be in the tabuList.
- removeMove(__move);
+ if (currentSize!=0)
+ {
+ // Useful in the case of a move has been kept thanks to the moAspirCrit.
+ // In this case, the move can already be in the tabuList.
+ removeMove(__move);
+ }
+
+ tabuList.push_back(__move);
+
+ if (currentSize==maxSize)
+ {
+ tabuList.erase(tabuList.begin());
+ }
+ else
+ {
+ currentSize++;
+ }
}
- tabuList.push_back(__move);
-
- if(currentSize==maxSize)
- {
- tabuList.erase(tabuList.begin());
- }
- else
- {
- currentSize++;
- }
- }
-
- void
- update ()
- {
- //nothing to do
- }
+ void
+ update ()
+ {
+ //nothing to do
+ }
- void
- init ()
- {
- //nothing to do
- }
+ void
+ init ()
+ {
+ //nothing to do
+ }
-private:
-
- //! Procedure that removes a given move from the tabu list (if it is into, else do nothing).
- /*!
- \param __move A given moMove.
- */
- void
- removeMove(const M & __move)
- {
- typename std::list::iterator it;
-
- it=tabuList.begin();
- while(it!=tabuList.end()&&(!((*it)==__move)))
- {
- it++;
- }
+ private:
- if(it!=tabuList.end())
- {
- tabuList.erase(it);
- }
- }
+ //! Procedure that removes a given move from the tabu list (if it is into, else do nothing).
+ /*!
+ \param __move A given moMove.
+ */
+ void
+ removeMove(const M & __move)
+ {
+ typename std::list::iterator it;
- //! The maximum size of the tabu list.
- unsigned int maxSize;
+ it=tabuList.begin();
+ while (it!=tabuList.end()&&(!((*it)==__move)))
+ {
+ it++;
+ }
- //! The current size of the tabu list.
- unsigned int currentSize;
-
- //! The move tabu list.
- std::list tabuList;
-};
+ if (it!=tabuList.end())
+ {
+ tabuList.erase(it);
+ }
+ }
+
+ //! The maximum size of the tabu list.
+ unsigned int maxSize;
+
+ //! The current size of the tabu list.
+ unsigned int currentSize;
+
+ //! The move tabu list.
+ std::list tabuList;
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moSimpleSolutionTabuList.h b/trunk/paradiseo-mo/src/moSimpleSolutionTabuList.h
index 8dac7d880..0e951f3f9 100755
--- a/trunk/paradiseo-mo/src/moSimpleSolutionTabuList.h
+++ b/trunk/paradiseo-mo/src/moSimpleSolutionTabuList.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -45,116 +45,116 @@
//! Class describing a solution tabu list with limited length.
template
class moSimpleSolutionTabuList: public moTabuList < M >
-{
-
-public:
-
- //! Alias for the type
- typedef typename M::EOType EOT;
-
- //! Constructor
- /*!
- \param __size The maximum size of the solution tabu list.
- */
- moSimpleSolutionTabuList(unsigned int __size): maxSize(__size)
{
- currentSize=0;
- }
-
- //! Function that indicates if, in a given state, the _move is tabu or not.
- /*!
- \param __move A given moMove.
- \param __sol A solution.
- \return true or false.
- */
- bool operator () (const M & __move, const EOT & __sol)
- {
- typename std::list::iterator it;
-
- M _move=(M)__move;
- EOT _sol=(EOT) __sol;
- _move(_sol);
-
- it=tabuList.begin();
- while(it!=tabuList.end()&&(!((*it)==_sol)))
+ public:
+
+ //! Alias for the type
+ typedef typename M::EOType EOT;
+
+ //! Constructor
+ /*!
+ \param __size The maximum size of the solution tabu list.
+ */
+ moSimpleSolutionTabuList(unsigned int __size): maxSize(__size)
+ {
+ currentSize=0;
+ }
+
+ //! Function that indicates if, in a given state, the _move is tabu or not.
+ /*!
+ \param __move A given moMove.
+ \param __sol A solution.
+ \return true or false.
+ */
+ bool operator () (const M & __move, const EOT & __sol)
+ {
+ typename std::list::iterator it;
+
+ M _move=(M)__move;
+ EOT _sol=(EOT) __sol;
+
+ _move(_sol);
+
+ it=tabuList.begin();
+ while (it!=tabuList.end()&&(!((*it)==_sol)))
+ {
+ it++;
+ }
+
+ return it!=tabuList.end();
+ }
+
+ void
+ add (const M & __move, const EOT & __sol)
{
- it++;
- }
-
- return it!=tabuList.end();
- }
-
- void
- add (const M & __move, const EOT & __sol)
- {
- M _move=(M)__move;
- EOT _sol=(EOT) _sol;
-
- _move(_sol);
+ M _move=(M)__move;
+ EOT _sol=(EOT) _sol;
- if(currentSize!=0)
- {
- // Useful in the case of a solution has been kept thanks to the moAspirCrit.
- // In this case, the solution can already be in the tabuList.
- removeSolution(_sol);
- }
-
- tabuList.push_back(_sol);
-
- if(currentSize==maxSize)
- {
- tabuList.erase(tabuList.begin());
- }
- else
- {
- currentSize++;
- }
- }
+ _move(_sol);
- void
- update ()
- {
- //nothing to do
- }
+ if (currentSize!=0)
+ {
+ // Useful in the case of a solution has been kept thanks to the moAspirCrit.
+ // In this case, the solution can already be in the tabuList.
+ removeSolution(_sol);
+ }
- void
- init ()
- {
- //nothing to do
- }
+ tabuList.push_back(_sol);
-private:
-
- //! Procedure that removes a given solution from the tabu list (if it is into, else does nothing).
- /*!
- \param __sol A given solution.
- */
- void
- removeSolution(const EOT & __sol)
- {
- typename std::list::iterator it;
-
- it=tabuList.begin();
- while(it!=tabuList.end()&&(!((*it)==__sol)))
- {
- it++;
+ if (currentSize==maxSize)
+ {
+ tabuList.erase(tabuList.begin());
+ }
+ else
+ {
+ currentSize++;
+ }
}
- if(it!=tabuList.end())
- {
- tabuList.erase(it);
- }
- }
-
- //! The maximum size of the tabu list.
- unsigned int maxSize;
+ void
+ update ()
+ {
+ //nothing to do
+ }
- //! The current size of the tabu list.
- unsigned int currentSize;
-
- //! The solution tabu list.
- std::list tabuList;
-};
+ void
+ init ()
+ {
+ //nothing to do
+ }
+
+ private:
+
+ //! Procedure that removes a given solution from the tabu list (if it is into, else does nothing).
+ /*!
+ \param __sol A given solution.
+ */
+ void
+ removeSolution(const EOT & __sol)
+ {
+ typename std::list::iterator it;
+
+ it=tabuList.begin();
+ while (it!=tabuList.end()&&(!((*it)==__sol)))
+ {
+ it++;
+ }
+
+ if (it!=tabuList.end())
+ {
+ tabuList.erase(it);
+ }
+ }
+
+ //! The maximum size of the tabu list.
+ unsigned int maxSize;
+
+ //! The current size of the tabu list.
+ unsigned int currentSize;
+
+ //! The solution tabu list.
+ std::list tabuList;
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moSolContinue.h b/trunk/paradiseo-mo/src/moSolContinue.h
index c63006d61..3655a70e0 100755
--- a/trunk/paradiseo-mo/src/moSolContinue.h
+++ b/trunk/paradiseo-mo/src/moSolContinue.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -41,18 +41,18 @@
//! Class that describes a stop criterion for a solution-based heuristic
-/*!
+/*!
It allows to add an initialisation procedure to an object that is a unary function (eoUF).
*/
template < class EOT > class moSolContinue:public eoUF < const EOT &, bool >
-{
+ {
-public:
- //! Procedure which initialises all that the stop criterion needs
- /*!
- Generally, it allocates some data structures or initialises some counters.
- */
- virtual void init () = 0;
-};
+ public:
+ //! Procedure which initialises all that the stop criterion needs
+ /*!
+ Generally, it allocates some data structures or initialises some counters.
+ */
+ virtual void init () = 0;
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moSteadyFitSolContinue.h b/trunk/paradiseo-mo/src/moSteadyFitSolContinue.h
index 6808ee54a..0b29826bc 100644
--- a/trunk/paradiseo-mo/src/moSteadyFitSolContinue.h
+++ b/trunk/paradiseo-mo/src/moSteadyFitSolContinue.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -44,100 +44,100 @@
The stop criterion corresponds to a maximum number of iterations without improvement (after a minimum number of iterations).
*/
template < class EOT > class moSteadyFitSolContinue:public moSolContinue < EOT >
-{
-
-public:
-
- //! Alias for the fitness.
- typedef typename EOT::Fitness Fitness;
-
- //! Basic constructor.
- /*!
- \param __maxNumberOfIterations The number of iterations to reach before looking for the fitness.
- \param __maxNumberOfIterationWithoutImprovement The number of iterations without fitness improvement to reach for stop.
- */
- moSteadyFitSolContinue (unsigned int __maxNumberOfIterations, unsigned int __maxNumberOfIterationWithoutImprovement)
- : maxNumberOfIterations (__maxNumberOfIterations), maxNumberOfIterationsWithoutImprovement(__maxNumberOfIterationWithoutImprovement),
- maxNumberOfIterationsReached(false), firstFitnessSaved(true), counter(0)
- {}
-
- //! Function that activates the stopping criterion.
- /*!
- Indicates if the fitness has not been improved since a number of iterations (after a minimum of iterations).
-
- \param __sol the current solution.
- \return true or false.
- */
- bool operator () (const EOT & __sol)
{
- if(!maxNumberOfIterationsReached)
- {
- maxNumberOfIterationsReached=((++counter)==maxNumberOfIterations);
- if(maxNumberOfIterationsReached)
- {
- std::cout << "moSteadyFitSolContinue: Done the minimum number of iterations [" << counter << "]." << std::endl;
- }
- return true;
- }
- if(__sol.invalid())
- {
- return true;
- }
+ public:
- if(firstFitnessSaved)
- {
- fitness=__sol.fitness();
- counter=0;
- firstFitnessSaved=false;
- return true;
- }
-
- counter++;
+ //! Alias for the fitness.
+ typedef typename EOT::Fitness Fitness;
- if( __sol.fitness() > fitness )
- {
- fitness=__sol.fitness();
- counter=0;
- }
-
- if(counter==maxNumberOfIterationsWithoutImprovement)
- {
- std::cout << "moSteadyFitSolContinue: Done [" << counter << "] iterations without improvement." << std::endl;
- }
- return counter!=maxNumberOfIterationsWithoutImprovement;
- }
+ //! Basic constructor.
+ /*!
+ \param __maxNumberOfIterations The number of iterations to reach before looking for the fitness.
+ \param __maxNumberOfIterationWithoutImprovement The number of iterations without fitness improvement to reach for stop.
+ */
+ moSteadyFitSolContinue (unsigned int __maxNumberOfIterations, unsigned int __maxNumberOfIterationWithoutImprovement)
+ : maxNumberOfIterations (__maxNumberOfIterations), maxNumberOfIterationsWithoutImprovement(__maxNumberOfIterationWithoutImprovement),
+ maxNumberOfIterationsReached(false), firstFitnessSaved(true), counter(0)
+ {}
- //! Procedure which allows to initialise the stuff needed.
- /*!
- It can be also used to reinitialize the counter all the needed things.
- */
- void init ()
- {
- maxNumberOfIterationsReached=false;
- counter=0;
- firstFitnessSaved=true;
- }
+ //! Function that activates the stopping criterion.
+ /*!
+ Indicates if the fitness has not been improved since a number of iterations (after a minimum of iterations).
-private:
+ \param __sol the current solution.
+ \return true or false.
+ */
+ bool operator () (const EOT & __sol)
+ {
+ if (!maxNumberOfIterationsReached)
+ {
+ maxNumberOfIterationsReached=((++counter)==maxNumberOfIterations);
+ if (maxNumberOfIterationsReached)
+ {
+ std::cout << "moSteadyFitSolContinue: Done the minimum number of iterations [" << counter << "]." << std::endl;
+ }
+ return true;
+ }
- //! Maximum number of iterations before considering the fitness.
- unsigned int maxNumberOfIterations;
+ if (__sol.invalid())
+ {
+ return true;
+ }
- //! Maximum number of iterations without improvement allowed.
- unsigned int maxNumberOfIterationsWithoutImprovement;
+ if (firstFitnessSaved)
+ {
+ fitness=__sol.fitness();
+ counter=0;
+ firstFitnessSaved=false;
+ return true;
+ }
- //! Flag that indicates that the maxNumberIteration have been reached.
- bool maxNumberOfIterationsReached;
+ counter++;
- //! Flag that this is the first time that the fitness is used.
- bool firstFitnessSaved;
+ if ( __sol.fitness() > fitness )
+ {
+ fitness=__sol.fitness();
+ counter=0;
+ }
- //! Current Fitness.
- Fitness fitness;
+ if (counter==maxNumberOfIterationsWithoutImprovement)
+ {
+ std::cout << "moSteadyFitSolContinue: Done [" << counter << "] iterations without improvement." << std::endl;
+ }
+ return counter!=maxNumberOfIterationsWithoutImprovement;
+ }
- //! The iteration couter.
- unsigned int counter;
-};
+ //! Procedure which allows to initialise the stuff needed.
+ /*!
+ It can be also used to reinitialize the counter all the needed things.
+ */
+ void init ()
+ {
+ maxNumberOfIterationsReached=false;
+ counter=0;
+ firstFitnessSaved=true;
+ }
+
+ private:
+
+ //! Maximum number of iterations before considering the fitness.
+ unsigned int maxNumberOfIterations;
+
+ //! Maximum number of iterations without improvement allowed.
+ unsigned int maxNumberOfIterationsWithoutImprovement;
+
+ //! Flag that indicates that the maxNumberIteration have been reached.
+ bool maxNumberOfIterationsReached;
+
+ //! Flag that this is the first time that the fitness is used.
+ bool firstFitnessSaved;
+
+ //! Current Fitness.
+ Fitness fitness;
+
+ //! The iteration couter.
+ unsigned int counter;
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moTS.h b/trunk/paradiseo-mo/src/moTS.h
index e83795d1b..ffb99e103 100755
--- a/trunk/paradiseo-mo/src/moTS.h
+++ b/trunk/paradiseo-mo/src/moTS.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -52,118 +52,118 @@
Generic algorithm that describes a tabu search.
*/
template < class M > class moTS:public moAlgo < typename M::EOType >
-{
+ {
- //!Alias for the type
- typedef
+ //!Alias for the type
+ typedef
typename
M::EOType
EOT;
- //!Alias for the fitness
- typedef
+ //!Alias for the fitness
+ typedef
typename
EOT::Fitness
Fitness;
-public:
+ public:
- //!Constructor of a moTS specifying all the boxes
- /*!
- In this constructor, a moTSMoveLoopExpl is instanciated.
+ //!Constructor of a moTS specifying all the boxes
+ /*!
+ In this constructor, a moTSMoveLoopExpl is instanciated.
- \param __move_init move initialisation
- \param __next_move neighborhood explorer
- \param __incr_eval efficient evaluation
- \param __tabu_list tabu list
- \param __aspir_crit aspiration criterion
- \param __cont stop criterion
- \param __full_eval full evaluation function
- */
-moTS (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval, moTabuList < M > &__tabu_list, moAspirCrit < M > &__aspir_crit, moSolContinue < EOT > &__cont, eoEvalFunc < EOT > &__full_eval):move_expl (*new moTSMoveLoopExpl < M >
- (__move_init, __next_move, __incr_eval, __tabu_list,
- __aspir_crit)), cont (__cont), full_eval (__full_eval)
- {}
-
- //! Constructor with less parameters
- /*!
- The explorer is given in the parameters.
-
- \param __move_expl the explorer (generally different that a moTSMoveLoopExpl)
- \param __cont stop criterion
- \param __full_eval full evaluation function
- */
-moTS (moMoveExpl < M > &__move_expl, moSolContinue < EOT > &__cont, eoEvalFunc < EOT > &__full_eval):move_expl (__move_expl),
- cont (__cont),
- full_eval (__full_eval)
+ \param __move_init move initialisation
+ \param __next_move neighborhood explorer
+ \param __incr_eval efficient evaluation
+ \param __tabu_list tabu list
+ \param __aspir_crit aspiration criterion
+ \param __cont stop criterion
+ \param __full_eval full evaluation function
+ */
+ moTS (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval, moTabuList < M > &__tabu_list, moAspirCrit < M > &__aspir_crit, moSolContinue < EOT > &__cont, eoEvalFunc < EOT > &__full_eval):move_expl (*new moTSMoveLoopExpl < M >
+ (__move_init, __next_move, __incr_eval, __tabu_list,
+ __aspir_crit)), cont (__cont), full_eval (__full_eval)
{}
- //! Function which launchs the Tabu Search
- /*!
- Algorithm of the tabu search.
- As a moSA or a moHC, it can be used for HYBRIDATION in an evolutionary algorithm.
- For security a lock (pthread_mutex_t) is closed during the algorithm.
+ //! Constructor with less parameters
+ /*!
+ The explorer is given in the parameters.
- \param __sol a solution to improve.
- \return TRUE.
- */
- bool operator ()(EOT & __sol)
- {
- if (__sol.invalid ())
- {
- full_eval (__sol);
- }
+ \param __move_expl the explorer (generally different that a moTSMoveLoopExpl)
+ \param __cont stop criterion
+ \param __full_eval full evaluation function
+ */
+ moTS (moMoveExpl < M > &__move_expl, moSolContinue < EOT > &__cont, eoEvalFunc < EOT > &__full_eval):move_expl (__move_expl),
+ cont (__cont),
+ full_eval (__full_eval)
+ {}
- M move;
+ //! Function which launchs the Tabu Search
+ /*!
+ Algorithm of the tabu search.
+ As a moSA or a moHC, it can be used for HYBRIDATION in an evolutionary algorithm.
+ For security a lock (pthread_mutex_t) is closed during the algorithm.
- EOT best_sol = __sol, new_sol;
+ \param __sol a solution to improve.
+ \return TRUE.
+ */
+ bool operator ()(EOT & __sol)
+ {
+ if (__sol.invalid ())
+ {
+ full_eval (__sol);
+ }
- cont.init ();
+ M move;
- do
- {
+ EOT best_sol = __sol, new_sol;
- new_sol = __sol;
+ cont.init ();
- try
- {
+ do
+ {
- move_expl (__sol, new_sol);
+ new_sol = __sol;
- }
- catch (EmptySelection & __ex)
- {
+ try
+ {
- break;
- }
+ move_expl (__sol, new_sol);
- /* Updating the best solution
- found until now ? */
- if (new_sol.fitness () > __sol.fitness ())
- {
- best_sol = new_sol;
- }
+ }
+ catch (EmptySelection & __ex)
+ {
- __sol = new_sol;
+ break;
+ }
- }
- while (cont (__sol));
+ /* Updating the best solution
+ found until now ? */
+ if (new_sol.fitness () > __sol.fitness ())
+ {
+ best_sol = new_sol;
+ }
- __sol = best_sol;
-
- return true;
- }
+ __sol = new_sol;
-private:
+ }
+ while (cont (__sol));
- //! Neighborhood explorer
- moMoveExpl < M > &move_expl;
+ __sol = best_sol;
- //! Stop criterion
- moSolContinue < EOT > &cont;
+ return true;
+ }
- //! Full evaluation function
- eoEvalFunc < EOT > &full_eval;
-};
+ private:
+
+ //! Neighborhood explorer
+ moMoveExpl < M > &move_expl;
+
+ //! Stop criterion
+ moSolContinue < EOT > &cont;
+
+ //! Full evaluation function
+ eoEvalFunc < EOT > &full_eval;
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moTSMoveLoopExpl.h b/trunk/paradiseo-mo/src/moTSMoveLoopExpl.h
index c9ae4b986..9b05d02d9 100755
--- a/trunk/paradiseo-mo/src/moTSMoveLoopExpl.h
+++ b/trunk/paradiseo-mo/src/moTSMoveLoopExpl.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -53,105 +53,105 @@
It is used by a moTS.
*/
template < class M > class moTSMoveLoopExpl:public moMoveLoopExpl < M >
-{
-
- //!Alias for the type
- typedef typename M::EOType EOT;
-
- //!Alias for the fitness
- typedef typename M::EOType::Fitness Fitness;
-
-public:
-
- //!Constructor
- /*!
- \param __move_init move initialisation
- \param __next_move neighborhood explorer
- \param __incr_eval efficient evaluation
- \param __tabu_list tabu list
- \param __aspir_crit aspiration criterion
- */
-moTSMoveLoopExpl (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval, moTabuList < M > &__tabu_list, moAspirCrit < M > &__aspir_crit):
- move_init (__move_init),
- next_move (__next_move),
- incr_eval (__incr_eval),
- tabu_list (__tabu_list), aspir_crit (__aspir_crit)
{
- tabu_list.init ();
- aspir_crit.init ();
- }
+ //!Alias for the type
+ typedef typename M::EOType EOT;
- //!Procedure which lauches the exploration
- /*!
- The exploration continues while the chosen move is not in the tabu list
- or the aspiration criterion is true. If these 2 conditions are not true, the
- exploration stops if the move selector update function returns false.
+ //!Alias for the fitness
+ typedef typename M::EOType::Fitness Fitness;
- \param __old_sol the initial solution
- \param __new_sol the new solution
- */
- void operator () (const EOT & __old_sol, EOT & __new_sol)
- {
+ public:
- M move;
+ //!Constructor
+ /*!
+ \param __move_init move initialisation
+ \param __next_move neighborhood explorer
+ \param __incr_eval efficient evaluation
+ \param __tabu_list tabu list
+ \param __aspir_crit aspiration criterion
+ */
+ moTSMoveLoopExpl (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval, moTabuList < M > &__tabu_list, moAspirCrit < M > &__aspir_crit):
+ move_init (__move_init),
+ next_move (__next_move),
+ incr_eval (__incr_eval),
+ tabu_list (__tabu_list), aspir_crit (__aspir_crit)
+ {
+
+ tabu_list.init ();
+ aspir_crit.init ();
+ }
+
+ //!Procedure which lauches the exploration
+ /*!
+ The exploration continues while the chosen move is not in the tabu list
+ or the aspiration criterion is true. If these 2 conditions are not true, the
+ exploration stops if the move selector update function returns false.
+
+ \param __old_sol the initial solution
+ \param __new_sol the new solution
+ */
+ void operator () (const EOT & __old_sol, EOT & __new_sol)
+ {
+
+ M move;
- move_init (move, __old_sol); /* Restarting the exploration of
- of the neighborhood ! */
+ move_init (move, __old_sol); /* Restarting the exploration of
+ of the neighborhood ! */
- move_select.init (__old_sol.fitness ());
+ move_select.init (__old_sol.fitness ());
- do
- {
+ do
+ {
- Fitness fit = incr_eval (move, __old_sol);
+ Fitness fit = incr_eval (move, __old_sol);
- if (!tabu_list (move, __old_sol) || aspir_crit (move, fit))
- {
- if (!move_select.update (move, fit))
- break;
- }
+ if (!tabu_list (move, __old_sol) || aspir_crit (move, fit))
+ {
+ if (!move_select.update (move, fit))
+ break;
+ }
- }
- while (next_move (move, __old_sol));
+ }
+ while (next_move (move, __old_sol));
- M best_move;
+ M best_move;
- Fitness best_move_fit;
+ Fitness best_move_fit;
- move_select (best_move, best_move_fit);
+ move_select (best_move, best_move_fit);
- __new_sol.fitness (best_move_fit);
- best_move (__new_sol);
+ __new_sol.fitness (best_move_fit);
+ best_move (__new_sol);
- /* Removing moves that are
- no more tabu */
- tabu_list.update ();
+ /* Removing moves that are
+ no more tabu */
+ tabu_list.update ();
- // Updating the tabu list
- tabu_list.add (best_move, __new_sol);
- }
+ // Updating the tabu list
+ tabu_list.add (best_move, __new_sol);
+ }
-private:
+ private:
- //!Move initialisation
- moMoveInit < M > &move_init;
+ //!Move initialisation
+ moMoveInit < M > &move_init;
- //!Neighborhood explorer
- moNextMove < M > &next_move;
+ //!Neighborhood explorer
+ moNextMove < M > &next_move;
- //!Efficient evaluation
- moMoveIncrEval < M > &incr_eval;
+ //!Efficient evaluation
+ moMoveIncrEval < M > &incr_eval;
- //!Move selector
- moBestImprSelect < M > move_select;
+ //!Move selector
+ moBestImprSelect < M > move_select;
- //!Tabu list
- moTabuList < M > &tabu_list;
+ //!Tabu list
+ moTabuList < M > &tabu_list;
- //!Aspiration criterion
- moAspirCrit < M > &aspir_crit;
-};
+ //!Aspiration criterion
+ moAspirCrit < M > &aspir_crit;
+ };
#endif
diff --git a/trunk/paradiseo-mo/src/moTabuList.h b/trunk/paradiseo-mo/src/moTabuList.h
index 9b7cb3c16..8237630be 100755
--- a/trunk/paradiseo-mo/src/moTabuList.h
+++ b/trunk/paradiseo-mo/src/moTabuList.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -45,37 +45,37 @@
to be used in a moTS.
*/
template < class M > class moTabuList:public eoBF < const M &, const typename
- M::EOType &,
- bool >
-{
+ M::EOType &,
+ bool >
+ {
-public:
- //! Alias for the type
- typedef typename M::EOType EOT;
+ public:
+ //! Alias for the type
+ typedef typename M::EOType EOT;
- //! Procedure to add a move in the tabu list
- /*!
- The two parameters have not to be modified so they are constant parameters.
+ //! Procedure to add a move in the tabu list
+ /*!
+ The two parameters have not to be modified so they are constant parameters.
- \param __move a new tabu move.
- \param __sol the origianl solution associated to this move.
- */
- virtual void
- add (const M & __move, const EOT & __sol) = 0;
+ \param __move a new tabu move.
+ \param __sol the origianl solution associated to this move.
+ */
+ virtual void
+ add (const M & __move, const EOT & __sol) = 0;
- //! Procedure that updates the tabu list content.
- /*!
- Generally, a counter associated to each saved move is decreased by one.
- */
- virtual void
- update () = 0;
+ //! Procedure that updates the tabu list content.
+ /*!
+ Generally, a counter associated to each saved move is decreased by one.
+ */
+ virtual void
+ update () = 0;
- //! Procedure which initialises the tabu list.
- /*!
- Can be useful if the data structure needs to be allocated before being used.
- */
- virtual void
- init () = 0;
-};
+ //! Procedure which initialises the tabu list.
+ /*!
+ Can be useful if the data structure needs to be allocated before being used.
+ */
+ virtual void
+ init () = 0;
+ };
#endif
diff --git a/trunk/paradiseo-mo/test/t-mo.cpp b/trunk/paradiseo-mo/test/t-mo.cpp
index e2cd38ded..64d0211c5 100644
--- a/trunk/paradiseo-mo/test/t-mo.cpp
+++ b/trunk/paradiseo-mo/test/t-mo.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -51,7 +51,7 @@ int main()
Chrom chrom1, chrom2;
std::cout << "chrom1 = " << chrom1 << std::endl
- << "chrom2 = " << chrom2 << std::endl;
+ << "chrom2 = " << chrom2 << std::endl;
return 0;
}
diff --git a/trunk/paradiseo-mo/tutorial/Lesson1/hill_climbing.cpp b/trunk/paradiseo-mo/tutorial/Lesson1/hill_climbing.cpp
index 893da241f..bee5249f3 100644
--- a/trunk/paradiseo-mo/tutorial/Lesson1/hill_climbing.cpp
+++ b/trunk/paradiseo-mo/tutorial/Lesson1/hill_climbing.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -38,37 +38,38 @@
#include
int
-main (int __argc, char * __argv [])
+main (int __argc, char * __argv [])
{
- if (__argc != 2) {
-
- std :: cerr << "Usage : ./hill_climbing [instance]" << std :: endl ;
- return 1 ;
- }
+ if (__argc != 2)
+ {
+
+ std :: cerr << "Usage : ./hill_climbing [instance]" << std :: endl ;
+ return 1 ;
+ }
srand (1000) ;
Graph :: load (__argv [1]) ; // Instance
Route route ; // Solution
-
+
RouteInit init ; // Sol. Random Init.
init (route) ;
RouteEval full_eval ; // Full. Eval.
full_eval (route) ;
-
+
std :: cout << "[From] " << route << std :: endl ;
/* Tools for an efficient (? :-))
local search ! */
-
+
TwoOptInit two_opt_init ; // Init.
-
+
TwoOptNext two_opt_next ; // Explorer.
-
+
TwoOptIncrEval two_opt_incr_eval ; // Eff. eval.
-
+
//moFirstImprSelect two_opt_select ;
moBestImprSelect two_opt_select ;
//moRandImprSelect two_opt_select ;
diff --git a/trunk/paradiseo-mo/tutorial/Lesson2/tabu_search.cpp b/trunk/paradiseo-mo/tutorial/Lesson2/tabu_search.cpp
index 0c9a7185d..613868301 100644
--- a/trunk/paradiseo-mo/tutorial/Lesson2/tabu_search.cpp
+++ b/trunk/paradiseo-mo/tutorial/Lesson2/tabu_search.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -38,33 +38,33 @@
#include
int
-main (int __argc, char * __argv [])
+main (int __argc, char * __argv [])
{
- if (__argc != 2)
+ if (__argc != 2)
{
std :: cerr << "Usage : ./tabu_search [instance]" << std :: endl ;
return 1 ;
}
-
+
Graph :: load (__argv [1]) ; // Instance
-
+
Route route ; // Solution
-
+
RouteInit init ; // Sol. Random Init.
init (route) ;
-
+
RouteEval full_eval ; // Full. Eval.
full_eval (route) ;
-
+
std :: cout << "[From] " << route << std :: endl ;
/* Tools for an efficient (? :-))
local search ! */
-
+
TwoOptInit two_opt_init ; // Init.
-
+
TwoOptNext two_opt_next ; // Explorer.
-
+
TwoOptIncrEval two_opt_incr_eval ; // Eff. eval.
TwoOptTabuList tabu_list ; // Tabu List
@@ -77,9 +77,9 @@ main (int __argc, char * __argv [])
moTS tabu_search (two_opt_init, two_opt_next, two_opt_incr_eval, tabu_list, aspir_crit, cont, full_eval) ;
tabu_search (route) ;
-
+
std :: cout << "[To] " << route << std :: endl ;
-
+
return 0 ;
}
diff --git a/trunk/paradiseo-mo/tutorial/Lesson3/simulated_annealing.cpp b/trunk/paradiseo-mo/tutorial/Lesson3/simulated_annealing.cpp
index 40f7e02d9..cad9b331d 100644
--- a/trunk/paradiseo-mo/tutorial/Lesson3/simulated_annealing.cpp
+++ b/trunk/paradiseo-mo/tutorial/Lesson3/simulated_annealing.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -38,47 +38,47 @@
#include
int
-main (int __argc, char * __argv [])
+main (int __argc, char * __argv [])
{
- if (__argc != 2)
+ if (__argc != 2)
{
std :: cerr << "Usage : ./simulated_annealing [instance]" << std :: endl ;
return 1 ;
}
-
+
Graph :: load (__argv [1]) ; // Instance
Route route ; // Solution
-
+
RouteInit init ; // Sol. Random Init.
init (route) ;
RouteEval full_eval ; // Full. Eval.
full_eval (route) ;
-
+
std :: cout << "[From] " << route << std :: endl ;
-
+
/* Tools for an efficient (? :-))
local search ! */
-
+
TwoOptRand two_opt_rand ; // Route Random. Gen.
-
+
TwoOptIncrEval two_opt_incr_eval ; // Eff. eval.
-
+
TwoOpt move ;
-
- moExponentialCoolingSchedule cool_sched (0.1, 0.98) ; // Exponential Cooling Schedule
- //moLinearCoolingSchedule cool_sched (0.1, 0.5) ; // Linear Cooling Schedule
-
+
+ moExponentialCoolingSchedule cool_sched (0.1, 0.98) ; // Exponential Cooling Schedule
+ //moLinearCoolingSchedule cool_sched (0.1, 0.5) ; // Linear Cooling Schedule
+
moGenSolContinue cont (1000) ; /* Temperature Descreasing
- will occur each 1000
- iterations */
-
+ will occur each 1000
+ iterations */
+
moSA simulated_annealing (two_opt_rand, two_opt_incr_eval, cont, 1000, cool_sched, full_eval) ;
simulated_annealing (route) ;
std :: cout << "[To] " << route << std :: endl ;
-
+
return 0 ;
}
diff --git a/trunk/paradiseo-mo/tutorial/Lesson4/iterated_local_search.cpp b/trunk/paradiseo-mo/tutorial/Lesson4/iterated_local_search.cpp
index 8a31ba19e..0ed3d3a09 100644
--- a/trunk/paradiseo-mo/tutorial/Lesson4/iterated_local_search.cpp
+++ b/trunk/paradiseo-mo/tutorial/Lesson4/iterated_local_search.cpp
@@ -13,46 +13,46 @@
#include
int
-main (int __argc, char * __argv [])
+main (int __argc, char * __argv [])
{
- if (__argc != 2)
+ if (__argc != 2)
{
std :: cerr << "Usage : ./iterated_local_search [instance]" << std :: endl ;
return 1 ;
}
-
+
Graph :: load (__argv [1]) ; // Instance
Route route ; // Solution
-
+
RouteInit init ; // Sol. Random Init.
init (route) ;
RouteEval full_eval ; // Full. Eval.
full_eval (route) ;
-
+
std :: cout << "[From] " << route << std :: endl ;
-
+
TwoOptInit two_opt_init ; // Init.
-
+
TwoOptNext two_opt_next ; // Explorer.
-
+
TwoOptIncrEval two_opt_incr_eval ; // Eff. eval.
-
+
moBestImprSelect two_opt_select ; //Move selection
-
+
moGenSolContinue cont (1000) ; //Stopping criterion
-
+
moFitComparator comparator; // Route comparator
CitySwap perturbation; // Route perturbation
- moILS iterated_local_search (two_opt_init, two_opt_next, two_opt_incr_eval, two_opt_select,
- cont, comparator, perturbation, full_eval) ;
+ moILS iterated_local_search (two_opt_init, two_opt_next, two_opt_incr_eval, two_opt_select,
+ cont, comparator, perturbation, full_eval) ;
iterated_local_search(route) ;
std :: cout << "[To] " << route << std :: endl ;
-
+
return 0 ;
}
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/city_swap.cpp b/trunk/paradiseo-mo/tutorial/examples/tsp/city_swap.cpp
index 52aff02fb..e47a4e31b 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/city_swap.cpp
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/city_swap.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -38,12 +38,13 @@
#include "city_swap.h"
-bool CitySwap :: operator () (Route & __route) {
-
+bool CitySwap :: operator () (Route & __route)
+{
+
std :: swap (__route [rng.random (__route.size ())],
- __route [rng.random (__route.size ())]) ;
-
+ __route [rng.random (__route.size ())]) ;
+
__route.invalidate () ;
-
+
return true ;
}
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/city_swap.h b/trunk/paradiseo-mo/tutorial/examples/tsp/city_swap.h
index 854367e3b..eda897f0f 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/city_swap.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/city_swap.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -43,12 +43,13 @@
/** Its swaps two vertices
randomly choosen */
-class CitySwap : public eoMonOp {
-
-public :
-
- bool operator () (Route & __route) ;
-
-} ;
+class CitySwap : public eoMonOp
+ {
+
+ public :
+
+ bool operator () (Route & __route) ;
+
+ } ;
#endif
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/edge_xover.cpp b/trunk/paradiseo-mo/tutorial/examples/tsp/edge_xover.cpp
index 2ecf46ec2..a8b6a8532 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/edge_xover.cpp
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/edge_xover.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -44,119 +44,121 @@
#define MAXINT 1000000
void
-EdgeXover :: build_map (const Route & __par1, const Route & __par2)
+EdgeXover :: build_map (const Route & __par1, const Route & __par2)
{
-
+
unsigned int len = __par1.size () ;
-
+
/* Initialization */
_map.clear () ;
_map.resize (len) ;
-
- for (unsigned int i = 0 ; i < len ; i ++)
+
+ for (unsigned int i = 0 ; i < len ; i ++)
{
_map [__par1 [i]].insert (__par1 [(i + 1) % len]) ;
_map [__par2 [i]].insert (__par2 [(i + 1) % len]) ;
_map [__par1 [i]].insert (__par1 [(i - 1 + len) % len]) ;
_map [__par2 [i]].insert (__par2 [(i - 1 + len) % len]) ;
}
-
+
visited.clear () ;
visited.resize (len, false) ;
}
void
-EdgeXover :: remove_entry (unsigned int __vertex, std :: vector > & __map)
-{
-
- std :: set & neigh = __map [__vertex] ;
+EdgeXover :: remove_entry (unsigned int __vertex, std :: vector > & __map)
+ {
- for (std :: set :: iterator it = neigh.begin () ; it != neigh.end () ; it ++)
- {
- __map [* it].erase (__vertex) ;
- }
-
-}
+ std :: set & neigh = __map [__vertex] ;
+
+ for (std :: set :: iterator it = neigh.begin () ; it != neigh.end () ; it ++)
+ {
+ __map [* it].erase (__vertex) ;
+ }
+
+ }
void
-EdgeXover :: add_vertex (unsigned int __vertex, Route & __child)
+EdgeXover :: add_vertex (unsigned int __vertex, Route & __child)
{
visited [__vertex] = true ;
- __child.push_back (__vertex) ;
- remove_entry (__vertex, _map) ; /* Removing entries */
+ __child.push_back (__vertex) ;
+ remove_entry (__vertex, _map) ; /* Removing entries */
}
void
-EdgeXover :: cross (const Route & __par1, const Route & __par2, Route & __child) {
-
+EdgeXover :: cross (const Route & __par1, const Route & __par2, Route & __child)
+{
+
build_map (__par1, __par2) ;
-
+
unsigned int len = __par1.size () ;
-
+
/* Go ! */
__child.clear () ;
-
+
unsigned int cur_vertex = rng.random (len) ;
-
+
add_vertex (cur_vertex, __child) ;
- for (unsigned int i = 1 ; i < len ; i ++) {
-
- unsigned int len_min_entry = MAXINT ;
-
- std :: set & neigh = _map [cur_vertex] ;
-
- for (std :: set :: iterator it = neigh.begin () ; it != neigh.end () ; it ++)
- {
- unsigned int l = _map [* it].size () ;
- if (len_min_entry > l)
- {
- len_min_entry = l ;
- }
- }
-
- std :: vector cand ; /* Candidates */
-
- for (std :: set :: iterator it = neigh.begin () ; it != neigh.end () ; it ++)
- {
- unsigned int l = _map [* it].size () ;
- if (len_min_entry == l)
- {
- cand.push_back (* it) ;
- }
- }
-
- if (! cand.size ())
- {
-
- /* Oh no ! Implicit mutation */
- for (unsigned int j = 0 ; j < len ; j ++)
- {
- if (! visited [j])
- {
- cand.push_back (j) ;
- }
- }
- }
-
- cur_vertex = cand [rng.random (cand.size ())] ;
-
- add_vertex (cur_vertex, __child) ;
- }
+ for (unsigned int i = 1 ; i < len ; i ++)
+ {
+
+ unsigned int len_min_entry = MAXINT ;
+
+ std :: set & neigh = _map [cur_vertex] ;
+
+ for (std :: set :: iterator it = neigh.begin () ; it != neigh.end () ; it ++)
+ {
+ unsigned int l = _map [* it].size () ;
+ if (len_min_entry > l)
+ {
+ len_min_entry = l ;
+ }
+ }
+
+ std :: vector cand ; /* Candidates */
+
+ for (std :: set :: iterator it = neigh.begin () ; it != neigh.end () ; it ++)
+ {
+ unsigned int l = _map [* it].size () ;
+ if (len_min_entry == l)
+ {
+ cand.push_back (* it) ;
+ }
+ }
+
+ if (! cand.size ())
+ {
+
+ /* Oh no ! Implicit mutation */
+ for (unsigned int j = 0 ; j < len ; j ++)
+ {
+ if (! visited [j])
+ {
+ cand.push_back (j) ;
+ }
+ }
+ }
+
+ cur_vertex = cand [rng.random (cand.size ())] ;
+
+ add_vertex (cur_vertex, __child) ;
+ }
}
bool
-EdgeXover :: operator () (Route & __route1, Route & __route2)
+EdgeXover :: operator () (Route & __route1, Route & __route2)
{
-
+
// Init. copy
Route par [2] ;
par [0] = __route1 ;
par [1] = __route2 ;
-
+
cross (par [0], par [1], __route1) ;
cross (par [1], par [0], __route2) ;
-
+
assert (valid (__route1)) ;
assert (valid (__route2)) ;
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/edge_xover.h b/trunk/paradiseo-mo/tutorial/examples/tsp/edge_xover.h
index 775c2fd53..3e97d6d48 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/edge_xover.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/edge_xover.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -45,28 +45,28 @@
#include "route.h"
/** Edge Crossover */
-class EdgeXover : public eoQuadOp
-{
-
-public :
-
- bool operator () (Route & __route1, Route & __route2) ;
+class EdgeXover : public eoQuadOp
+ {
-private :
-
- void cross (const Route & __par1, const Route & __par2, Route & __child) ; /* Binary */
+ public :
- void remove_entry (unsigned int __vertex, std :: vector > & __map) ;
- /* Updating the map of entries */
+ bool operator () (Route & __route1, Route & __route2) ;
- void build_map (const Route & __par1, const Route & __par2) ;
+ private :
- void add_vertex (unsigned int __vertex, Route & __child) ;
+ void cross (const Route & __par1, const Route & __par2, Route & __child) ; /* Binary */
- std :: vector > _map ; /* The handled map */
+ void remove_entry (unsigned int __vertex, std :: vector > & __map) ;
+ /* Updating the map of entries */
- std :: vector visited ; /* Vertices that are already visited */
+ void build_map (const Route & __par1, const Route & __par2) ;
-} ;
+ void add_vertex (unsigned int __vertex, Route & __child) ;
+
+ std :: vector > _map ; /* The handled map */
+
+ std :: vector visited ; /* Vertices that are already visited */
+
+ } ;
#endif
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/graph.cpp b/trunk/paradiseo-mo/tutorial/examples/tsp/graph.cpp
index ac6b11217..2623e1802 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/graph.cpp
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/graph.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -40,73 +40,74 @@
#include "graph.h"
-namespace Graph {
+namespace Graph
+ {
static std :: vector > vectCoord ; // Coordinates
-
+
static std :: vector > dist ; // Distances Mat.
- unsigned size ()
+ unsigned size ()
{
return dist.size () ;
}
- void computeDistances ()
+ void computeDistances ()
{
-
+
// Dim.
unsigned int numCities = vectCoord.size () ;
dist.resize (numCities) ;
for (unsigned int i = 0 ; i < dist.size () ; i ++)
{
- dist [i].resize (numCities) ;
+ dist [i].resize (numCities) ;
}
-
+
// Computations.
for (unsigned int i = 0 ; i < dist.size () ; i ++)
{
- for (unsigned int j = i + 1 ; j < dist.size () ; j ++)
- {
- double distX = (double)(vectCoord [i].first - vectCoord [j].first) ;
- double distY = (double)(vectCoord [i].second - vectCoord [j].second) ;
- dist [i] [j] = dist [j] [i] = (unsigned) (sqrt ((float) (distX * distX + distY * distY)) + 0.5) ;
- }
+ for (unsigned int j = i + 1 ; j < dist.size () ; j ++)
+ {
+ double distX = (double)(vectCoord [i].first - vectCoord [j].first) ;
+ double distY = (double)(vectCoord [i].second - vectCoord [j].second) ;
+ dist [i] [j] = dist [j] [i] = (unsigned) (sqrt ((float) (distX * distX + distY * distY)) + 0.5) ;
+ }
}
}
- void load (const char * __fileName)
+ void load (const char * __fileName)
{
-
+
std :: ifstream f (__fileName) ;
-
+
std :: cout << ">> Loading [" << __fileName << "]" << std :: endl ;
-
- if (f)
+
+ if (f)
{
- unsigned int num_vert ;
-
- f >> num_vert ;
- vectCoord.resize (num_vert) ;
-
- for (unsigned int i = 0 ; i < num_vert ; i ++)
- {
- f >> vectCoord [i].first >> vectCoord [i].second ;
- }
-
- f.close () ;
-
- computeDistances () ;
+ unsigned int num_vert ;
+
+ f >> num_vert ;
+ vectCoord.resize (num_vert) ;
+
+ for (unsigned int i = 0 ; i < num_vert ; i ++)
+ {
+ f >> vectCoord [i].first >> vectCoord [i].second ;
+ }
+
+ f.close () ;
+
+ computeDistances () ;
}
- else
+ else
{
-
- std :: cout << __fileName << " doesn't exist !!!" << std :: endl ;
- // Bye !!!
- exit (1) ;
+
+ std :: cout << __fileName << " doesn't exist !!!" << std :: endl ;
+ // Bye !!!
+ exit (1) ;
}
}
-
- float distance (unsigned int __from, unsigned int __to)
+
+ float distance (unsigned int __from, unsigned int __to)
{
return (float)(dist [__from] [__to]) ;
}
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/graph.h b/trunk/paradiseo-mo/tutorial/examples/tsp/graph.h
index b2dbc6b5f..bea04b225 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/graph.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/graph.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -40,13 +40,13 @@
#include
#include
-namespace Graph
-{
+namespace Graph
+ {
void load (const char * __file_name) ;
/* Loading cities
(expressed by their coordinates)
- from the given file name */
-
+ from the given file name */
+
float distance (unsigned int __from, unsigned int __to) ;
unsigned int size () ; // How many cities ?
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/mix.h b/trunk/paradiseo-mo/tutorial/examples/tsp/mix.h
index ad2481263..fc570a939 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/mix.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/mix.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -39,9 +39,9 @@
#include
-template void mix (std :: vector & __vect)
+template void mix (std :: vector & __vect)
{
- for (unsigned int i = 0 ; i < __vect.size () ; i ++)
+ for (unsigned int i = 0 ; i < __vect.size () ; i ++)
{
std :: swap (__vect [i], __vect [rng.random (__vect.size ())]) ;
}
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/order_xover.cpp b/trunk/paradiseo-mo/tutorial/examples/tsp/order_xover.cpp
index b8bc40970..9e2c1f408 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/order_xover.cpp
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/order_xover.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -42,73 +42,73 @@
#include "order_xover.h"
#include "route_valid.h"
-void OrderXover :: cross (const Route & __par1, const Route & __par2, Route & __child)
+void OrderXover :: cross (const Route & __par1, const Route & __par2, Route & __child)
{
-
+
unsigned int cut = rng.random (__par1.size ()) ;
-
+
/* To store vertices that have
already been crossed */
std::vector v;
v.resize(__par1.size());
-
+
for (unsigned int i = 0 ; i < __par1.size () ; i ++)
{
v [i] = false ;
}
/* Copy of the left partial
- route of the first parent */
- for (unsigned int i = 0 ; i < cut ; i ++)
+ route of the first parent */
+ for (unsigned int i = 0 ; i < cut ; i ++)
{
- __child [i] = __par1 [i] ;
+ __child [i] = __par1 [i] ;
v [__par1 [i]] = true ;
}
-
+
/* Searching the vertex of the second path, that ended
the previous first one */
unsigned int from = 0 ;
for (unsigned int i = 0 ; i < __par2.size () ; i ++)
{
- if (__par2 [i] == __child [cut - 1])
- {
- from = i ;
- break ;
- }
+ if (__par2 [i] == __child [cut - 1])
+ {
+ from = i ;
+ break ;
+ }
}
-
+
/* Selecting a direction
Left or Right */
char direct = rng.flip () ? 1 : -1 ;
-
+
/* Copy of the left vertices from
the second parent path */
unsigned int l = cut ;
-
- for (unsigned int i = 0 ; i < __par2.size () ; i ++)
+
+ for (unsigned int i = 0 ; i < __par2.size () ; i ++)
{
unsigned int bidule /* :-) */ = (direct * i + from + __par2.size ()) % __par2.size () ;
- if (! v [__par2 [bidule]])
- {
- __child [l ++] = __par2 [bidule] ;
- v [__par2 [bidule]] = true ;
- }
+ if (! v [__par2 [bidule]])
+ {
+ __child [l ++] = __par2 [bidule] ;
+ v [__par2 [bidule]] = true ;
+ }
}
-
- v.clear();
-}
-bool OrderXover :: operator () (Route & __route1, Route & __route2)
+ v.clear();
+}
+
+bool OrderXover :: operator () (Route & __route1, Route & __route2)
{
-
+
// Init. copy
Route par [2] ;
par [0] = __route1 ;
par [1] = __route2 ;
-
+
cross (par [0], par [1], __route1) ;
cross (par [1], par [0], __route2) ;
-
+
assert (valid (__route1)) ;
assert (valid (__route2)) ;
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/order_xover.h b/trunk/paradiseo-mo/tutorial/examples/tsp/order_xover.h
index 9c60ad583..924eb4dfd 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/order_xover.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/order_xover.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -42,16 +42,16 @@
#include "route.h"
/** Order Crossover */
-class OrderXover : public eoQuadOp
-{
-
-public :
-
- bool operator () (Route & __route1, Route & __route2) ;
-
-private :
-
- void cross (const Route & __par1, const Route & __par2, Route & __child) ;
-} ;
+class OrderXover : public eoQuadOp
+ {
+
+ public :
+
+ bool operator () (Route & __route1, Route & __route2) ;
+
+ private :
+
+ void cross (const Route & __par1, const Route & __par2, Route & __child) ;
+ } ;
#endif
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/part_route_eval.cpp b/trunk/paradiseo-mo/tutorial/examples/tsp/part_route_eval.cpp
index c14f1e1ca..bc5c3a718 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/part_route_eval.cpp
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/part_route_eval.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -37,16 +37,17 @@
#include "part_route_eval.h"
#include "graph.h"
-PartRouteEval :: PartRouteEval (float __from, float __to) : from (__from), to (__to) {}
+PartRouteEval :: PartRouteEval (float __from, float __to) : from (__from), to (__to)
+{}
-void PartRouteEval :: operator () (Route & __route)
+void PartRouteEval :: operator () (Route & __route)
{
float len = 0 ;
-
+
for (unsigned int i = (unsigned int) (__route.size () * from) ; i < (unsigned int ) (__route.size () * to) ; i ++)
{
len -= Graph :: distance (__route [i], __route [(i + 1) % Graph :: size ()]) ;
}
-
+
__route.fitness (len) ;
}
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/part_route_eval.h b/trunk/paradiseo-mo/tutorial/examples/tsp/part_route_eval.h
index 1ed1b9320..a92fad2ce 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/part_route_eval.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/part_route_eval.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -42,21 +42,21 @@
#include "route.h"
/** Route Evaluator */
-class PartRouteEval : public eoEvalFunc
-{
-
-public :
-
- /** Constructor */
- PartRouteEval (float __from, float __to) ;
-
- void operator () (Route & __route) ;
-
-private :
+class PartRouteEval : public eoEvalFunc
+ {
- float from, to ;
-
-} ;
+ public :
+
+ /** Constructor */
+ PartRouteEval (float __from, float __to) ;
+
+ void operator () (Route & __route) ;
+
+ private :
+
+ float from, to ;
+
+ } ;
#endif
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/part_two_opt_init.cpp b/trunk/paradiseo-mo/tutorial/examples/tsp/part_two_opt_init.cpp
index 51fb1d3d8..357b7ecbe 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/part_two_opt_init.cpp
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/part_two_opt_init.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -38,7 +38,7 @@
#include "part_two_opt_init.h"
-void PartTwoOptInit :: operator () (TwoOpt & __move, const Route & __route)
+void PartTwoOptInit :: operator () (TwoOpt & __move, const Route & __route)
{
__move.first = rng.random (__route.size () - 6) ;
__move.second = __move.first + 2 ;
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/part_two_opt_init.h b/trunk/paradiseo-mo/tutorial/examples/tsp/part_two_opt_init.h
index 4b035351e..490fe61bf 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/part_two_opt_init.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/part_two_opt_init.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -42,13 +42,13 @@
#include "two_opt.h"
/** It sets the first couple of edges */
-class PartTwoOptInit : public moMoveInit
-{
-
-public :
-
- void operator () (TwoOpt & __move, const Route & __route) ;
-
-} ;
+class PartTwoOptInit : public moMoveInit
+ {
+
+ public :
+
+ void operator () (TwoOpt & __move, const Route & __route) ;
+
+ } ;
#endif
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/part_two_opt_next.cpp b/trunk/paradiseo-mo/tutorial/examples/tsp/part_two_opt_next.cpp
index 794706a89..f352c496e 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/part_two_opt_next.cpp
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/part_two_opt_next.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -37,21 +37,21 @@
#include "part_two_opt_next.h"
#include "graph.h"
-bool TwoOptNext :: operator () (TwoOpt & __move, const Route & __route)
+bool TwoOptNext :: operator () (TwoOpt & __move, const Route & __route)
{
if (__move.first == Graph :: size () - 4 && __move.second == __move.first + 2)
{
return false ;
}
- else
+ else
{
__move.second ++ ;
- if (__move.second == Graph :: size () - 1)
- {
- __move.first ++ ;
- __move.second = __move.first + 2 ;
- }
-
+ if (__move.second == Graph :: size () - 1)
+ {
+ __move.first ++ ;
+ __move.second = __move.first + 2 ;
+ }
+
return true ;
}
}
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/part_two_opt_next.h b/trunk/paradiseo-mo/tutorial/examples/tsp/part_two_opt_next.h
index 2b5739c0d..e2a0c05cc 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/part_two_opt_next.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/part_two_opt_next.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -41,13 +41,13 @@
#include "two_opt.h"
/** It updates a couple of edges */
-class PartTwoOptNext : public moNextMove
-{
-
-public :
-
- bool operator () (TwoOpt & __move, const Route & __route) ;
-
-} ;
+class PartTwoOptNext : public moNextMove
+ {
+
+ public :
+
+ bool operator () (TwoOpt & __move, const Route & __route) ;
+
+ } ;
#endif
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/partial_mapped_xover.cpp b/trunk/paradiseo-mo/tutorial/examples/tsp/partial_mapped_xover.cpp
index 44e9e8343..ab92d2a3b 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/partial_mapped_xover.cpp
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/partial_mapped_xover.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -44,69 +44,69 @@
#include "route_valid.h"
#include "mix.h"
-void PartialMappedXover :: repair (Route & __route, unsigned __cut1, unsigned __cut2)
+void PartialMappedXover :: repair (Route & __route, unsigned __cut1, unsigned __cut2)
{
-
+
std::vector v; // Number of times a cities are visited ...
-
- v.resize(__route.size ());
-
+
+ v.resize(__route.size ());
+
for (unsigned int i = 0 ; i < __route.size () ; i ++)
{
v [i] = 0 ;
}
-
+
for (unsigned int i = 0 ; i < __route.size () ; i ++)
{
v [__route [i]] ++ ;
}
-
+
std :: vector vert ;
for (unsigned int i = 0 ; i < __route.size () ; i ++)
{
if (! v [i])
- {
- vert.push_back (i) ;
- }
+ {
+ vert.push_back (i) ;
+ }
}
-
+
mix (vert) ;
for (unsigned int i = 0 ; i < __route.size () ; i ++)
{
if (i < __cut1 || i >= __cut2)
- {
- if (v [__route [i]] > 1)
- {
- __route [i] = vert.back () ;
- vert.pop_back () ;
- }
- }
- }
+ {
+ if (v [__route [i]] > 1)
+ {
+ __route [i] = vert.back () ;
+ vert.pop_back () ;
+ }
+ }
+ }
v.clear();
}
-bool PartialMappedXover :: operator () (Route & __route1, Route & __route2)
+bool PartialMappedXover :: operator () (Route & __route1, Route & __route2)
{
unsigned int cut1 = rng.random (__route1.size ()), cut2 = rng.random (__route2.size ()) ;
-
+
if (cut2 < cut1)
{
std :: swap (cut1, cut2) ;
}
-
+
// Between the cuts
for (unsigned int i = cut1 ; i < cut2 ; i ++)
{
std :: swap (__route1 [i], __route2 [i]) ;
}
-
+
// Outside the cuts
repair (__route1, cut1, cut2) ;
repair (__route2, cut1, cut2) ;
-
+
// Debug
assert (valid (__route1)) ;
assert (valid (__route2)) ;
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/partial_mapped_xover.h b/trunk/paradiseo-mo/tutorial/examples/tsp/partial_mapped_xover.h
index 3a6941cf9..65c6474de 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/partial_mapped_xover.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/partial_mapped_xover.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -42,15 +42,16 @@
#include "route.h"
/** Partial Mapped Crossover */
-class PartialMappedXover : public eoQuadOp {
-
-public :
-
- bool operator () (Route & __route1, Route & __route2) ;
+class PartialMappedXover : public eoQuadOp
+ {
-private :
-
- void repair (Route & __route, unsigned __cut1, unsigned __cut2) ;
-} ;
+ public :
+
+ bool operator () (Route & __route1, Route & __route2) ;
+
+ private :
+
+ void repair (Route & __route, unsigned __cut1, unsigned __cut2) ;
+ } ;
#endif
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/route.h b/trunk/paradiseo-mo/tutorial/examples/tsp/route.h
index 0482b2428..09b993bc1 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/route.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/route.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/route_eval.cpp b/trunk/paradiseo-mo/tutorial/examples/tsp/route_eval.cpp
index 0cd7508b7..693f43c6c 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/route_eval.cpp
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/route_eval.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -37,15 +37,15 @@
#include "route_eval.h"
#include "graph.h"
-void RouteEval :: operator () (Route & __route)
+void RouteEval :: operator () (Route & __route)
{
-
+
float len = 0 ;
-
+
for (unsigned int i = 0 ; i < Graph :: size () ; i ++)
{
- len -= Graph :: distance (__route [i], __route [(i + 1) % Graph :: size ()]) ;
+ len -= Graph :: distance (__route [i], __route [(i + 1) % Graph :: size ()]) ;
}
-
+
__route.fitness (len) ;
}
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/route_eval.h b/trunk/paradiseo-mo/tutorial/examples/tsp/route_eval.h
index d0b1922bc..474075cf0 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/route_eval.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/route_eval.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -42,14 +42,14 @@
#include "route.h"
/** Route Evaluator */
-class RouteEval : public eoEvalFunc
-{
-
-public :
-
- void operator () (Route & __route) ;
-
-} ;
+class RouteEval : public eoEvalFunc
+ {
+
+ public :
+
+ void operator () (Route & __route) ;
+
+ } ;
#endif
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/route_init.cpp b/trunk/paradiseo-mo/tutorial/examples/tsp/route_init.cpp
index 184b9bf40..09a2c40cb 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/route_init.cpp
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/route_init.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -39,25 +39,25 @@
#include "route_init.h"
#include "graph.h"
-void RouteInit :: operator () (Route & __route)
+void RouteInit :: operator () (Route & __route)
{
-
+
// Init.
__route.clear () ;
for (unsigned int i = 0 ; i < Graph :: size () ; i ++)
{
__route.push_back (i) ;
}
-
+
// Swap. cities
- for (unsigned int i = 0 ; i < Graph :: size () ; i ++)
+ for (unsigned int i = 0 ; i < Graph :: size () ; i ++)
{
//unsigned int j = rng.random (Graph :: size ()) ;
-
+
unsigned int j = (unsigned int) (Graph :: size () * (rand () / (RAND_MAX + 1.0))) ;
unsigned int city = __route [i] ;
__route [i] = __route [j] ;
__route [j] = city ;
- }
+ }
}
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/route_init.h b/trunk/paradiseo-mo/tutorial/examples/tsp/route_init.h
index 4618cd526..466345c1b 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/route_init.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/route_init.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -41,13 +41,13 @@
#include "route.h"
-class RouteInit : public eoInit
-{
-
-public :
-
- void operator () (Route & __route) ;
-
-} ;
+class RouteInit : public eoInit
+ {
+
+ public :
+
+ void operator () (Route & __route) ;
+
+ } ;
#endif
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/route_valid.cpp b/trunk/paradiseo-mo/tutorial/examples/tsp/route_valid.cpp
index 43346a0f4..844cebf82 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/route_valid.cpp
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/route_valid.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -38,31 +38,31 @@
#include
-bool valid (Route & __route)
+bool valid (Route & __route)
{
-
+
std::vector t;
t.resize(__route.size());
-
+
for (unsigned int i = 0 ; i < __route.size () ; i ++)
{
t [i] = 0 ;
}
-
+
for (unsigned int i = 0 ; i < __route.size () ; i ++)
{
t [__route [i]] ++ ;
}
-
+
for (unsigned int i = 0 ; i < __route.size () ; i ++)
{
if (t [i] != 1)
- {
- t.clear();
- return false ;
- }
+ {
+ t.clear();
+ return false ;
+ }
}
-
+
t.clear();
return true ; // OK.
}
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/route_valid.h b/trunk/paradiseo-mo/tutorial/examples/tsp/route_valid.h
index cae56113e..607728e8b 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/route_valid.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/route_valid.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/tsp.h b/trunk/paradiseo-mo/tutorial/examples/tsp/tsp.h
index 38bd154aa..ba249a794 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/tsp.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/tsp.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt.cpp b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt.cpp
index e270939e4..146c6c6c2 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt.cpp
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -36,24 +36,24 @@
#include "two_opt.h"
-TwoOpt TwoOpt :: operator ! () const
-{
- TwoOpt move = * this ;
- std :: swap (move.first, move.second) ;
-
- return move ;
-}
+TwoOpt TwoOpt :: operator ! () const
+ {
+ TwoOpt move = * this ;
+ std :: swap (move.first, move.second) ;
-void TwoOpt :: operator () (Route & __route)
+ return move ;
+ }
+
+void TwoOpt :: operator () (Route & __route)
{
-
+
std :: vector seq_cities ;
-
+
for (unsigned int i = second ; i > first ; i --)
{
seq_cities.push_back (__route [i]) ;
}
-
+
unsigned int j = 0 ;
for (unsigned int i = first + 1 ; i < second + 1 ; i ++)
{
@@ -61,12 +61,12 @@ void TwoOpt :: operator () (Route & __route)
}
}
-void TwoOpt :: readFrom (std :: istream & __is)
+void TwoOpt :: readFrom (std :: istream & __is)
{
__is >> first >> second ;
}
-void TwoOpt :: printOn (std :: ostream & __os) const
-{
- __os << first << ' ' << second ;
-}
+void TwoOpt :: printOn (std :: ostream & __os) const
+ {
+ __os << first << ' ' << second ;
+ }
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt.h b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt.h
index 78433be90..6b9cf435f 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -44,18 +44,18 @@
#include "route.h"
-class TwoOpt : public moMove , public std :: pair , public eoPersistent
-{
-
-public :
-
- TwoOpt operator ! () const ;
-
- void operator () (Route & __route) ;
-
- void readFrom (std :: istream & __is) ;
-
- void printOn (std :: ostream & __os) const ;
-} ;
+class TwoOpt : public moMove , public std :: pair , public eoPersistent
+ {
+
+ public :
+
+ TwoOpt operator ! () const ;
+
+ void operator () (Route & __route) ;
+
+ void readFrom (std :: istream & __is) ;
+
+ void printOn (std :: ostream & __os) const ;
+ } ;
#endif
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_incr_eval.cpp b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_incr_eval.cpp
index 9bb11248e..06a3d594e 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_incr_eval.cpp
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_incr_eval.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -37,17 +37,17 @@
#include "two_opt_incr_eval.h"
#include "graph.h"
-float TwoOptIncrEval :: operator () (const TwoOpt & __move, const Route & __route)
+float TwoOptIncrEval :: operator () (const TwoOpt & __move, const Route & __route)
{
// From
unsigned int v1 = __route [__move.first], v1_next = __route [__move.first + 1] ;
-
+
// To
unsigned int v2 = __route [__move.second], v2_next = __route [__move.second + 1] ;
-
+
return __route.fitness ()
- - Graph :: distance (v1, v2)
- - Graph :: distance (v1_next, v2_next)
- + Graph :: distance (v1, v1_next)
- + Graph :: distance (v2, v2_next) ;
+ - Graph :: distance (v1, v2)
+ - Graph :: distance (v1_next, v2_next)
+ + Graph :: distance (v1, v1_next)
+ + Graph :: distance (v2, v2_next) ;
}
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_incr_eval.h b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_incr_eval.h
index 786535fcf..856b28201 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_incr_eval.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_incr_eval.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -40,13 +40,13 @@
#include
#include "two_opt.h"
-class TwoOptIncrEval : public moMoveIncrEval
-{
-
-public :
-
- float operator () (const TwoOpt & __move, const Route & __route) ;
+class TwoOptIncrEval : public moMoveIncrEval
+ {
-} ;
+ public :
+
+ float operator () (const TwoOpt & __move, const Route & __route) ;
+
+ } ;
#endif
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_init.cpp b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_init.cpp
index a9f0121fe..bbf5a3e1a 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_init.cpp
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_init.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -36,7 +36,7 @@
#include "two_opt_init.h"
-void TwoOptInit :: operator () (TwoOpt & __move, const Route & __route)
+void TwoOptInit :: operator () (TwoOpt & __move, const Route & __route)
{
__move.first = 0 ;
__move.second = 2 ;
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_init.h b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_init.h
index 25721613f..d6d22f8da 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_init.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_init.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -42,13 +42,13 @@
#include "two_opt.h"
/** It sets the first couple of edges */
-class TwoOptInit : public moMoveInit
-{
-
-public :
-
- void operator () (TwoOpt & __move, const Route & __route) ;
-
-} ;
+class TwoOptInit : public moMoveInit
+ {
+
+ public :
+
+ void operator () (TwoOpt & __move, const Route & __route) ;
+
+ } ;
#endif
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_next.cpp b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_next.cpp
index e85068761..47335a515 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_next.cpp
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_next.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -37,21 +37,21 @@
#include "two_opt_next.h"
#include "graph.h"
-bool TwoOptNext :: operator () (TwoOpt & __move, const Route & __route)
+bool TwoOptNext :: operator () (TwoOpt & __move, const Route & __route)
{
if (__move.first == Graph :: size () - 4 && __move.second == __move.first + 2)
{
return false ;
}
- else
+ else
{
__move.second ++ ;
- if (__move.second == Graph :: size () - 1)
- {
- __move.first ++ ;
- __move.second = __move.first + 2 ;
- }
-
+ if (__move.second == Graph :: size () - 1)
+ {
+ __move.first ++ ;
+ __move.second = __move.first + 2 ;
+ }
+
return true ;
}
}
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_next.h b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_next.h
index ac0a3824e..59856db9a 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_next.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_next.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -41,13 +41,13 @@
#include "two_opt.h"
/** It updates a couple of edges */
-class TwoOptNext : public moNextMove
-{
-
-public :
-
- bool operator () (TwoOpt & __move, const Route & __route) ;
-
-} ;
+class TwoOptNext : public moNextMove
+ {
+
+ public :
+
+ bool operator () (TwoOpt & __move, const Route & __route) ;
+
+ } ;
#endif
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_rand.cpp b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_rand.cpp
index e35cec4ed..956bddfb0 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_rand.cpp
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_rand.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -38,7 +38,7 @@
#include "graph.h"
#include
-void TwoOptRand :: operator () (TwoOpt & __move)
+void TwoOptRand :: operator () (TwoOpt & __move)
{
__move.first = rng.random (Graph :: size () - 3) ;
__move.second = __move.first + 2 + rng.random (Graph :: size () - __move.first - 3) ;
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_rand.h b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_rand.h
index 658b2cd10..e6e0bdff2 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_rand.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_rand.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -41,13 +41,13 @@
#include "two_opt.h"
-class TwoOptRand : public moRandMove
-{
-
-public :
-
- void operator () (TwoOpt & __move) ;
-
-} ;
+class TwoOptRand : public moRandMove
+ {
+
+ public :
+
+ void operator () (TwoOpt & __move) ;
+
+ } ;
#endif
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_tabu_list.cpp b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_tabu_list.cpp
index d10843026..2a2f009ed 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_tabu_list.cpp
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_tabu_list.cpp
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -39,45 +39,45 @@
#define TABU_LENGTH 10
-void TwoOptTabuList :: init ()
+void TwoOptTabuList :: init ()
{
// Size (eventually)
tabu_span.resize (Graph :: size ()) ;
for (unsigned int i = 0 ; i < tabu_span.size () ; i ++)
{
- tabu_span [i].resize (Graph :: size ()) ;
+ tabu_span [i].resize (Graph :: size ()) ;
}
// Clear
for (unsigned int i = 0 ; i < tabu_span.size () ; i ++)
{
for (unsigned int j = 0 ; j < tabu_span [i].size () ; j ++)
- {
- tabu_span [i] [j] = 0 ;
- }
+ {
+ tabu_span [i] [j] = 0 ;
+ }
}
}
-bool TwoOptTabuList :: operator () (const TwoOpt & __move, const Route & __sol)
+bool TwoOptTabuList :: operator () (const TwoOpt & __move, const Route & __sol)
{
return tabu_span [__move.first] [__move.second] > 0 ;
}
-void TwoOptTabuList :: add (const TwoOpt & __move, const Route & __sol)
-{
- tabu_span [__move.first] [__move.second] = tabu_span [__move.second] [__move.first] = TABU_LENGTH ;
-}
+void TwoOptTabuList :: add (const TwoOpt & __move, const Route & __sol)
+ {
+ tabu_span [__move.first] [__move.second] = tabu_span [__move.second] [__move.first] = TABU_LENGTH ;
+ }
-void TwoOptTabuList :: update ()
+void TwoOptTabuList :: update ()
{
for (unsigned int i = 0 ; i < tabu_span.size () ; i ++)
{
for (unsigned int j = 0 ; j < tabu_span [i].size () ; j ++)
- {
- if (tabu_span [i] [j] > 0)
- {
- tabu_span [i] [j] -- ;
- }
- }
+ {
+ if (tabu_span [i] [j] > 0)
+ {
+ tabu_span [i] [j] -- ;
+ }
+ }
}
}
diff --git a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_tabu_list.h b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_tabu_list.h
index e757354de..57490fc9a 100644
--- a/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_tabu_list.h
+++ b/trunk/paradiseo-mo/tutorial/examples/tsp/two_opt_tabu_list.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
@@ -42,22 +42,22 @@
#include "route.h"
/** The table of tabu movements, i.e. forbidden edges */
-class TwoOptTabuList : public moTabuList
-{
-public :
-
- bool operator () (const TwoOpt & __move, const Route & __sol) ;
-
- void add (const TwoOpt & __move, const Route & __sol) ;
-
- void update () ;
-
- void init () ;
-
-private :
-
- std :: vector > tabu_span ;
-
-} ;
+class TwoOptTabuList : public moTabuList
+ {
+ public :
+
+ bool operator () (const TwoOpt & __move, const Route & __sol) ;
+
+ void add (const TwoOpt & __move, const Route & __sol) ;
+
+ void update () ;
+
+ void init () ;
+
+ private :
+
+ std :: vector > tabu_span ;
+
+ } ;
#endif