2

在 Clingo 指南中,有两种模式分别称为谨慎和勇敢,介绍如下:

勇敢计算逻辑程序的勇敢结果(所有答案集的联合)。

谨慎计算逻辑程序的谨慎后果(所有答案集的交集)。

指南中没有提供更多信息。我尝试了一些示例,但无法理解该问题。

我尝试运行以下简单的 ASP 程序:

p :- not q.
q :- not p.

在没有模式参数的情况下运行 Clingo 将给出正确的答案集:

answer 1:{p}
answer 2:{q}

如指南中所述,如果在勇敢模式下运行,它将计算所有答案集的并集,我应该得到结果{p, q}

同样,对于谨慎的情况,预期结果为空。

然而,Clingo 勇敢推理的实际结果是:

紧贴版本 5.3.0

从 test/cautious_reasoning.lp 读取

解决...

答案:1

q

后果:[1;2]

答案:2

qp

后果:[2;2]

满意

型号:2

勇敢:是的

后果:2

来电:1

时间:0.006s(求解:0.00s 1st Model:0.00s Unsat:0.00s)

CPU时间:0.002s

对于谨慎的情况:

紧贴版本 5.3.0

从 test/cautious_reasoning.lp 读取

解决...

答案:1

q

后果:[0;1]

答案:2

后果:[0;0]

满意

型号:2

谨慎:是的

后果:0

来电:1

时间:0.001s(求解:0.00s 1st Model:0.00s Unsat:0.00s)

CPU时间:0.001s

那么里面的数字[]代表什么?如何理解 Clingo 中谨慎勇敢的推理模式?

4

1 回答 1

3

--enum-mode brave当您使用枚举算法或调用 clgo 时--enum-mode cautious,每个枚举模型中出现的原子“收敛”到一组勇敢或谨慎的结果,分别。也就是说,在brave模式中,原子将单调增加,而在cautious模式中,原子将单调减少。将其视为勇敢和谨慎后果的“运行”工会或交叉点,分别。

方括号内的数字[d;p]具有以下含义: cligo 调用TextOutput::printMeta每个模型,该模型打印一对整数,其中包含由 计算[d;p]的确定结果d和剩余可能结果。pOutput::numCons

编辑:最后的答案会给你最终的结果,即输入程序的勇敢/谨慎后果。如果您只关心最终结果,您可以像这样调用 clgo 来获得勇敢的结果(例如 program a | b | c | d.):

% echo 'a|b|c|d.' | clingo -e brave | grep -A1 '^Answer:' | tail -n -1
b c d a

而对于程序的谨慎后果a | b | c | d.(即空集),您只需要在谨慎枚举模式下启动 cligo:

% echo 'a|b|c|d.' | clingo -e cautious | grep -A1 '^Answer:' | tail -n -1

于 2019-04-14T19:36:53.243 回答