2

我正在尝试使用评价函数在 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;
}
// ...

我知道做一个只返回索引的评价函数是愚蠢的,我只是想在做我想做的事情之前让最简单的评价函数工作。

4

1 回答 1

1

根据Gecode 文档,评价函数应该返回一个双精度值。正如 的类型定义所建议的BoolBranchMerit

typedef std::function<double(const Space& home, BoolVar x, int i)> Gecode::BoolBranchMerit

为了安全起见,您可能还想声明mGecode::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;
}
// ...
于 2018-01-31T03:02:15.027 回答