问题标签 [clingo]
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.
clingo - cligo:用换行符分隔答案集谓词
我想知道是否有可能通过换行符而不是空格来分隔答案集中的谓词。例子:
用
给
但我想有这个输出
logic-programming - 坐标网格上折线图的对称断边
优化 Datalog 程序的一个经典技巧是对称破坏。对称性破坏可以将您必须在数据库中计算的事实数量减半,因为您只需要计算edge(0, 1)
而不需要同时计算edge(1, 0)
.
考虑一个 nxm 坐标网格。如果我们想在这个网格上写一个描述无向边的关系,一个打破对称性的简单方法是说边只从较小的坐标到较大的坐标(例如,(2, 3)
到(3, 3)
,但反之不行)。这是一个简单的 cligo 程序,它以这种方式对 2x2 网格进行建模:
我们可以看到,如果对称性没有被破坏,这会产生四个关于边缘的事实,而不是八个:
现在考虑由这个坐标网格引起的折线图。这个折线图也是无向的,我们想以类似的方式打破对称性。什么是打破该图对称性的紧凑方法?
作为参考,这里是折线图上边的简短定义,它不会破坏对称性。
我们可以看到它不会破坏对称性,因为它会生成以下两个事实(以及其他事实):
clingo - 简明地表示“当且仅当”
假设你碰巧知道这$P
是真的当且仅当$Q
它是真的。您可以编写一对完整性约束来强制执行此操作:
但是,有时$P
和$Q
是相当长的表达式;例如,:- truth(martin, 2), house_assign(turner, H1), animal_assign(P2, whales), house_assign(P2, H2), not opposite(H1, H2).
最好只写一次。有没有办法在 clgo 中简洁地指定这个?
(相关:https ://stackoverflow.com/a/28319815/23845 中的 Q4 ;那里的建议明确表示谓词中 P/Q 的真实性,因此您可以对其进行比较。这真的是唯一的方法吗?)
answer-set-programming - ASP 中的谋杀谜题
所以在标签序言下我发现了这个谜题(原始帖子),我想:这在 ASP 中会更好。所以我把这个问题放在这里作为任何想和我一起解决难题的人的问题。我自己找到解决方案后会立即回答这个问题,我很乐意将我的代码与您的代码进行比较。谢谢你。
珍在星期二被杀;唯一的嫌疑人是:
卢克、保罗、阿兰、伯纳德和路易斯。
要遵循的规则是:
凶手是一个有杀人动机的人,他拥有一把枪,并且在星期二没有不在场证明。
不接受不值得信赖的人提供的不在场证明。
如果某人对杀死 jean 有特殊兴趣或想要报复,他就有杀死 jean 的动机。
有人对杀死 jean 有特殊兴趣,因为他是 jean 财富的受益者,或者他是否拥有 jean 的钱,或者 jean 是否让他感到犯罪。
以下是调查确定的事实:
卢克有伯纳德提供的周二不在场证明
保罗有伯纳德提供的周二不在场证明
路易斯有一个周二的不在场证明,这是卢克给的
Alain 有 Luc 给的星期四不在场证明
阿兰不是一个值得信赖的人
保罗想报复琼
卢克想报复琼
伯纳德是让财富的受益者
让是路易斯财富的受益者
路易斯拥有让的钱
Luc 拥有 Jean 的钱
琼看到阿兰犯罪
卢克拥有一把枪
路易斯有枪
阿兰拥有一把枪
answer-set-programming - 如何替换choicerule以减少使用asp(clingo)杀死接地过程的“无意义”答案
我目前正在开发一个答案集程序来为一所学校创建一个时间表。我使用的规则库类似于:
为了创建一个时间表,我想创建我正在使用的所有谓词的所有可能组合,然后过滤所有错误的答案。这就是我创建时间表的方式:
到目前为止,一切正常,除了这个解决方案可能相对低效。
为了过滤没有班级同时使用同一个房间,我制定了以下约束。
看起来这会导致问题如此之大,以至于接地失败,因为我收到以下错误消息
因此,我一直在寻找一种方法来创建不同的时间表实例,而不会得到由选择规则创建的太多“无意义”的答案。我想到的一种可能性是使用否定循环。因此,您可以将 choiserule 替换为
{a;b}
并a :- not b. b :- not a.
排除所有房间被占用两次的情况。不幸的是,我对这种方法的理解不足以将其应用于我的问题。
经过大量的反复试验(和在线搜索),我还没有找到一个解决方案来消除选择规则,同时消除房间和教师的重复。
因此,我想知道我是否可以使用这种方法来解决我的问题,或者是否有另一种方法根本不创建许多毫无意义的答案集。
编辑:规则库现在可以工作,并更新了第 5 课的每节课时数
logic-programming - 最大化cligo中的间隔
我有以下生成搜索空间的 cligo 代码,然后是约束。
此代码有效。但是我需要 cligo 来找到存在稳定模型的 n 的最大值。最好的方法是什么?
clingo - 如何将具有 arity 6 的谓词拆分为具有 arity 2 的多个谓词?
我对 cligo 和 ASP 很陌生。任何指针将不胜感激!
我正在尝试为调度问题编写程序。我将得到的输入是:
我想将其拆分为多个谓词,例如:
等等。
我可以轻松地将employee_type 定义为:
在哪里f - full time ; c- contractor.
但在工作量、付款的情况下,唯一的条件是这将是一个正整数。我如何定义这些谓词?
根据工作量、薪酬和员工类型的价值,我有多个硬约束和软约束。
谢谢!
answer-set-programming - 如何在 cligo 中使用数据结构而不是命令行参数 - (ASP)
我从逻辑编程开始,我正在开发一个简单的程序来查找节点之间的最短路径。我能真正理解的唯一教程是关于命令参数的。
有没有办法可以将程序中的 Args 替换为硬编码结构,如列表或其他东西?用asp可以吗?
编辑 Args 是起始节点、结束节点、边
clingo - clgo 规则主体中的析取
我认为这是基本的,但是您如何将文字与 clgo 中的规则主体进行析取?我试过了
p3 :- p1 ; p2.
但它不起作用,它假设答案是
p3 :- p1 , p2.
谢谢。