diff --git a/trunk/paradiseo-mo/src/explorer/moSimpleHCexplorer.h b/trunk/paradiseo-mo/src/explorer/moSimpleHCexplorer.h index 80cab3412..5ecba3318 100644 --- a/trunk/paradiseo-mo/src/explorer/moSimpleHCexplorer.h +++ b/trunk/paradiseo-mo/src/explorer/moSimpleHCexplorer.h @@ -143,8 +143,10 @@ public: virtual void move(EOT & _solution) { //move the solution (*best).move(_solution); + //update its fitness _solution.fitness((*best).fitness()); + }; /** diff --git a/trunk/paradiseo-mo/src/mo.h b/trunk/paradiseo-mo/src/mo.h index b81d5750a..470959f71 100755 --- a/trunk/paradiseo-mo/src/mo.h +++ b/trunk/paradiseo-mo/src/mo.h @@ -148,6 +148,8 @@ #include #include +#include +#include #include #include #include diff --git a/trunk/paradiseo-mo/src/problems/bitString/moBitNeighbor.h b/trunk/paradiseo-mo/src/problems/bitString/moBitNeighbor.h index d942eb937..73e464fa4 100644 --- a/trunk/paradiseo-mo/src/problems/bitString/moBitNeighbor.h +++ b/trunk/paradiseo-mo/src/problems/bitString/moBitNeighbor.h @@ -57,6 +57,7 @@ public: */ virtual void move(EOT & _solution) { _solution[key] = !_solution[key]; + _solution.invalidate(); } /** diff --git a/trunk/paradiseo-mo/src/problems/bitString/moPopBitNeighbor.h b/trunk/paradiseo-mo/src/problems/bitString/moPopBitNeighbor.h new file mode 100644 index 000000000..883ffa921 --- /dev/null +++ b/trunk/paradiseo-mo/src/problems/bitString/moPopBitNeighbor.h @@ -0,0 +1,119 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moPopBitNeighbor_h +#define _moPopBitNeighbor_h + +#include +#include +#include +#include +#include + +/** + * Neighbor related to a vector of Bit + */ +template< class Fitness > +class moPopBitNeighbor : public moBackableNeighbor< moPopSol > >, public moIndexNeighbor< moPopSol > > +{ +public: + typedef moPopSol > EOT ; + + using moBackableNeighbor::fitness; + using moIndexNeighbor::key; + + /** + * move the solution + * @param _solution the solution to move + */ + virtual void move(EOT & _solution) { + if(_solution.size()>0){ + size=_solution[0].size(); + _solution[key/size][key%size] = !_solution[key/size][key%size]; +// fit=_solution[key/size].fitness(); + _solution[key/size].invalidate(); +// fitSol=_solution.fitness(); + _solution.invalidate(); + } + } + + /** + * move back the solution (useful for the evaluation by modif) + * @param _solution the solution to move back + */ + virtual void moveBack(EOT & _solution) { + _solution[key/size][key%size] = !_solution[key/size][key%size]; +// _solution[key/size].fitness(fit); + } + + /** + * return the class name + * @return the class name as a std::string + */ + virtual std::string className() const { + return "moPopBitNeighbor"; + } + + /** + * Read object.\ + * Calls base class, just in case that one had something to do. + * The read and print methods should be compatible and have the same format. + * In principle, format is "plain": they just print a number + * @param _is a std::istream. + * @throw runtime_std::exception If a valid object can't be read. + */ + virtual void readFrom(std::istream& _is) { + std::string fitness_str; + int pos = _is.tellg(); + _is >> fitness_str; + if (fitness_str == "INVALID") { + throw std::runtime_error("invalid fitness"); + } + else { + Fitness repFit ; + _is.seekg(pos); + _is >> repFit; + _is >> key; + fitness(repFit); + } + } + + /** + * Write object. Called printOn since it prints the object _on_ a stream. + * @param _os A std::ostream. + */ + virtual void printOn(std::ostream& _os) const { + _os << fitness() << ' ' << key << std::endl; + } + +private: + unsigned int size; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/problems/bitString/moPopSol.h b/trunk/paradiseo-mo/src/problems/bitString/moPopSol.h new file mode 100644 index 000000000..9b6688a27 --- /dev/null +++ b/trunk/paradiseo-mo/src/problems/bitString/moPopSol.h @@ -0,0 +1,51 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moPopSol_h +#define _moPopSol_h + +#include +#include + +template +class moPopSol : public EO, public eoPop{ +public: + typedef typename EO::Fitness Fitness; + using EO::invalidate; + + virtual void printOn(std::ostream& _os) const + { + _os << (*this).size() << " " << (*this).fitness() << '\n'; + for(unsigned int i=0; i<(*this).size(); i++) + _os << (*this).operator[](i) << std::endl; + } + +}; + +#endif