问题标签 [clpb]
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.
prolog - Prolog SAT求解器
我正在尝试构建一个简单的 Prolog SAT 求解器。我的想法是用户应该使用Prolog列表输入要在CNF(Conjuctive Normal Form)中求解的布尔公式,例如(A或B)和(B或C)应该表示为sat([[A,B] , [B, C]]) 和 Prolog 继续查找 A、B、C 的值。
我的以下代码不起作用,我不明白为什么。在跟踪调用的这一行上: (7) sat([[true, true]]) ? 我期待start_solve_clause([_G609, _G612]])。
免责声明:对于几天前我什至不知道 Prolog 或 SAT 问题的糟糕代码感到抱歉。
PS:欢迎提供有关解决 SAT 的建议。
痕迹
序言源
prolog - 使用 Prolog 求解 CNF
在学习 Prolog 时,我尝试编写一个解决 CNF 问题的程序(性能不是问题),所以我最终得到了以下代码来解决(!x||y||!z)&&(x||!y||z)&&(x||y||z)&&(!x||!y||z)
:
有没有更简单、更直接的方法来使用这种声明性语言来解决 CNF?
prolog - Prolog 约束处理 : Packing Squares
我正在尝试解决 prolog 中的约束处理问题。
我需要在 10x10 的网格中打包 4 个 5x5、4x4、3x3 和 2x2 的正方形。它们可能不会重叠。
我的变量如下所示:
其中 X 为 5、4、3 或 2。索引 i 表示行,域表示网格中的列。
我的第一个约束尝试定义正方形的宽度和高度。我这样表述:
这样可能的点就被限制在彼此之间的 X 行和列内。然而,Prolog 停止这些约束并给出以下结果:
所以它停在那里,甚至没有检查其他方格。我的约束很可能太紧了,但我不明白为什么或如何。有什么建议么?
prolog - 简单的布尔表达式测试
我基本上想要做的就是问这组表达式 {P or Q, ~P} 是否可满足?
但是错误消息在这里没有帮助......
PS。答案应该是“是”,当 P = false 并且 Q = true 时,这个公式是满足的。
prolog - Prolog 实现 and/2, or/2, nand/2, nor/2, xor/2
我想在 prolog 中实现以下谓词并将它们用于真值表:and/2、or/2、nand/2、nor/2、xor/2
也许有人可以告诉我如何实现和/2,例如,我可以自己做其他人并将它们发布在这里。
constraint-programming - 约束编程布尔求解器
休伊、杜威和路易正在接受他们叔叔的盘问。这些是他们所做的声明:
• 休伊:“杜威和路易在其中占有同等份额;如果一个人有罪,那么另一个人也有罪。”</p>
• 杜威:“如果休伊有罪,那我也是。”</p>
• Louie:“杜威和我都没有罪。”</p>
他们的叔叔知道他们是童子军,意识到他们不能说谎。
我的解决方案。
Minizinc 解决不了。
prolog - Prolog 布尔方程求解
到目前为止,我已经让这个程序在 GNU prolog 中工作
你可以输入 and(p,q) 得到是,也可以输入 and(p,not(q)) 得到否定。现在我想做这样的事情:
我将 p 设置为真,(通过用 p. 初始化它)和 (and(p,q)) 为真(但没有初始化 q),我想让 prolog 说:存在一种解决方案:“q”必须为真
如果我将 p 和 (or(p,q)) 设置为真,我希望 prolog 说:存在两种解决方案,“q”可以是真或假。最好的方法是什么?
prolog - 伯特兰·罗素拼图
解决以下Caliban 问题,将每条线索“忠实地”翻译成Prolog,即尽可能忠实地。
作为一个简单的抽象练习,假设四个无意义的符号 a、b、c 和 d 以一种或另一种顺序对应于同样无意义的符号 w、x、y 和 z,并进一步假设
如果 a 不是 x,则 c 不是 y。
如果 b 是 y 或 z,则 a 是 x。
如果 c 不是 w,则 b 是 z。
如果 d 是 y,那么 b 不是 x。
如果 d 不是 x,则 b 是 x。两组符号对应的顺序是什么?
我尝试了以下代码:
但它显示失败。任何帮助将不胜感激。
prolog - 从结构数据为 clpb 构建逻辑表达式
我有以下形式的数据:
图:https ://docs.google.com/drawings/d/10wBpmFxxbDqrlpPVqpkVo_r8I-qcalWAz7Lro9myjMs/edit?usp=sharing
设备的输入也类似于与门,但它们始终是电路树的“顶层”。我想实现一个谓词,它会导致类似:
然后当然是更简单的结构d2
。
这将允许我使用 clpb 库来提供输入的实例化以了解哪些设备处于打开或关闭状态,或者找到需要打开设备才能打开的输入。
然而,尽管进行了多次尝试,我仍然无法正确构建这些结构。
V 变量不需要这样命名,但重要的是 sat 语句中的变量与正确的输入变量匹配。
list - 如何从prolog中的两个列表构造一个列表
我是 prolog 的新手,我发现很难以递归方式思考。假设我有两个列表:list1[0,0,0,1,1,0,1,1],list2[1,0,1,0,0,0,1,1]。当 list1 或 list 2 在相应位置有 1 时,我想返回一个有 1 的列表。
我知道我不能以上述形式扭动,但这与我现在所能做的一样接近序言形式。递归似乎太难了!