#include "common.h" using ELS = rosa::SkelEls< tsp::Solution, Descent, Move2Opt, Descent, FN(selectMin) >; using GRASPxELS = rosa::SkelGrasp< tsp::Problem, tsp::Solution, RGreedy, ELS, FN(selectMin) >; tsp::Solution sk_seq(tsp::Problem const& p, RNG&, Arguments const& args) { auto graspEls = alsk::implement(); 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(); 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(); 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(); 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(); 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); }