75 lines
3.0 KiB
C++
75 lines
3.0 KiB
C++
#include "common.h"
|
|
|
|
using ELS = rosa::SkelEls<
|
|
tsp::Solution,
|
|
Descent,
|
|
Move2Opt, Descent, FN(selectMin)
|
|
>;
|
|
|
|
using GRASPxELS = rosa::SkelGrasp<
|
|
tsp::Problem, tsp::Solution,
|
|
RGreedy<tsp::Solution>, ELS,
|
|
FN(selectMin)
|
|
>;
|
|
|
|
tsp::Solution sk_seq(tsp::Problem const& p, RNG&, Arguments const& args) {
|
|
auto graspEls = alsk::implement<alsk::exec::Sequential, GRASPxELS>();
|
|
graspEls.executor.repeatability.upTo(4);
|
|
graspEls.state.context.seed = args.seed;
|
|
graspEls.executor.cores = 1;
|
|
graspEls.skeleton.task.task<0>() = rgreedy();
|
|
graspEls.skeleton.task.task<1>().task<1>().n = ELS_ITER_MAX;
|
|
graspEls.skeleton.task.task<1>().task<1>().task.n = ELS_GEN;
|
|
graspEls.skeleton.n = GRASP_N;
|
|
|
|
return graspEls(p);
|
|
}
|
|
|
|
tsp::Solution sk_par_firstlevel(tsp::Problem const& p, RNG&, Arguments const& args) {
|
|
auto graspEls = alsk::implement<alsk::exec::FirstLevelEqui, GRASPxELS>();
|
|
graspEls.executor.repeatability.upTo(4);
|
|
graspEls.state.context.seed = args.seed;
|
|
graspEls.executor.cores = NTHREADS;
|
|
graspEls.skeleton.task.task<0>() = rgreedy();
|
|
graspEls.skeleton.task.task<1>().task<1>().n = ELS_ITER_MAX;
|
|
graspEls.skeleton.task.task<1>().task<1>().task.n = ELS_GEN;
|
|
graspEls.skeleton.n = GRASP_N;
|
|
|
|
return graspEls(p);
|
|
}
|
|
|
|
tsp::Solution sk_par_staticpool(tsp::Problem const& p, RNG&, Arguments const& args) {
|
|
auto graspEls = alsk::implement<alsk::exec::StaticPool, GRASPxELS>();
|
|
graspEls.state.context.seed = args.seed;
|
|
graspEls.executor.cores = NTHREADS;
|
|
graspEls.skeleton.task.task<0>() = rgreedy();
|
|
graspEls.skeleton.task.task<1>().task<1>().n = ELS_ITER_MAX;
|
|
graspEls.skeleton.task.task<1>().task<1>().task.n = ELS_GEN;
|
|
graspEls.skeleton.n = GRASP_N;
|
|
|
|
return graspEls(p);
|
|
}
|
|
|
|
tsp::Solution sk_par_dynamicpool(tsp::Problem const& p, RNG&, Arguments const& args) {
|
|
auto graspEls = alsk::implement<alsk::exec::DynamicPool, GRASPxELS>();
|
|
graspEls.state.context.seed = args.seed;
|
|
graspEls.executor.cores = NTHREADS;
|
|
graspEls.skeleton.task.task<0>() = rgreedy();
|
|
graspEls.skeleton.task.task<1>().task<1>().n = ELS_ITER_MAX;
|
|
graspEls.skeleton.task.task<1>().task<1>().task.n = ELS_GEN;
|
|
graspEls.skeleton.n = GRASP_N;
|
|
|
|
return graspEls(p);
|
|
}
|
|
|
|
tsp::Solution sk_par_thread(tsp::Problem const& p, RNG&, Arguments const&) {
|
|
auto graspEls = alsk::implement<alsk::exec::StaticThread, GRASPxELS>();
|
|
graspEls.executor.cores = NTHREADS;
|
|
graspEls.skeleton.task.task<0>() = rgreedy();
|
|
graspEls.skeleton.task.task<1>().task<1>().n = ELS_ITER_MAX;
|
|
graspEls.skeleton.task.task<1>().task<1>().task.n = ELS_GEN;
|
|
graspEls.skeleton.n = GRASP_N;
|
|
|
|
return graspEls(p);
|
|
}
|