Add policy and element of policy for migration
This commit is contained in:
parent
4ec6e3f606
commit
2cd7f1f423
6 changed files with 202 additions and 6 deletions
61
smp/src/PPE.h
Normal file
61
smp/src/PPE.h
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
<PPE.h>
|
||||
Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2012
|
||||
|
||||
Alexandre Quemy, Thibault Lasnier - INSA Rouen
|
||||
|
||||
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 PPE_H_
|
||||
#define PPE_H_
|
||||
|
||||
|
||||
template<class... Arg> class Loop;
|
||||
|
||||
template<class T, class... Arg>
|
||||
class Loop<T,Arg...>
|
||||
{
|
||||
template<class U>
|
||||
U& findValueImpl(T&, Arg&... arg, std::false_type)
|
||||
{
|
||||
return Loop<Arg...>().template findValue<U>(arg...);
|
||||
}
|
||||
|
||||
template<class U>
|
||||
U& findValueImpl(T& t, Arg&... arg, std::true_type)
|
||||
{
|
||||
return t;
|
||||
}
|
||||
|
||||
public:
|
||||
template<class U>
|
||||
U& findValue(T& t, Arg&... arg)
|
||||
{
|
||||
typedef typename std::is_base_of<U,T>::type tag;
|
||||
return findValueImpl<U>(t,arg...,tag());
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -31,9 +31,35 @@ Contact: paradiseo-help@lists.gforge.inria.fr
|
|||
|
||||
template<template <class> class EOAlgo, class EOT>
|
||||
template<class... Args>
|
||||
paradiseo::smp::Island<EOAlgo,EOT>::Island(Args&... args) :
|
||||
algo(EOAlgo<EOT>(args...))
|
||||
paradiseo::smp::Island<EOAlgo,EOT>::Island(unsigned _popSize, eoInit<EOT>& _chromInit, eoReplacement<EOT>& _intPolicy, Policy<EOT>& _migPolicy, Args&... args) :
|
||||
pop(_popSize, _chromInit),
|
||||
algo(EOAlgo<EOT>(args...)),
|
||||
intPolicy(_intPolicy)
|
||||
{
|
||||
static_assert(std::is_base_of<eoAlgo<EOT>,EOAlgo<EOT>>::value, "Algorithm must inherits from eoAlgo<EOT>");
|
||||
static_assert(std::is_base_of<eoAlgo<EOT>,EOAlgo<EOT>>::value, "Algorithm must inherit from eoAlgo<EOT>");
|
||||
}
|
||||
|
||||
template<template <class> class EOAlgo, class EOT>
|
||||
void paradiseo::smp::Island<EOAlgo,EOT>::operator()()
|
||||
{
|
||||
algo(pop);
|
||||
}
|
||||
|
||||
template<template <class> class EOAlgo, class EOT>
|
||||
void paradiseo::smp::Island<EOAlgo,EOT>::update(eoPop<EOT>& _data)
|
||||
{
|
||||
algo(pop);
|
||||
}
|
||||
|
||||
template<template <class> class EOAlgo, class EOT>
|
||||
eoPop<EOT>& paradiseo::smp::Island<EOAlgo,EOT>::getPop()
|
||||
{
|
||||
return pop;
|
||||
}
|
||||
|
||||
template<template <class> class EOAlgo, class EOT>
|
||||
void paradiseo::smp::Island<EOAlgo,EOT>::send()
|
||||
{
|
||||
algo(pop);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,12 @@ Contact: paradiseo-help@lists.gforge.inria.fr
|
|||
#ifndef ISLAND_H_
|
||||
#define ISLAND_H_
|
||||
|
||||
#include <queue>
|
||||
#include <vector>
|
||||
#include <utility>
|
||||
|
||||
#include <eo>
|
||||
#include <policy.h>
|
||||
|
||||
namespace paradiseo
|
||||
{
|
||||
|
|
@ -42,11 +47,21 @@ class Island
|
|||
{
|
||||
public:
|
||||
template<class... Args>
|
||||
Island(Args&... args);
|
||||
Island(unsigned _popSize, eoInit<EOT>& _chromInit, eoReplacement<EOT>& _intPolicy, Policy<EOT>& _migPolicy, Args&... args);
|
||||
|
||||
void operator()();
|
||||
|
||||
void update(eoPop<EOT>& _data);
|
||||
|
||||
eoPop<EOT>& getPop();
|
||||
|
||||
protected:
|
||||
void send();
|
||||
|
||||
eoPop<EOT> pop;
|
||||
EOAlgo<EOT> algo;
|
||||
std::queue<std::pair<unsigned, eoPop<EOT>>> listImigrants;
|
||||
eoReplacement<EOT>& intPolicy;
|
||||
};
|
||||
|
||||
#include <island.cpp>
|
||||
|
|
|
|||
84
smp/src/policy.h
Normal file
84
smp/src/policy.h
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
<policy.h>
|
||||
Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2012
|
||||
|
||||
Alexandre Quemy, Thibault Lasnier - INSA Rouen
|
||||
|
||||
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 POLICY_H_
|
||||
#define POLICY_H_
|
||||
|
||||
#include <eo>
|
||||
|
||||
namespace paradiseo
|
||||
{
|
||||
namespace smp
|
||||
{
|
||||
|
||||
template <class EOT>
|
||||
class PolicyElement : public eoContinue<EOT>
|
||||
{
|
||||
public :
|
||||
PolicyElement(eoSelect<EOT>& _selection, eoContinue<EOT>& _criteria) :
|
||||
selection(_selection),
|
||||
criteria(_criteria)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool operator()(const eoPop<EOT>& _pop)
|
||||
{
|
||||
std::cout << "Policy Element" << std::endl;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected :
|
||||
eoSelect<EOT>& selection;
|
||||
eoContinue<EOT>& criteria;
|
||||
};
|
||||
|
||||
template <class EOT>
|
||||
class Policy : public eoContinue<EOT>, public std::vector<PolicyElement<EOT>>
|
||||
{
|
||||
public:
|
||||
bool operator()(const eoPop<EOT>& _pop)
|
||||
{
|
||||
for(PolicyElement<EOT>& elem : *this)
|
||||
{
|
||||
if(!elem(_pop))
|
||||
std::cout << "On lance l'emmigration" << std::endl;
|
||||
}
|
||||
|
||||
|
||||
return true; // Always return true because it never stops the algorithm
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -33,5 +33,8 @@ Contact: paradiseo-help@lists.gforge.inria.fr
|
|||
#include <thread.h>
|
||||
#include <MWModel.h>
|
||||
#include <scheduler.h>
|
||||
#include <island.h>
|
||||
#include <policy.h>
|
||||
#include <PPE.h>
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#include <island.h>
|
||||
#include <smp.h>
|
||||
#include <eo>
|
||||
|
||||
#include "smpTestClass.h"
|
||||
|
|
@ -49,7 +49,14 @@ int main(void)
|
|||
|
||||
try
|
||||
{
|
||||
Island<eoEasyEA,Indi> test(genCont, plainEval, select, transform, replace);
|
||||
// Emigration policy
|
||||
eoGenContinue<Indi> criteria(1); // We mig each gen
|
||||
Policy<Indi> pol;
|
||||
pol.push_back(PolicyElement<Indi>(select, genCont));
|
||||
|
||||
Island<eoEasyEA,Indi> test(param.popSize, chromInit, replace, pol, genCont, plainEval, select, transform, replace);
|
||||
test();
|
||||
cout << test.getPop() << endl;
|
||||
}
|
||||
catch(exception& e)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue