首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clingo返回最大子集

clingo返回最大子集
EN

Stack Overflow用户
提问于 2022-04-07 16:35:55
回答 1查看 55关注 0票数 0

我有以下代码:

代码语言:javascript
复制
1{p(1..10)}10.
:- p(I*2).

它显示了31个答案,但我只需要最大子集p(1) p(3) p(5) p(7) p(9).,我怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2022-05-12 11:38:36

你在寻找一个优化。最简单的修复方法是添加

代码语言:javascript
复制
#maximize{I:p(I)}.

结果是

代码语言:javascript
复制
Solving...
Answer: 1
p(9)
Optimization: -9
Answer: 2
p(5) p(9)
Optimization: -14
Answer: 3
p(7) p(9)
Optimization: -16
Answer: 4
p(5) p(7) p(9)
Optimization: -21
Answer: 5
p(1) p(5) p(7) p(9)
Optimization: -22
Answer: 6
p(3) p(5) p(7) p(9)
Optimization: -24
Answer: 7
p(1) p(3) p(5) p(7) p(9)
Optimization: -25
OPTIMUM FOUND

不要担心负分数,clingo将#maximize转换为#minimize,因此否定。那么#maximize{I:p(I)}.是做什么的呢?通常,您希望在I上最大化所有p(I),在本例中,这是I之和。只要数一数

代码语言:javascript
复制
#maximize{1,I:p(I)}.

结果是

代码语言:javascript
复制
Answer: 1
p(9)
Optimization: -1
Answer: 2
p(5) p(9)
Optimization: -2
Answer: 3
p(5) p(7) p(9)
Optimization: -3
Answer: 4
p(3) p(5) p(7) p(9)
Optimization: -4
Answer: 5
p(1) p(3) p(5) p(7) p(9)
Optimization: -5
OPTIMUM FOUND
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71785911

复制
相关文章

相似问题

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