问题标签 [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 投票
0 回答
110 浏览

answer-set-programming - 答案集编程“猜测”

我想从猜测块中准确地选择“步骤”项目,但是当我用基数限制猜测时我不满意。

0 投票
1 回答
1084 浏览

declarative - DLV 规则不安全

我开始使用DLV(分离数据日志),并且在运行代码时,我有一条规则报告“规则不安全”错误。规则如下:

我已阅读手册并看到“不允许循环依赖”。我想这就是我被报告错误的原因,但我不确定这个语句对 DLV 来说是如何成问题的。最终目标是在未定义谓词的情况下进行某种初始化。

更准确地说,如果没有出现带有参数 R(以及其他任何内容)的 'foo',则使用参数 R 和 1 对其进行定义。一旦定义,则不应再次触发规则。所以,在我看来,这不是一个真正的递归。

欢迎对如何解决此问题提出任何意见!


我意识到我可能需要另一个谓词来匹配规则正文中的参数 R。像这样的东西:

因为,否则将无法知道是否没有出现 foo(R, _)。我不知道我是否说清楚了。

无论如何,这也不起作用:(

0 投票
1 回答
296 浏览

prolog - Prolog - ASP '不' Prolog 否定

我在答案集编程(ASP)中有一个示例问题。当我尝试在 Prolog 中编写等效代码时,我一直被not阻塞。

这是 ASP 代码:

答案是:drive(potsdam), drive(werder), drive(berlin)

在 Prolog 中,我最初认为它就像更改not\+. 当我查询drive(X).时,它会递归生成X = potsdam答案。我知道 Prolog 和 ASP 的工作方式不同,但我就是想不通。

0 投票
2 回答
864 浏览

path - 在 DLV 中找到最短路径

我正在尝试使用 DLV 在图中以最小距离查找所有路径。假设我有以下图表:

图形

我期待获得谓词(我希望我不要跳过任何谓词):

  • 路径(a,b,1),路径(a,d,1),路径(a,e,1),路径(a,c,2)
  • 路径(b,a,1),路径(b,c,1),路径(d,d,2),路径(b,e,2)
  • 路径(c,b,1),路径(c,e,1),路径(c,a,2),路径(c,d,3)
  • 路径(d,a,1),路径(d,b,2),路径(d,e,2),路径(d,c,3)
  • 路径(e,a,1),路径(e,c,1),路径(e,d,2),路径(e,b,2)

我假设您可以向左或向右移动拱门。所以,我尝试了以下方法:

第三条规则的想法是添加 2 条现有路径,如果它们不返回 (X!=Z) 并且还没有一条路径以更短的距离连接相同的边(不是路径(X,Z,V), V < L,#int(V))。我必须添加#int(V),否则规则不安全。我不知道是否有更好的方法可以用整数值解决这个安全问题。

当我运行此代码时(使用标志 -N=5 设置 #maxint=5),我得到不应该存在的路径,例如 path(d,a,5)。我不知道问题出在#int(V) 还是其他问题上,但我不希望这些路径出现,因为我已经有了路径(d,a,1)。可能是因为#int(V) 但我不知道如何正确地做到这一点。

谁能帮我解决这个问题?提前致谢。

0 投票
1 回答
109 浏览

debugging - DLV 交互模式(调试)

我在 DLV 上工作了一段时间,当程序很大时,我发现很难遵循规则的激活。所以我去了手册并检查是否有什么可以让我这样做。

我发现的唯一一件事是前端选项 -FP 但我不确定这是否是我正在寻找的,因为手册没有提供足够的这方面的信息。所以,我做了什么来使用这个标志运行我的程序,但我收到以下错误:

背景知识不得包含聚合

该程序在没有此标志的情况下运行,我无法摆脱聚合。我也尝试了一个愚蠢的程序,但提示了不同的警告/错误:

警告:没有给出计划长度。计划长度默认为零。未指定目标查询。

这是调试 DLV 程序的正确方法吗?有办法吗?

谢谢。

0 投票
1 回答
159 浏览

list - DLV 列表组成

我想知道 DLV 中是否有一种方法可以创建一个列表,其中包含在规则中为真的所有谓词的元素。例如,如果我有以下谓词

我正在寻找的结果应该是新的谓词,其中第一个元素是第一个参数,foo第二个参数应该包含一个列表,其中包含与第一个参数关联的所有元素。经验上:

我知道有一种方法可以使用以下代码获得这些结果(还有更多):

但是我想知道是否有一种方法可以防止生成所有可能的大小从 1 到 N 的列表(N 是最终列表的元素数)。我想这样做有两个原因:(1)降低计算成本(2)防止丢弃所有不必要的谓词。

如果计算成本不是问题(可能是这种情况),我正在考虑进行以下更改,以便仅保留具有最大列表的谓词:

但是,这开始变得复杂,并显示所有最大大小的列表,而不仅仅是其中一个。我如何摆脱除一个之外的所有?我尝试生成 bar(A,P) 只有在它们不是其他 bar(A, _) 但我得到“规则不安全”的情况下。还尝试计算出现次数和出现类似问题...

最重要的是,是否有可能在没有那么多技巧的情况下一次获得我期望的结果?

任何帮助表示赞赏,

谢谢!

0 投票
0 回答
982 浏览

answer-set-programming - Clingo 答案集编程新手

我得到了以下答案集编程问题,但不确定我的答案是否正确:

  • A(X) 通常是 E(X)
  • U(X) 通常不是 E(X)
  • G(X) 通常是 E(X)
  • 每个 G(X) 都是 U(X)
  • U(X) 通常是 A(X)
  • G(t1)
  • G(t2) 而不是 E(t2)
  • U(t3)

以下是我的 Clingo 代码:

坚持 0 pm.lp 是:

不确定我的代码是否正确和完整?

0 投票
1 回答
899 浏览

answer-set-programming - 如何使用答案集编程判断图是否强连接?

我是回答集编程的新手,可以使用一些帮助。我一直在读这个,但仍然可以使用一些帮助。我将如何使用答案集编程来判断一个图是否是强连接的?

我的头脑风暴:

  • 由节点和边(即节点(1..2)、边(1,2)和边(2,1))表示的图形。

  • 现在我需要规则 "strong() :- ......" 如果图形是强连接的,那是真的。

  • 如果您可以从任何节点开始并通过沿它们指向的方向到达任何其他节点,则图是强连接的。

  • 所以我的程序需要获取每个节点 X 并沿着有向边尝试到达每个其他节点。如果它到达每个其他节点,则为 True,否则为 False。

强的() :- ?

0 投票
1 回答
325 浏览

answer-set-programming - 将 Clingo 4.5 与 Gringo 3 一起使用

我正在尝试运行PCGBook第 8 章练习中的代码。他们使用 cligo,但没有说明他们使用的是什么版本。当我从 Potassco 的 sourceforge(版本 4.5.4)下载最新版本的 Clingo 时,它给了我词法分析器错误。我认为这是因为 Gringo 3 和 Gringo 4 之间的语法发生了变化。在 Potassco 网站上,他们这样说并通过下载两个版本的 Gringo 来解决它,但他们没有说明如何同时引用两者使用 Clingo 运行程序。我下载了 Gringo 3.0.0 并替换了 gringo.exe,但是 cligo.exe 已经用最新版本的 Gringo 编译了。

如何使用 Gringo 3 下载最新版本的 Clingo,或最新的兼容版本?

0 投票
1 回答
427 浏览

np - ASP Clingo - 将图拆分为 n 个派系

对于给定的图,我需要使用最多 n 个派系来表示它。我对这个任务有疑问。这类似于与给定图相反的图的 n 着色(当图 A 中的边(a,b)而不是图 B 中的边(a,b)时,图 b 与图 A 相对)。我写了以下代码:

但它不适用于给定的测试:

例如颜色(1)==颜色(2)!=颜色(3)==颜色(4)。当我删除其中一个公式时,它也不起作用。