Brave/Cautious clingo 推理
Brave/Cautious reasoning in clingo
在Clingo指南中,介绍了谨慎和勇敢两种模式如下:
brave Compute the brave consequences (union of all answer sets) of a
logic program.
cautious Compute the cautious consequences (intersection of all answer sets) of a logic program.
指南中未提供更多信息。我尝试了一些示例,但无法理解问题。
我尝试运行以下简单的ASP程序:
p :- not q.
q :- not p.
运行 没有模式参数的 Clingo 将给出正确的答案集:
answer 1:{p}
answer 2:{q}
如指南所述,如果运行在勇敢模式下,将计算所有答案集的并集,我应该得到结果{p, q}
。
同样,对于谨慎的情况,预期结果为空。
然而,Clingo勇敢推理的实际结果是:
clingo version 5.3.0
Reading from test/cautious_reasoning.lp
Solving...
Answer: 1
q
Consequences: [1;2]
Answer: 2
q p
Consequences: [2;2]
SATISFIABLE
Models : 2
Brave : yes
Consequences : 2
Calls : 1
Time : 0.006s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time : 0.002s
对于谨慎的情况:
clingo version 5.3.0
Reading from test/cautious_reasoning.lp
Solving...
Answer: 1
q
Consequences: [0;1]
Answer: 2
Consequences: [0;0]
SATISFIABLE
Models : 2
Cautious : yes
Consequences : 0
Calls : 1
Time : 0.001s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time : 0.001s
那么[]
中的数字代表什么?如何理解Clingo中谨慎勇敢的推理模式?
当您使用枚举算法 --enum-mode brave
或 --enum-mode cautious
调用 clingo 时,出现在每个枚举模型中的原子 "converge" 分别为勇敢或谨慎的结果集。也就是说,在 brave
模式下,原子将单调增加,而在 cautious
模式下,原子将单调减少。将其视为 "running" 联合或交集,以产生勇敢和谨慎的结果,resp.
方括号[d;p]
内的数字含义如下:clingo调用TextOutput::printMeta
for each model, which prints a pair of integers [d;p]
of definite consequences d
and remaining possible consequences p
as computed by Output::numCons
.
编辑:最后的答案会给你最后的结果,即输入程序的brave/cautious结果。如果您只关心最终结果,您可以像这样调用 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
在Clingo指南中,介绍了谨慎和勇敢两种模式如下:
brave Compute the brave consequences (union of all answer sets) of a logic program.
cautious Compute the cautious consequences (intersection of all answer sets) of a logic program.
指南中未提供更多信息。我尝试了一些示例,但无法理解问题。
我尝试运行以下简单的ASP程序:
p :- not q.
q :- not p.
运行 没有模式参数的 Clingo 将给出正确的答案集:
answer 1:{p}
answer 2:{q}
如指南所述,如果运行在勇敢模式下,将计算所有答案集的并集,我应该得到结果{p, q}
。
同样,对于谨慎的情况,预期结果为空。
然而,Clingo勇敢推理的实际结果是:
clingo version 5.3.0
Reading from test/cautious_reasoning.lp
Solving...
Answer: 1
q
Consequences: [1;2]
Answer: 2
q p
Consequences: [2;2]
SATISFIABLE
Models : 2
Brave : yes
Consequences : 2
Calls : 1
Time : 0.006s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time : 0.002s
对于谨慎的情况:
clingo version 5.3.0
Reading from test/cautious_reasoning.lp
Solving...
Answer: 1
q
Consequences: [0;1]
Answer: 2
Consequences: [0;0]
SATISFIABLE
Models : 2
Cautious : yes
Consequences : 0
Calls : 1
Time : 0.001s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time : 0.001s
那么[]
中的数字代表什么?如何理解Clingo中谨慎勇敢的推理模式?
当您使用枚举算法 --enum-mode brave
或 --enum-mode cautious
调用 clingo 时,出现在每个枚举模型中的原子 "converge" 分别为勇敢或谨慎的结果集。也就是说,在 brave
模式下,原子将单调增加,而在 cautious
模式下,原子将单调减少。将其视为 "running" 联合或交集,以产生勇敢和谨慎的结果,resp.
方括号[d;p]
内的数字含义如下:clingo调用TextOutput::printMeta
for each model, which prints a pair of integers [d;p]
of definite consequences d
and remaining possible consequences p
as computed by Output::numCons
.
编辑:最后的答案会给你最后的结果,即输入程序的brave/cautious结果。如果您只关心最终结果,您可以像这样调用 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