问题标签 [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.

0 投票
4 回答
6589 浏览

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 的建议。

痕迹

序言源

0 投票
3 回答
2636 浏览

prolog - 使用 Prolog 求解 CNF

在学习 Prolog 时,我尝试编写一个解决 CNF 问题的程序(性能不是问题),所以我最终得到了以下代码来解决(!x||y||!z)&&(x||!y||z)&&(x||y||z)&&(!x||!y||z)

有没有更简单、更直接的方法来使用这种声明性语言来解决 CNF?

0 投票
5 回答
3987 浏览

prolog - Prolog 约束处理 : Packing Squares

我正在尝试解决 prolog 中的约束处理问题。

我需要在 10x10 的网格中打包 4 个 5x5、4x4、3x3 和 2x2 的正方形。它们可能不会重叠。

我的变量如下所示:

其中 X 为 5、4、3 或 2。索引 i 表示行,域表示网格中的列。

我的第一个约束尝试定义正方形的宽度和高度。我这样表述:

这样可能的点就被限制在彼此之间的 X 行和列内。然而,Prolog 停止这些约束并给出以下结果:

所以它停在那里,甚至没有检查其他方格。我的约束很可能太紧了,但我不明白为什么或如何。有什么建议么?

0 投票
3 回答
1265 浏览

prolog - 简单的布尔表达式测试

我基本上想要做的就是问这组表达式 {P or Q, ~P} 是否可满足?

但是错误消息在这里没有帮助......

PS。答案应该是“是”,当 P = false 并且 Q = true 时,这个公式是满足的。

0 投票
2 回答
8740 浏览

prolog - Prolog 实现 and/2, or/2, nand/2, nor/2, xor/2

我想在 prolog 中实现以下谓词并将它们用于真值表:and/2、or/2、nand/2、nor/2、xor/2

也许有人可以告诉我如何实现和/2,例如,我可以自己做其他人并将它们发布在这里。

0 投票
4 回答
480 浏览

constraint-programming - 约束编程布尔求解器

休伊、杜威和路易正在接受他们叔叔的盘问。这些是他们所做的声明:

• 休伊:“杜威和路易在其中占有同等份额;如果一个人有罪,那么另一个人也有罪。”</p>

• 杜威:“如果休伊有罪,那我也是。”</p>

• Louie:“杜威和我都没有罪。”</p>

他们的叔叔知道他们是童子军,意识到他们不能说谎。

我的解决方案。

Minizinc 解决不了。

0 投票
2 回答
379 浏览

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”可以是真或假。最好的方法是什么?

0 投票
3 回答
502 浏览

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。

两组符号对应的顺序是什么?

我尝试了以下代码:

但它显示失败。任何帮助将不胜感激。

0 投票
1 回答
80 浏览

prolog - 从结构数据为 clpb 构建逻辑表达式

我有以下形式的数据:

图:https ://docs.google.com/drawings/d/10wBpmFxxbDqrlpPVqpkVo_r8I-qcalWAz7Lro9myjMs/edit?usp=sharing

设备的输入也类似于与门,但它们始终是电路树的“顶层”。我想实现一个谓词,它会导致类似:

然后当然是更简单的结构d2

这将允许我使用 clpb 库来提供输入的实例化以了解哪些设备处于打开或关闭状态,或者找到需要打开设备才能打开的输入。

然而,尽管进行了多次尝试,我仍然无法正确构建这些结构。

V 变量不需要这样命名,但重要的是 sat 语句中的变量与正确的输入变量匹配。

0 投票
3 回答
371 浏览

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 的列表。

我知道我不能以上述形式扭动,但这与我现在所能做的一样接近序言形式。递归似乎太难了!