rosa/bench/graspels/bad_graspels.h

107 lines
2.5 KiB
C++

#ifndef ROSA_BENCH_GRASPELS_BAD_GRASPELS_H
#define ROSA_BENCH_GRASPELS_BAD_GRASPELS_H
#include <alsk/alsk.h>
namespace rosa {
/* GRASP
* loop
* * s = init()
* * s = ls(s)
* * best = select(s, best)
* ----
* return best
*/
template<typename Init, typename LS, typename Select>
using SkelNRGraspStructure =
alsk::S<alsk::FarmSel,
alsk::S<alsk::Serial, Init, LS>,
Select
>;
template<typename Problem, typename Solution, typename RNG>
using SkelNRGraspLinks =
alsk::L<alsk::FarmSel, Solution(Problem const&, RNG&),
alsk::L<alsk::Serial, alsk::arg::R<1>(alsk::arg::P<0>, alsk::arg::P<1>),
Solution(alsk::arg::P<0>, alsk::arg::P<1>),
Solution(alsk::arg::R<0> const&, alsk::arg::P<1>)
>,
Solution(Solution const&, Solution const&)
>;
/* *** */
template<
typename Problem, typename Solution, typename RNG,
typename Init, typename LS, typename Select
>
using SkelNRGrasp = alsk::BuildSkeleton<SkelNRGraspStructure, SkelNRGraspLinks>::skeleton<
tmp::Pack<Init, LS, Select>,
tmp::Pack<Problem, Solution, RNG>
>;
}
namespace rosa {
/* ELS
* best = ls(s) -- SEls
* loop -- SElsOuterLoop
* * loop -- SElsInnerLoop
* * * s = mutate(best) -- SElsGen
* * * s = ls(s)
* * * ibest = select(s, ibest)
* * ----
* * best = select(s, best) // with acceptation criteria?
* ----
* return best
*/
template<
typename InitLS, typename Mutate, typename LS,
typename InnerSelect, typename OuterSelect
>
using SkelNRElsStruct =
alsk::S<alsk::Serial,
InitLS,
alsk::S<alsk::IterSel,
alsk::S<alsk::FarmSel,
alsk::S<alsk::Serial,
Mutate, LS
>,
InnerSelect
>,
OuterSelect
>
>;
template<typename Solution, typename RNG>
using SkelNRElsLinks =
alsk::L<alsk::Serial, alsk::arg::R<1>(Solution const&, RNG&),
Solution(alsk::arg::P<0>),
alsk::L<alsk::IterSel, Solution(alsk::arg::R<0> const&, alsk::arg::P<1>),
alsk::L<alsk::FarmSel, Solution(Solution const&, alsk::arg::P<1>),
alsk::L<alsk::Serial, alsk::arg::R<1>(alsk::arg::P<0>, alsk::arg::P<1>),
Solution(alsk::arg::P<0>, alsk::arg::P<1>),
Solution(alsk::arg::R<0> const&)
>,
Solution(Solution const&, Solution const&)
>,
Solution(Solution const&, Solution const&)
>
>;
template<
typename Solution, typename RNG,
typename InitLS, typename Mutate, typename LS,
typename InnerSelect, typename OuterSelect = InnerSelect
>
using SkelNREls = alsk::BuildSkeleton<SkelNRElsStruct, SkelNRElsLinks>::skeleton<
tmp::Pack<InitLS, Mutate, LS, InnerSelect, OuterSelect>,
tmp::Pack<Solution, RNG>
>;
}
#endif