【问题标题】:Newbie questions on Answer Set Programming关于答案集编程的新手问题
【发布时间】:2015-02-04 09:33:52
【问题描述】:

我对 Clingo(和逻辑编程)完全陌生,我正在寻找实现以下基本约束的最佳方式

第一季度。我有一个谓词selected(T),其中 T 的范围从 1 到 N=5;如何指定 至少存在一个 T 使得 selected(T) ?

第二季度。我有一个二元谓词wrap(E,T),其中 E、T 的范围从 1 到 M、N;如何指定 对于每个 E 至少存在一个 T 这样 wrap(E,T) ?

第三季度。我如何指定如果selected(a) OR selected(b) 那么selected(c) 必须为假

我其实用了两行代码,不过可能还有更好的办法:

  :- selected(c), selected(a) .
  :- selected(c), selected(b) .

第四季度。如何指定如果某个条件 C(A) 为真,那么两个一元谓词 p1(A) 和 p2(A) 必须具有相同的值?

我其实用了两行代码:

p1(A) :- C(A), p2(A)
      :- C(A), not p2(A), p1(A)

Q5。你推荐什么书来很好地介绍答案集编程?

【问题讨论】:

  • 哇,问题太多了!我建议您将它们分开并分别询问,否则您可能会因为过于宽泛而关闭这个问题。
  • @shree.pat18:我很确定所有问题都有一个非常简洁的答案:-)

标签: answer-set-programming clingo


【解决方案1】:

第一季度:

%%%% Config
#const n = 5.
%%%% Code
% selected is not an empty predicate
1 { selected(1..n) }.

第二季度:

%%%% Config
%% N
#const n = 5.
%% M
#const m = 4.

%%%% Helpers
%% Ts
t(1..n).
%% Es
e(1..m).

%%%% Code
% there is an E, then there must be at least one
% wrap(E,T) where T is from t
1 { wrap(E, T) : t(T) } :- e(E).

第三季度:

:- selected(c), selected(a;b).

Q4:我其实是这么想的

:- c(A), p1(A)!=p2(A).

可以,但显然不行。我认为最清晰的写法是

:- c(A), not p1(A), p2(A).
:- c(A), p1(A), not p2(A).

虽然我对“不”的使用不满意。也许最近使用过 ASP 的人记得一个更好的解决方案。或者,您可以将 p1 和 p2 扩展到二进制谓词并编写

:- c(A), p1(A,P1), p2(A,P2), P1!=P2.

Q5:不幸的是,我认为没有好的 ASP 书籍。也就是说,我读过的绝对最好的一本书是常见的嫌疑人 Gebser、Kaminski、Kaufmann、Schaub 的“实践中的答案集求解”。在阅读与 potassco 收藏相关的材料时,您需要在 gringo 3 和 gringo 4 语言差异之间进行调整,官方手册没有很好地解释这一点,我见过的任何其他资源也没有。

编辑:现在有一个 Potassco 工具的新手册,其中包含 clasp 3 和 gringo/cligo 4.5 的最新语法,在这里找到它:http://sourceforge.net/projects/potassco/files/guide/2.0/

【讨论】:

  • 感谢您的快速回复!!!对于 Q4 我的意思是,如果 C(A) 持有 p1(A),p2(A) 既为真又为假(或以另一种形式 C(A) -> ( p1(A) p2( S)))。 Q3:我觉得很奇怪,没有办法进行简洁的 OR(这很常见):-S Q1,Q2:不错! Q5:确实,我已经对在 gringo 4 中消失的琐碎 #hide 遇到了一些麻烦 :-) :-) 你还知道一个专门的论坛,欢迎此类问题/帮助请求吗?
  • 我编辑了上面的答案。我不知道除此之外的任何论坛。你可能会发现hakank.org/answer_set_programming 是一个很有价值的资源,因为目前,除了上面提到的书之外,学习 ASP 的最佳方法是阅读其他人制作的编码。我还建议对您的解决方案进行基准测试,以找出什么是快速的,什么不是。另请查看clingo --help=3 输出。而gringo -t 是无价的。
  • 一个新的 Potassco 工具指南 2.0 可用,我将它添加到答案中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 2022-01-11
  • 2020-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多