问题标签 [answer-set-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
175 浏览

answer-set-programming - lparse/cligo:怎么说 AllOf(a,b,c) :- 条件?

以下使一个或多个文字为真:

在上面的 a,b,c,condition 是一个有效的模型,但也是 (a,condition), (a,b,condition) 等。我希望所有的 a,b,c 都是真的,总是,如果条件是真的。

我可以编写以下内容来强制 a、b、c 始终为真。

但是对于复杂的规则,这些变得非常冗长且容易出错。

0 投票
1 回答
74 浏览

answer-set-programming - lparse/cligo:如何以紧凑的形式表达以下内容?

我想以紧凑的形式表达它:

但是,这是一个语法错误。这样做的正确方法是什么?

0 投票
1 回答
351 浏览

answer-set-programming - Clingo/ASP:在故事生成器中生成角色的最佳方式

我正在尝试用 Clingo 编写故事生成器。

我想说的是“如果现有角色生出新角色,就可以诞生新角色。” 我将新字符定义为entity(<int\>),这是我能想到的表示实体的最佳方式。我无法对此进行硬编码,因为可以在故事中创建不同数量的实体。

code的是:

但是,输出是:

entity(2, 1)从未被创建,也不是entity(3, 2)or entity(4, 3)

我究竟做错了什么?有一个更好的方法吗?

0 投票
1 回答
664 浏览

answer-set-programming - 在 Clingo 中对多个值求和

我正在计算 cligo 中多个字段的总和:

这行得通。输出是:

但是,这很乏味。我非常想要的是一次总结它们(不工作):

输出是:

有没有办法简化我的第一种方法?

0 投票
1 回答
52 浏览

declarative - 未派生 DLV 谓词

我有这个简单的 DLV 程序,由几个谓词和派生规则组成。其中一个规则没有被激活,我不知道为什么,因为显然所有谓词都存在。我不得不承认我不是 DLV 方面的专家,而且自从我上次使用它以来有点生疏,所以如果这太明显了,请原谅我:-/

除其他外,我有这个规则:

在这里你可以看到执行代码后我得到了什么:

./dlv -nofinitecheck model.edb rules.idb

{参与者(p1),参与者(p2),参与者(p3),价值(v1),价值(r1),价值(v2),价值(r2),价值(v3),价值(r3),连接(p1, p2), 连接(p1,p3), 连接(p2,p3), 知道(p1,v1), 知道(p1,r1), 知道(p2,v2), 知道(p2,r2), 知道(p3,v3 ), 知道(p3,r3)}

由于我有“value(v1)”和“knows(p1,v1)”和“connected(p1,p2)”,我期望程序的输出应该包含“knows(p1, chunk(v1, p1, p2) ))”。

谁能解释我为什么这没有发生?


编辑:我已经删除了所有规则并只创建了这一个

但是这个规则也没有被激活!有什么问题?我试过最简单的一个:

并且没有激活。我错过了什么?

0 投票
1 回答
381 浏览

logic-programming - 程序的答案集 - 为什么空集不是答案集?

我对答案集的定义有点困惑。

如果 S 是 P 的最小模型,则 S 是 P 的答案集。

当我有一个程序

然后我知道我的答案集必须是 {a,b},因为 a 是事实。

如果我有类似的东西会发生什么

在我找到的幻灯片中,他们声明 a 是一个答案集。但是根据我的理解,当 b = true 意味着 a = true 时,规则是满足的。

因此,如果我设置 a = false 和 b = false 那么规则也会得到满足。

为什么空集不是答案集?(因为它是 {a} 的子集)

0 投票
3 回答
750 浏览

answer-set-programming - ASP 中如何将否定理解为失败?

假设我们有以下程序:

如果我们运行 clgo 来获取程序的答案集,我们得到

我们知道grounder会先将所有变量实例化为常量,所以grounder之后的程序是:

