5 #include <boost/asio/spawn.hpp> 6 #include <boost/interprocess/sync/interprocess_semaphore.hpp> 16 template <
typename Res,
typename Params>
19 std::function<Res(
const std::list<Res>&)> accumulate;
20 std::vector<Params> params;
21 std::vector<std::list<Res>> results;
22 boost::interprocess::interprocess_semaphore ready;
23 boost::interprocess::interprocess_semaphore processed;
25 std::atomic<bool> last;
29 std::vector<Params>
get_parameters(boost::asio::yield_context yield);
31 boost::asio::yield_context yield);
32 void run(
int i,
int nb_iterations,
33 const std::vector<Params>& population,
34 std::vector<Res>& results);
37 template <
typename Res,
typename Params>
39 : accumulate(accumulate),
40 ready(0), processed(0), last(false)
44 template <
typename Res,
typename Params>
50 template <
typename Res,
typename Params>
57 template <
typename Res,
typename Params>
59 boost::asio::yield_context)
63 if (last) stop =
true;
66 template <
typename Res,
typename Params>
68 const std::vector<Params>& population,
69 std::vector<Res>& res)
72 for (
const auto& p : population)
74 params.emplace_back(p);
77 if (i == nb_iterations) last =
true;
79 for (
unsigned int i = 0; i < results.size(); ++i)
81 res[i] = accumulate(results[i]);
85 template <
typename Res,
typename Params>
87 std::function<Res(
const std::list<Res>&)> accumulate,
88 int nb_eval_by_parameter = 1,
int nb_eval_by_slave = 1)
90 auto fitness = std::make_shared<distributed_fitness<Res, Params>>(accumulate);
101 return std::accumulate(l.begin(), l.end(), T{}, std::plus<T>()) / (
double)l.size();
void set_results(std::vector< std::list< Res >> res, boost::asio::yield_context yield)
Definition: fitness.hpp:58
Definition: fitness.hpp:14
void run(Client client)
Definition: master.hpp:159
Definition: fitness.hpp:17
bool finished()
Definition: fitness.hpp:45
std::vector< Params > get_parameters(boost::asio::yield_context yield)
Definition: fitness.hpp:51
void run(int i, int nb_iterations, const std::vector< Params > &population, std::vector< Res > &results)
Definition: fitness.hpp:67
Definition: master.hpp:15
double mean_score(const std::list< T > &l)
Definition: fitness.hpp:99
std::shared_ptr< distributed_fitness< Res, Params > > make_distributed_fitness(int port, std::function< Res(const std::list< Res > &)> accumulate, int nb_eval_by_parameter=1, int nb_eval_by_slave=1)
Definition: fitness.hpp:86
distributed_fitness(std::function< Res(const std::list< Res > &)> accumulate)
Definition: fitness.hpp:38