问题标签 [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.
answer-set-programming - 在答案集编程中,模型和最小模型有什么区别?
我正在学习人工智能课程,我们正在使用答案集编程(特别是 Clingo)。我们目前主要谈论的是理论,我在区分模型和最小模型时遇到了一些麻烦。我有以下定义:
满足定程序的规则、模型、最小模型和答案集
- 如果程序在其规则主体中没有“不”,则称为确定程序。
- 集合 S 被称为满足以下形式的规则 a :- b1, ..., bm, not c1, ..., not cn。如果它的主体被 S 满足(即 b1 ... bm 在 S 中,而 c1 ... cn 都不在 S 中)意味着它的头部必须被 S 满足(即 a 在 S 中)。
- 如果集合 S 满足该程序的所有规则,则称它满足该程序。
- 如果 (a) S 满足 P(也称为 S 是 P 的模型)并且 (b) S 的严格子集不满足 P(即 S 是P 的最小模型)。
带着问题(从讲座幻灯片中提取,而不是家庭作业):
谁能告诉我上述问题的答案是什么?我可能可以从那里找出区别,尽管如果有人可以解释普通话的区别(而不是教科书的定义),那就太好了。我不确定在哪个论坛发布这个问题 - 请让我知道它是否应该发布在其他地方。
谢谢
answer-set-programming - 如何在答案集编程(dlv)中使用 forall X(答案集序言)
我在 dlv 中有以下事实,知道 (X,Y) 意味着 X 知道 Y。
我定义了以下谓词,
这将给所有的人从事实。我试图找到一个谓词流行(X)。这将给受欢迎的人。它被定义为如果所有人都知道 X,那么 X 是受欢迎的。上述事实清单的答案是爱丽丝和彼得。我将其定义如下,
如果 X 是一个人并且每个人都知道 X,那么 X 很受欢迎。但是当我运行它时,我得到的结果是所有人。我在哪里犯错?
count - 答案集编程 - 如何计算似乎是我的查询结果的事实数量?
所以我有一组事实和一个用 ASP 编写的要在 DLV 上运行的查询,
然后我想计算我的答案集中有多少triple1
三元组不包括事实。然后我做了这种聚合#count查询:
但我得到的只是变量的数量TermA
作为我的结果出现。当我将查询更改为这样时:
它给了我错误。我该怎么做这个查询?
antlr - 从列表中动态重写 ANTLR 3 n 个节点
我正在使用 ANTLR 3 来解析和重写答案集程序 (ASP)。我想要做的是解析一个 ASP 程序并输出一个带有一些重写的 AST。我可以轻松地在 AST 中添加和删除节点,但我需要做的是动态地将节点添加到根(实际上是向 ASP 程序添加新规则)。添加哪些节点以及添加多少节点取决于输入的 ASP 程序。
下面我有一个来自我的词法分析器和解析器的示例,它输出一个 AST。r_rule 返回一个根据匹配的内容填充的 LinkedHashMap。对于 LinkedHashMap 的每个成员,在 r_program 的重写中,我想将一个新节点添加到根节点 PROGRAM。但是,我似乎找不到遍历 LinkedHashMap 并添加新节点的方法。
我可以使用语义谓词,但只能检查 LinkedHashMap 的属性。我可以使用插入的代码任意循环遍历 HashMap,但我不能在每次迭代时添加子节点或触发重写。生成的代码实际上放在错误的位置,甚至使用 Java 以丑陋的方式执行此操作(我无法访问根节点 PARENT)。
我能做些什么呢?也欢迎采用完全不同的方法。非常感谢!
更新 1
一个示例输入是:
一个示例 AST 是,为绘图道歉(nb 严格来说是一个用于可读性的示例,实际上在重写中使用了更多节点)......
我可以继续说,如果可以绑定变量,每个规则都会以不同的方式绑定变量。不同的输入会改变 PROGRAM 子项的数量和内容。
answer-set-programming - 关于答案集编程的新手问题
我对 Clingo(和逻辑编程)完全陌生,我正在寻找实现以下基本约束的最佳方法:
Q1。我有一个谓词selected(T)
,其中 T 的范围从 1 到 N=5;如何指定至少存在一个 T这样 selected(T) ?
Q2。我有一个二元谓词wrap(E,T)
,其中 E,T 的范围从 1 到 M,N;如何指定每个 E 至少存在一个 T使得 wrap(E,T) ?
Q3。我如何指定 if selected(a)
OR selected(b)
thenselected(c)
必须为假
我实际上使用了两行代码,但可能有更好的方法:
Q4。如何指定如果某个条件 C(A) 为真,那么两个一元谓词 p1(A) 和 p2(A) 必须具有相同的值?
我实际上使用了两行代码:
Q5。你推荐什么书来很好地介绍答案集编程?
declarative - SAT接地工具?
在 ASP(答案集编程)中,程序是用更高级别的声明性语言编写的,然后以确定性的方式接地,以使用诸如 lparse 或 gringo 之类的接地程序生成 ASP 实例。
SAT 社区是否有流行的grounders 用于生成实例?换句话说,有没有可以采用如下表达式的东西:
并从中生成一个 DIMACS 文件?
一般来说,SAT竞赛实例是如何产生的?
answer-set-programming - 在 clgo 中聚合
我已经生成:
如何总结激光场 2+1+6?
我在 cligo_guild.pdf 的第 21 页看到了以下内容:
上来:
但我得到:
我正在使用 clgo 3.0.4。谢谢您的帮助。
answer-set-programming - 列表在 ASP(答案集编程)中应该如何表示?
处理器“a”处理消息“a_b_c_d”的标头“a”并将有效负载“b_c_d”传递给下一级的另一个处理器,如下所示:
我应该如何在 ASP 中表示列表'a_b_c_d',并将上述更改为一般情况?
answer-set-programming - 优化语句语法的差异(cligo 3 和 cligo 4)
对于 cligo3,我在逻辑程序中有一个优化语句:
(基本上,我希望解决方案包含尽可能少的上述内容 - 它们的权重都相同)。
此语法适用于 cligo3,但不适用于 cligo4。应该如何为 cligo4 重写?
answer-set-programming - 入门:我应该在哪里编写程序?
所以我需要做一个 Answer-Set-Programming 项目,我们应该使用 DLV 求解器解决一些问题并创建测试用例。
根据项目规范,我们需要制作文件G.dl、Ch.dl和test.dl,所以请记住,我对这一切都很陌生,这是我的问题:
这个 .dl 文件是什么,如何创建一个?或者更好:
我应该在哪里写下所有这些事实和规则(顺便说一句,我在纸上写了)才能将其保存为 .dl 文件?