勇敢/谨慎推理的人

时间:2019-04-14 12:54:11

标签: reasoning logic-programming answer-set-programming clingo

在Clingo指南中,引入了两种模式,称为谨慎模式和勇敢模式,如下所示:

  

勇敢计算某人的勇敢后果(所有答案集的总和)   逻辑程序。

     

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

指南中未提供更多信息。我尝试了一些示例,但在理解该问题时遇到了麻烦。

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

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

运行不带模式参数的Clingo将给出正确的答案集:

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

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

同样,在谨慎的情况下,预期结果为空。

但是,Clingo进行勇敢推理的实际结果是:

  

clingo版本5.3.0

     

从test / cautious_reasoning.lp读取

     

解决...

     

答案:1

     

q

     

后果:[1; 2]

     

答案:2

     

q p

     

后果:[2; 2]

     

满意

     

型号:2

     

勇敢:是

     

后果:2

     

通话次数:1

     

时间:0.006秒(解决:0.00秒,第一模式:0.00秒未饱和:0.00秒)

     

CPU时间:0.002s

对于谨慎的情况:

  

clingo版本5.3.0

     

从test / cautious_reasoning.lp读取

     

解决...

     

答案:1

     

q

     

后果:[0; 1]

     

答案:2

     

后果:[0; 0]

     

满意

     

型号:2

     

谨慎:是

     

后果:0

     

通话次数:1

     

时间:0.001秒(解决:0.00秒,第一模式:0.00秒未饱和:0.00秒)

     

CPU时间:0.001秒

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

1 个答案:

答案 0 :(得分:1)

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

方括号[d;p]中的数字具有以下含义:每个模型的clingo调用TextOutput::printMeta,它会打印一对具​​有明确结果[d;p]的整数dOutput::numCons计算出的剩余可能后果p

编辑:最后一个答案将为您提供最终结果,即输入程序的勇敢/谨慎后果。如果您只关心最终结果,则可以像这样调用clingo来获得勇敢的结果(例如,程序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.的谨慎后果(即空集),您只需要在谨慎的枚举模式下启动clingo:

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