首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Clingo中使用否定来选择最大值

如何在Clingo中使用否定来选择最大值
EN

Stack Overflow用户
提问于 2020-05-01 21:13:08
回答 2查看 170关注 0票数 0

在prolog中,我们可以使用否定来选择元组中的最大值,如: p( X),not (p(Y),Y>X)。%在Prolog中工作,但不在Clingo中工作

如何使用Clingo表达式来获得相似的规则(如果没有大于A的数字,则A是最大值)。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-05-06 00:50:29

我想用两个替代解决方案来扩展前面的答案。关于第一个答案,我没有做任何性能比较。

  • 使用聚合,请参见Clingo User Guide

max(X) :- X= #max {Y: p(Y) }。

  • 猜测和检查方法。我们的想法是,我们猜测最大值,然后检查它是否确实是最大值。请注意,算术表达式可以写在规则的头部。

1{ max(X):p(X) } 1.

M >= X :- p(X),max(M)。

票数 1
EN

Stack Overflow用户

发布于 2020-05-05 14:21:33

以下规则可以表示如果没有比A大的数字,则A是最大

代码语言:javascript
复制
non_max(X) :- p(X), p(Y), Y > X.
max(X) :- p(X), not non_max(X).

基本上,您正在表示的规则是一个带有通用量词的规则,即

∀b∈p(b),如果a> b,则a是最大值。(1)

如果a是最大值,则∀b∈p( b ),a>b。(2)

将(2)转换为它的逆式,我们有

如果∃b∈p(b),a< b,则b不是最大值(3)

(3)的对应规则为non_max(X) :- p(X), p(Y), Y > X.

因为max和non_max是互斥的,所以我们有max(X) :- p(X), not non_max(X).

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61543172

复制
相关文章

相似问题

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