c++ - 我如何在 Gecode 中使用评价函数?

标签 c++ branch auto 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;
}
// ...

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

最佳答案

根据Gecode documentation评价函数应该返回一个 double 值。正如 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;
}
// ...

关于c++ - 我如何在 Gecode 中使用评价函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48262858/

相关文章:

c++ - 加载somesound.bank并使用fmod播放c++

c++ - 如何在 Visual Studio 2008 中创建 COM DLL?

c++ - 将模拟对象作为函数的参数传递

SVN合并本地主干到分支

git - 使用 Git,显示一个分支中的所有提交,但不显示其他分支中的所有提交

c - 为什么 auto a=1;用C编译?

c++ - 是否允许在一个类中混合使用新旧 C++ 函数语法?

c++ - 这个问题中发生了运算符重载,但参数的数量和类型是相同的

c++ - 在 std::function 和 lambda 中使用自动说明符

Git 创建一个只有指定目录及其历史的新分支,然后推送到新的存储库