From 270d8ebf8c037f50faa0d5fbe4770715c11313a8 Mon Sep 17 00:00:00 2001 From: jhumeau Date: Fri, 13 Mar 2009 10:28:57 +0000 Subject: [PATCH] git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@1547 331e1502-861f-0410-8da2-ba01fb791d7f --- .../branches/MOLS/src2/eoTenTimeContinue.h | 98 ++++++++ .../branches/MOLS/src2/moeoNewArchive.h | 226 ++++++++++++++++++ contribution/branches/MOLS/src2/moeoPopLS.h | 51 ++++ .../branches/MOLS/src2/moeoRestartLS.h | 113 +++++++++ 4 files changed, 488 insertions(+) create mode 100755 contribution/branches/MOLS/src2/eoTenTimeContinue.h create mode 100755 contribution/branches/MOLS/src2/moeoNewArchive.h create mode 100755 contribution/branches/MOLS/src2/moeoPopLS.h create mode 100755 contribution/branches/MOLS/src2/moeoRestartLS.h diff --git a/contribution/branches/MOLS/src2/eoTenTimeContinue.h b/contribution/branches/MOLS/src2/eoTenTimeContinue.h new file mode 100755 index 000000000..f8d4e450c --- /dev/null +++ b/contribution/branches/MOLS/src2/eoTenTimeContinue.h @@ -0,0 +1,98 @@ +#ifndef _eoTenTimeContinue_h +#define _eoTenTimeContinue_h + +#include +#include +#include +#include +#include + +template< class EOT> +class eoTenTimeContinue: public eoContinue +{ +public: + + eoTenTimeContinue(unsigned int _maxTime, std::string _fileName, moeoArchive & _arch) : + start(time(0)), maxTime(_maxTime), id(1), fileName(_fileName), arch(_arch) {} + + + // _pop must be an archive + virtual bool operator() (const eoPop & _pop) + { + unsigned int diff = (unsigned int) difftime(time(0), start); + if (diff >= (id * maxTime/10) ) + { + time_t begin=time(0); + save(_pop); + id++; + start= start - (time(0)-begin); + //operator()(_pop); + } + if (diff >= maxTime) + { + return false; + } + return true; + } + + + virtual std::string className(void) const + { + return "eoTenTimeContinue"; + } + + + void readFrom (std :: istream & __is) + { + + __is >> start; + } + + + void printOn (std :: ostream & __os) const + { + + __os << start << ' ' << std :: endl; + } + + +private: + + time_t start; + unsigned int maxTime; + unsigned int id; + std::string fileName; + moeoArchive & arch; + + + void save(const eoPop & _pop) + { + // update the archive + arch(_pop); + // save the archive contents in a file + std::string tmp = fileName; + std::ostringstream os; + os << id; + tmp += '.'; + tmp += os.str(); + std::ofstream outfile(tmp.c_str()); +// std::cout << "save " << tmp << " - " << difftime(time(0), start) << std::endl; + unsigned int nObj = EOT::ObjectiveVector::nObjectives(); + for (unsigned int i=0; i +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* 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 MOEONEWARCHIVE_H_ +#define MOEONEWARCHIVE_H_ + +#include +#include +#include + +template < class MOEOT > +class moeoNewArchive : public moeoArchive < MOEOT > +{ +public: + + using moeoArchive < MOEOT > :: size; + using moeoArchive < MOEOT > :: operator[]; + using moeoArchive < MOEOT > :: back; + using moeoArchive < MOEOT > :: pop_back; + + + /** + * The type of an objective vector for a solution + */ + typedef typename MOEOT::ObjectiveVector ObjectiveVector; + + + /** + * Default ctor. + * The moeoObjectiveVectorComparator used to compare solutions is based on Pareto dominance + */ + moeoNewArchive() : moeoArchive < MOEOT >(), comparator(paretoComparator) + {} + + + /** + * Ctor + * @param _comparator the moeoObjectiveVectorComparator used to compare solutions + */ + moeoNewArchive(moeoObjectiveVectorComparator < ObjectiveVector > & _comparator) : eoPop < MOEOT >(), comparator(_comparator) + {} + + + /** + * Returns true if the current archive dominates _objectiveVector according to the moeoObjectiveVectorComparator given in the constructor + * @param _objectiveVector the objective vector to compare with the current archive + */ + bool dominates (const ObjectiveVector & _objectiveVector) const + { + for (unsigned int i = 0; i & _pop) + { + bool res = false; + for (unsigned int i=0; i<_pop.size(); i++) + { + res = (*this).update(_pop[i]) || res; + } + return res; + } + + + /** + * Returns true if the current archive contains the same objective vectors than the given archive _arch + * @param _arch the given archive + */ + bool equals (const moeoArchive < MOEOT > & _arch) + { + for (unsigned int i=0; i & comparator; + /** A moeoObjectiveVectorComparator based on Pareto dominance (used as default) */ + moeoParetoObjectiveVectorComparator < ObjectiveVector > paretoComparator; + + + /** + * Updates the archive with a given individual _moeo *** NEW *** + * @param _moeo the given individual + */ + bool update(const MOEOT & _moeo) + { + // first step: removing the dominated solutions from the archive + for (unsigned int j=0; j +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* 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 use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* 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 MOEOPOPLS_H_ +#define MOEOPOPLS_H_ + +#include + +/** + * Abstract class for Population based multi-objective local search. + */ +template < class Move > +class moeoPopLS : public moeoPopAlgo < typename Move::EOType > + {}; + +#endif /*MOEOPOPLS_H_*/ diff --git a/contribution/branches/MOLS/src2/moeoRestartLS.h b/contribution/branches/MOLS/src2/moeoRestartLS.h new file mode 100755 index 000000000..e178bc261 --- /dev/null +++ b/contribution/branches/MOLS/src2/moeoRestartLS.h @@ -0,0 +1,113 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* 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 use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* 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 _MOEORESTARTLS_H +#define _MOEORESTARTLS_H + +#include +#include +#include +#include +#include +#include + +template < class Move > +class moeoRestartLS : public moeoPopLS < Move > +{ +public: + + typedef typename Move::EOType MOEOT; + + moeoRestartLS( + eoInit < MOEOT > & _init, + eoEvalFunc < MOEOT > & _eval, + eoContinue < MOEOT > & _continuator, + moeoPopNeighborhoodExplorer < Move > & _explorer, + moeoUnivisitedSelection < Move > & _select, + moeoArchive < MOEOT > & _globalArchive, + std::string _fileName) : + init(_init), eval(_eval), continuator(_continuator), ls(continuator, _eval, internalArchive, _explorer, _select), globalArchive(_globalArchive), fileName(_fileName), count(0) {} + + + virtual void operator()(eoPop & _pop) + { + do + { + internalArchive.resize(0); + for (unsigned int i=0; i<_pop.size(); i++) + { + init(_pop[i]); + _pop[i].invalidateObjectiveVector(); + eval(_pop[i]); + } + ls(_pop); + count++; + globalArchive(internalArchive); + } while (continuator(globalArchive)); + save(); +// std::cout << "Final archive\n"; +// globalArchive.sortedPrintOn(std::cout); +// std::cout << std::endl; + } + + +protected: + + eoInit < MOEOT > & init; + eoEvalFunc < MOEOT > & eval; + eoContinue < MOEOT > & continuator; + moeoNewArchive < MOEOT > internalArchive; + moeoUnifiedDominanceBasedLS < Move > ls; + moeoArchive < MOEOT > & globalArchive; + std::string & fileName; + unsigned int count; + + + void save() + { + // save count in a file + std::string tmp = fileName; + tmp += ".stat"; + std::ofstream outfile(tmp.c_str()); + outfile << count << std::endl; + outfile.close(); + } + +}; + +#endif /*_MOEORESTARTLS_H*/