Clingo:怎么做 "If p causes UNSAT then q."
Clingo: How to do "If p causes UNSAT then q."
在下面的代码中
% Facts
a.
% Rules
-a :- a, not not p.
在上面添加事实 p.
会导致它成为 UNSAT。 clingo 中有没有办法添加规则来显示这一点?像
q :- Assuming p causes UNSAT.
添加规则等解决方案
{p; q} = 1.
不行。如果 p.
导致 UNSAT,它会在答案集中给出 q.
,正如我想要的那样。但是,当 p.
不会导致 UNSAT 时,它会给出 p.
和 q.
作为答案集。在 p.
不导致 UNSAT 的情况下,我不希望在答案集中出现 q.
。
我希望能够检查某些事实是否会导致某个复杂条件不成立。例如,假设问题的一部分要求您检查图形是否不包含哈密顿循环。如果图形满足条件,则找到哈密顿循环的程序将 return UNSAT,但我不希望程序结束,因为还有其他计算要做。
你或许可以把它当作一个优化问题。因此,通常是约束的东西变成了一个特殊的谓词,然后您试图将其最小化。基本上你有一些形式:
err(err1) :- some-bad-condition.
err(err2) :- some-other-bad-condition.
#minimize{ 1,XXX: err(XXX) }.
这里的 XXX
是每个错误条件的唯一标识符。优化语句找到一个模型,使 err
的数量最小化。
唯一需要注意的是,这会增加问题的复杂性;您现在正在解决优化问题而不是决策问题。在调试 asp 程序时这是一个有用的技巧,但对于 large/difficult 问题它可能太慢了。
在下面的代码中
% Facts
a.
% Rules
-a :- a, not not p.
在上面添加事实 p.
会导致它成为 UNSAT。 clingo 中有没有办法添加规则来显示这一点?像
q :- Assuming p causes UNSAT.
添加规则等解决方案
{p; q} = 1.
不行。如果 p.
导致 UNSAT,它会在答案集中给出 q.
,正如我想要的那样。但是,当 p.
不会导致 UNSAT 时,它会给出 p.
和 q.
作为答案集。在 p.
不导致 UNSAT 的情况下,我不希望在答案集中出现 q.
。
我希望能够检查某些事实是否会导致某个复杂条件不成立。例如,假设问题的一部分要求您检查图形是否不包含哈密顿循环。如果图形满足条件,则找到哈密顿循环的程序将 return UNSAT,但我不希望程序结束,因为还有其他计算要做。
你或许可以把它当作一个优化问题。因此,通常是约束的东西变成了一个特殊的谓词,然后您试图将其最小化。基本上你有一些形式:
err(err1) :- some-bad-condition.
err(err2) :- some-other-bad-condition.
#minimize{ 1,XXX: err(XXX) }.
这里的 XXX
是每个错误条件的唯一标识符。优化语句找到一个模型,使 err
的数量最小化。
唯一需要注意的是,这会增加问题的复杂性;您现在正在解决优化问题而不是决策问题。在调试 asp 程序时这是一个有用的技巧,但对于 large/difficult 问题它可能太慢了。