107 lines
2.5 KiB
C++
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
|