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

prolog - Prolog中的否定是一种程序行为吗?

我对Prolog 语言中的否定作为失败有一个小问题:

这是一个比实际更理论的问题,因为我清楚这个例子是如何工作的。

所以我有以下Prolog程序:

在 Prolog 中,我不能简单地说:“玛丽爱所有动物,但不是蛇” ,我必须这样表述:“如果 X 是一条蛇,那么玛丽不爱它。否则,如果X 它是一种动物,玛丽喜欢它”

根据规则,先例程序正是这样做的:

Prolog 检查 X 是否是一条蛇,强制执行切割以避免回溯并强制谓词失败。

通过这种方式,如果snake(X)程序TRUE强制头部前导的失败likes(mary,X)和强加回溯避免了执行程序中其他规则的可能性(答案是真的,因为蛇也是动物)

我的问题是:在我看来,Prolog 的这种使用超出了逻辑和声明范式,并且在某种程度上属于某种程序范式

因为:

  1. 我必须强加 2 谓词的顺序(所以在某种程度上我是说:如果第一个失败,请尝试第二个)。
  2. 但我更想说的是:如果第一个规则匹配(X 它是一条蛇),则执行强制失败并且不强制回溯。

在我看来,这似乎更接近于程序意义,而不是经典逻辑意义......

是那个吗?是不是在这些情况下,Prolog 使用程序行为来克服逻辑的限制?

0 投票
1 回答
42 浏览

answer-set-programming - 特定输入后的视频答案

对不起,如果我的问题很愚蠢。我对编程一无所知,但我有一个疑问。现在是否有可能创建一个可以理解我的话并给我一个特定的视频作为答案的程序。我的意思是这个想法就像在宜家的网络上一样,那里有一个“娃娃”,根据所提出的问题有一个答案或另一个答案。我的想法会是类似的,但答案是之前录制的特定视频。

再次抱歉,如果这只是疯了,但我会很感激你的回答。

0 投票
0 回答
202 浏览

alloy - 合金是答案集编程的一个例子吗

我一直在研究 ASP,并且想知道这两种方法之间的关系,因为它们都在后端使用 SATsolvers。尽管文献中很少或没有重叠。我很欣赏两者的简单比较。

(CS StackExchange 上也有人问过这个问题

https://cs.stackexchange.com/questions/14633/why-is-alloy-not-an-answer-set-programming-system

)

0 投票
1 回答
149 浏览

logic-programming - 答案集编程获取系列长度作为输入

我是答案集编程的新手,并试图将问题编码到 ASP 中。我认为这是一个简单的问题。这是代码;

如您所见,有一个由事件组成的序列。在这种情况下,它的长度是 3。但是我希望它由用户决定。例如;

  • 如果用户希望它的长度为 3,那么

外国佬 asp.lp --const n=3 | 表扣

代码应该是这样的;

  • 如果用户希望它的长度为 4,那么

外国佬 asp.lp --const n=4 | 表扣

代码应该是这样的;

我怎么能那样做?谢谢,

0 投票
1 回答
503 浏览

graph - Clingo 中图表的意外结果

我正在尝试在 Clingo 中编写一个程序来解决欧拉路径。到目前为止,这就是我想出的。我希望我的图表如下所示。 图示 我的输入。

我的程序到目前为止。

我在我的程序中的评论不正确吗?我认为该程序应该始终将边缘连接在一起。因为现在我没有得到答案,但是当“num”的步数从 1..4 不等时,我得到了一个解决方案。我相信欧拉路径应该有 6 个步骤,但是可能的解决方案是:

0 投票
1 回答
443 浏览

logic-programming - 为什么 DLV 在这个 ASP 示例程序中找到一个答案集而不是另一个答案集?

我在 ASP(答案集编程)中尝试了两个简单的程序,然后我使用答案集求解器 DLV 来找到答案集(也称为稳定模型);这些程序是

P1:

P2:

在 P1 dlv 中找到 {c, b} 作为答案集,在 P2 中找到的答案集是 {f};我不明白为什么答案集在 P1 中是 {c,b},而在 P2 中只有 {f};作为(最小)模型,P1 中的 {c} 还不够吗?

谢谢

0 投票
3 回答
379 浏览