我在Gelfond 的书中读到它给出了 3 条规则来获取答案集:

  1. 满足Π的规则。换句话说,如果你相信规则的主体,就相信它的头部。

  2. 不要相信矛盾。

  3. 坚持“理性原则”,即“什么都不相信,你不是被迫相信”。</p>

在规则中:

我们被否定为失败not holiday(tomorrow)

如本书所示:

符号not是一个新的逻辑连接词,称为默认否定,(或否定为失败);not l 通常被解读为“不相信 l 是真的”。请注意,这并不意味着 l 被认为是错误的。p一个理性的推理者既不相信陈述也不相信它的否定,这是可以想象的,实际上是很正常的¬p

那么根据规则 1,我应该相信believe in the head of a rule if you believe in its body身体not holiday(tomorrow).,因为我既不相信holiday(tomorrow).也不相信¬holiday(tomorrow).

根据答案,我应该相信¬holiday(tomorrow).

  • 那么为什么我们需要这种否定作为失败呢?
  • 我们可以只使用经典否定吗?
0 投票
1 回答
526 浏览

constraints - 无法理解 clgo 中的基数约束

我在 Clingo 中定义了图形着色问题,如下所示:

我有这样的解决方案:

我无法理解= 1代码生成部分的含义。我知道它是“设置基数”,但我不明白如何,因为代码必须在每个答案中生成七个节点。此外,以下生成器(生成所有节点组合和在一组长度 7 中选择的颜色)需要= 7

这是我正在解决的图形着色问题的图片:https ://imgur.com/a/tX7qtkJ

和坚持: https ://potassco.org/cligo/run/

0 投票
1 回答
300 浏览

answer-set-programming - 在 clgo/ASP 中 1<0 和 1=-1 是什么意思?

我以前从未使用过 clgo,而且我发现在线文档不完整(我也无法在 Potassco 论坛上发帖)。我有一段带有格式规则行的 cligo 代码

foo(L1, L2, L3) :- isa(thing,object), isa(thing, object)...

这部分代码是有道理的,但在最后一条规则之前的行尾,我的条件是 1>0、1<0 或 1==-1。我不确定它们是什么意思,因为它们似乎不遵循正常的布尔规则。有谁知道这在 clgo 中具体意味着什么?

0 投票
1 回答
177 浏览

logic - 如何表示答案集编程中要推理的未知知识?

这是要解决的问题:

如果吉姆不给他的孩子买玩具,那么吉姆的孩子就不会收到圣诞节的玩具。如果吉姆的孩子不写圣诞信,吉姆就不会给他们买玩具。吉姆的孩子们确实收到了圣诞节玩具。” 假设对这个故事的预期解释暗示吉姆的孩子们写了他们的圣诞信。

现在我想将上面的信息编码成规则和事实,以便 clgo 推断吉姆的孩子是否写了这些信。

我写的程序如下:

为简单起见,我只是假设吉姆只有一个名叫彼得的孩子。

在我自己的想法中,答案集的推理过程是:

  1. 所有事实都在答案集中,即son(peter,jim)肯定receive_toys(peter,jim)应该在答案集中。

  2. 既然receive_toys(peter,jim)在答案集中,-receive_presents(peter,jim)就不会在。因此not buy_presents(jim,peter)应该是假的,并且buy_presents(jim,peter)在答案集中。

  3. 因为buy_presents(jim,peter)在答案集中,-buy_presents(jim,peter)所以是假的。并且由于son(peter,jim)在答案集中,not write_letters(peter)将是错误的,并且write_letters(peter)将在答案集中。

所以我认为答案应该是 { son(peter,jim), receive_toys(peter,jim), buy_presents(jim,peter), write_letters(peter)}

因此我们可以得出结论是彼得确实写了这封信。

但是在 cligo 中运行它时,我得到以下信息:

我有点认为 cligo 要求首先在规则中定义每个原子操作。但是在这里我只想推理彼得是否写了这封信,所以我不能自我定义“如果 xxx,那么彼得写这封信”,因为那只是我自己在做推理部分。

如何解决答案集编程中的此类问题?