我如何在 Gecode 中使用评价函数?
How do I use a Merit function in Gecode?
我正在尝试为我在 Gecode 中的分支使用评价函数。在 MPG Gecode 手册中,陈述了一个评价函数示例,以及如何将其传递给分支。但我无法弄清楚将功能放在哪里。它应该在脚本内部还是外部?现在我把它放在复制函数等旁边。我找不到任何有人使用评价函数的示例代码。
我收到以下错误:
program.cpp(247): error C2059: syntax error: '}'
program.cpp(247): error C2853: 'm': a non-static data member cannot have a type that contains 'auto'
program.cpp(259): fatal error C1004: unexpected end-of-file found
这是我正在尝试的代码:
// ...
branch(*this, workers, BOOL_VAR_MERIT_MIN(m), BOOL_VAL_MAX());
}
auto m = [](const Space& home, BoolVar x, int i) {
return i;
}
// ...
我知道做一个只有 returns 索引的评价函数是愚蠢的,我只是想在做我想做的事情之前让最简单的评价函数起作用。
根据 Gecode documentation 评价函数应该 return 加倍。正如 BoolBranchMerit
的类型定义所建议的:
typedef std::function<double(const Space& home, BoolVar x, int i)> Gecode::BoolBranchMerit
为了安全起见,您可能还想将 m
声明为 Gecode::BoolBranchMerit
。所以我认为以下内容应该可以解决您的示例:
// ...
branch(*this, workers, BOOL_VAR_MERIT_MIN(m), BOOL_VAL_MAX());
}
BoolBranchMerit m = [](const Space& home, BoolVar x, int i) -> double {
return (double) i;
}
// ...
我正在尝试为我在 Gecode 中的分支使用评价函数。在 MPG Gecode 手册中,陈述了一个评价函数示例,以及如何将其传递给分支。但我无法弄清楚将功能放在哪里。它应该在脚本内部还是外部?现在我把它放在复制函数等旁边。我找不到任何有人使用评价函数的示例代码。
我收到以下错误:
program.cpp(247): error C2059: syntax error: '}'
program.cpp(247): error C2853: 'm': a non-static data member cannot have a type that contains 'auto'
program.cpp(259): fatal error C1004: unexpected end-of-file found
这是我正在尝试的代码:
// ...
branch(*this, workers, BOOL_VAR_MERIT_MIN(m), BOOL_VAL_MAX());
}
auto m = [](const Space& home, BoolVar x, int i) {
return i;
}
// ...
我知道做一个只有 returns 索引的评价函数是愚蠢的,我只是想在做我想做的事情之前让最简单的评价函数起作用。
根据 Gecode documentation 评价函数应该 return 加倍。正如 BoolBranchMerit
的类型定义所建议的:
typedef std::function<double(const Space& home, BoolVar x, int i)> Gecode::BoolBranchMerit
为了安全起见,您可能还想将 m
声明为 Gecode::BoolBranchMerit
。所以我认为以下内容应该可以解决您的示例:
// ...
branch(*this, workers, BOOL_VAR_MERIT_MIN(m), BOOL_VAL_MAX());
}
BoolBranchMerit m = [](const Space& home, BoolVar x, int i) -> double {
return (double) i;
}
// ...