parsing - 在 ANTLR4 中处理歧义语法中的重载符号

我正在尝试为答案集编程(ASP)的方言编写解析器,就语法而言,它看起来像带有一些扩展的Prolog 。例如,一种扩展是扩展,这意味着fact(1..3).例如在 中扩展fact(1). fact(2). fact(3).。请注意,该语言可以理解数字并INT用作终止符。FLOAT.

在某些情况下,解析器无法区分整数、浮点数、扩展名和分隔符,因为我认为该语言显然是模棱两可的。在这种情况下,我必须用空格明确分隔标记。但是,任何PrologASP解析器都可以正确处理此类产生式。我读到ANTLR4可以自动消除有问题的产品的歧义,但可能需要一些帮助,但我不知道该怎么做!;-) 我在这里这里读过类似的东西,但显然他们没有帮助我。

有人可以告诉我该怎么做才能克服这种歧义吗?请注意,我无法更改语言,因为它非常标准。为了简化专家的工作,我创建了一个最小的工作示例,如下所示。

我使用以下输入:

我得到以下错误,这些错误被其他工具解析纠正:

提前谢谢了!

0 投票
1 回答
796 浏览

zebra-puzzle - Clingo:断言部分约束

我正在尝试实现一个程序,clingo以解决其中一个经典谜语,其中您有一系列事实和约束的断言,并且您必须推断出其他事实。问题来了:

五个不同国籍的男人住在五个并排的房子里,每个房子的颜色都不一样;他们都有不同的工作,不同的喜爱动物和喜爱的饮料。我们知道:

  1. 英国人住在红房子里。
  2. 西班牙人最喜欢的动物是狗。
  3. 日本人是画家。
  4. 意大利人喝茶。
  5. 挪威人住在左起第一个房子里。(number_norw = 1)
  6. 住在温室里的人喝咖啡。
  7. 绿房子就在白房子的右边。(number_green = number_white + 1)
  8. 店员喜欢猫。
  9. 推销员住在黄色的房子里。
  10. 牛奶是中心屋最喜欢的饮料。(number_milk = 3)
  11. 挪威人的房子与蓝色的房子相邻。(number_norw = number_blue ± 1)
  12. 厨师喜欢果汁。
  13. 住在医生旁边的房子里的男人喜欢狐狸。
  14. 爱马的男人住在推销员的隔壁。

任务是找出谁喜欢斑马。所以我提出断言:

现在我坚持断言约束;如何编码断言 1. 到 14.?我只需要了解正确的语法,所以如果有人可以通过一两个示例让我走上正确的轨道,我可以弄清楚其余的。谢谢。

注意,我可以从 5. 和 11. 推断出第二个房子是蓝色的,因为11. number_blue = number_norw ± 1,5. number_norw = 1和 0 不在可能的数字范围内,但我不想手动将其添加到约束中,因为我希望clingo自己弄清楚。

0 投票
1 回答
1086 浏览

answer-set-programming - Clingo:创建自定义函数

如果可以定义的话,我无法在 cligo 中创建一个“函数”。在我想要完成的简化版本中,我编写了这个非常简短的程序:

基本上,我想定义一个邻接函数,true如果它们的差值的绝对值等于 1,则给定任何两个数字都将成立。我对上述程序的期望是输出结果:adj(1,2) adj(2,1) adj(2,3) adj(3,2),但我看到了这个输出:

(如果我省略#hide a/1.它将输出答案:)a(1) a(2) a(3)

我觉得这是 clgo 101,所以也许我误解了这里的基础知识。我正在尝试通过学习我在网上偶然发现的示例来学习 Clingo,但我有点匆忙完成它,因为我明天有作业。如果有人能提供一些启示,那就太好了。谢谢。

0 投票
0 回答
278 浏览

javascript - 在 javascript 中运行带有输入的 exe 文件

我有想要在网页中运行并返回结果的答案集编程求解器/接地器。如果我在本地机器上执行此操作,我将在命令提示符下运行类似的内容:

或者

其中 lp 文件是输入,其余是参数。如何使用 exe 程序 cligo/gringo/clasp 在输入文件或网页文本区域的输入上运行它们,并显示结果,例如使用 alert()?我通过阅读另一篇文章尝试了这一点: