首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Gecode中使用功函数?

如何在Gecode中使用功函数?
EN

Stack Overflow用户
提问于 2018-01-15 12:15:37
回答 1查看 99关注 0票数 2

我正在尝试使用一个优点函数在我的分支在Gecode。在MPG,即Gecode手册中,描述了一个示例优点函数,以及如何将它传递给分支。但我不知道该把这个函数放在哪里。是在剧本里还是在外面?现在,我已经把它放在复制函数旁边,等等,我找不到一个人使用优点函数的示例代码。

我得到以下错误:

代码语言:javascript
复制
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   

这是我正在尝试的代码:

代码语言:javascript
复制
    // ...
    branch(*this, workers, BOOL_VAR_MERIT_MIN(m), BOOL_VAL_MAX());
}

auto m = [](const Space& home, BoolVar x, int i) {
    return i;
}
// ...

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-31 03:02:15

根据Gecode文档,优点函数应该返回一个双倍。正如BoolBranchMerit类型定义所建议的那样

代码语言:javascript
复制
typedef std::function<double(const Space& home, BoolVar x, int i)> Gecode::BoolBranchMerit

为了安全起见,还可以将m声明为Gecode::BoolBranchMerit。因此,我认为以下几点应该解决您的例子:

代码语言:javascript
复制
    // ...
    branch(*this, workers, BOOL_VAR_MERIT_MIN(m), BOOL_VAL_MAX());
}

BoolBranchMerit m = [](const Space& home, BoolVar x, int i) -> double {
    return (double) i;
}
// ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48262858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档