- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 prolog CLP 中编写 map 着色程序。这是到目前为止的代码。请任何人帮助我。这里有什么问题。我想在这里替换maplist函数。任何帮助表示赞赏。
:- use_module(library(clpfd)).
regions(Rs):-
Rs = [R1,R2,R3,R4,R5,R6],
% neighbouring regions have different
dif(R1, R2),
dif(R1, R3),
dif(R1, R4),
dif(R1,R6),
dif(R2, R3),
dif(R2, R5),
dif(R3, R4),
dif(R3,R5),
dif(R3, R6),
dif(R4, R5),
dif(R4, R6),
maplist(color, Rs).
color(red).
color(green).
color(blue).
color(yellow).
最佳答案
确实如此:发布的代码已经可以在任何提供dif/2
的Prolog系统中工作。
但是,在此类组合任务中使用CLP(FD) 约束具有明显的优势。
让我告诉你我的意思。首先,这是该任务的直接 CLP(FD) 表述:
regions(Rs):- Rs = [A,B,C,D,E,F], Rs ins 0..3, A #\= B, A #\= C, A #\= D, A #\= F, B #\= C, B #\= E, C #\= D, C #\= E, C #\= F, D #\= E, D #\= F.
我只有:
R1
→ A
、R2
→ B
等)dif/2
替换为 CLP(FD) 约束 (#\=)/2
首先,让我们尝试一下最通用的查询,看看原则上答案是什么样的:
?- regions(Rs).Rs = [_640, _646, _652, _658, _664, _670],_640 in 0..3,_640#\=_670,_640#\=_658,_640#\=_652,_640#\=_646,etc.
这看起来很不错。约束求解器以剩余目标进行响应。此外,我们看到我们的关系终止并且实际上是确定性,这很高兴知道。 标记变量将保留终止行为,因此我们不会意外地陷入程序其他部分的循环中。
通过标记变量,我们可以轻松获得具体的解决方案:
?- regions(Rs), label(Rs).Rs = [0, 1, 2, 1, 0, 3] .
这里,每个整数对应一种唯一的颜色。我把让这些解决方案变得更好读作为一项简单的练习。
CLP(FD) 约束提供了一个 dif/2
没有的功能,即约束传播。
在这种情况下,我们最初有以下情况:
这里,每个小点代表一种颜色,我们仍然可以将其用于它所在的区域。首先,约束求解器没有排除任何颜色,因此我们找到所有区域中的每个选项。
如果我们仅将一个区域指定为固定颜色,情况就会发生巨大变化:
?- regions([A,B,C,D,E,F]), F = 0.F = 0,A in 1..3,A#\=D,A#\=C,A#\=B,D in 1..3,D#\=E,C#\=D,E in 0..3,C#\=E,B#\=E,C in 1..3,B#\=C,B in 0..3.
我只添加了单个统一(F = 0
),这导致约束求解器从所有修剪此选项邻近地区:
现在,我只发布一个附加统一:
?- regions([A,B,C,D,E,F]), F = 0, C = 1.C = 1,F = 0,A in 2..3,A#\=D,A#\=B,D in 2..3,D#\=E,E in 0\/2..3,B#\=E,B in 0\/2..3.
这又会自动(即约束求解器为您完成)删除许多其他可能的分配:
只需再执行一项战略任务(我将其作为练习来找出哪一项),我们就会遇到以下情况:
现在,唯一剩下的选择是如何为尚未分配任何固定颜色的单个剩余区域着色。很容易看出,现在两种允许的颜色都解决了整个任务。
dif/2
也会修剪搜索空间。然而,CLP(FD) 约束对变量的实际域执行这种强大的修剪。这意味着许多值根本不需要尝试。此外,基于这种推理,约束求解器可以更智能地选择标记为next的变量,这在许多情况下进一步提高了性能。
关于prolog - CLP(FD)、 map 着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42589509/
让我们有以下假设场景……一个 5x5 的网格,比如说 3 个数字。 我们想定义对位置的约束。在 CLP 中,我们通常用整数定义约束,所以这是一种方法: ... Fig1X #\= 2, Fig1Y
我正在尝试使用 SWI Prolog CLP(FD) 解决调度问题。在尝试解决更大的问题时,我正在应用更高级的标记策略,在这里,更好地了解程序在什么时候失败和回溯将是有益的。因此,我喜欢记录哪些变量绑
我正在使用 clp(fd) 编写 Prolog 程序并且我很难实现我想要的约束之一。 输出是一个整数列表(长度取决于程序另一部分的输入),其中有某些相互排斥的预定义数字对,每对中的一个数字必须在输出中
我正在 Prolog 中编写任务调度程序/计划程序,为此我打算使用 CLPFD library (在 SWIPL 上)。我想知道使用有限域来解决调度问题有多么强大,以及如果我使用它会对 CPU 负载产
在有些instances中,可以对递归谓词进行CLP(FD)处理,其好处是谓词可以双向转换。这种方法的局限性是什么?例如,以下computation CLP(FD)-fied是否可以: Fn: n-t
在上个学期的 Prolog 类(class)中,我在引入 CLP 时落后了一点。现在我正在努力 catch ,并尝试参加教授提供给所有学生的过去考试。 特别是,有这个问题: What is the d
我做了两个实现来解决 Shikaku 难题。一个使用顶部、左侧、宽度和高度 (TLWH) 作为每个矩形的参数,另一个使用顶部、左侧、底部、右侧 (TLBR)。 出于某种原因,使用 TLBR 的速度要快
我正在尝试设置 Coin-CLP按照网站上的说明还支持 CPLEX(我已经安装并在我的机器上顺利运行)。 不幸的是,当我尝试在安装时运行配置步骤时,在我想要包含 CPLEX 的版本中看起来像这样: .
我是 Prolog 编程的新手,我写了一个代码来解决 4 x 4 幻方,但是当我运行程序时,程序没有给出任何输出;它只是继续执行(忙),最终我不得不退出 SWI-Prolog。请指导我解决这个问题。
我正在 Julia 中开发一个包,它使用 Clp 和 JuMP 来解决 Simplex 问题,这里是代码示例: model = JuMP.Model(Clp.Optimizer) @variable(
我正在尝试在 prolog CLP 中编写 map 着色程序。这是到目前为止的代码。请任何人帮助我。这里有什么问题。我想在这里替换maplist函数。任何帮助表示赞赏。 :- use_module(l
这个问题已经有答案了: Using a constrained variable with `length/2` (4 个回答) 已关闭 6 年前。 为什么以下退出时显示 ERROR: Out of
我想使用clp-java解决这个问题 Maximize 2 * x + 5 where x com.github.quantego clp-java 1.16.11 他们更
我有以下 CLP(FD) 查询: ?- use_module(library(clpfd)). ?- [I,N,M,J] ins -2147483648..2147483647, I - 3*N #=
有什么地方可以找到 clpfd 实现中的差异集合吗? 最佳答案 有一种支持一种语言的列表 形式或另一种约束逻辑编程。这个 有时表示为 CLP(*): 参见“基于逻辑编程的约束逻辑”部分: https:
我使用 CLIPS 开发了一个专家系统,并且希望能够在命令行上运行它。这可能吗? 我的最终目标是让 Java 程序在 CMD 中执行 .clp,并将输出和输入传递到命令行和 gui。 我可以在clip
我正在将代码从 Oracle JDK 导入到 OpenJDK (Java 8)。剩下的唯一需要解决的问题是如何改变 Java Clip (java.sound.sampled.Clip) 的音量?即使
我想在我的 Android 应用程序中构建一个新的线性编程模型,使用 cpl-java . 我的函数是E+T+U+URam,我想最小化这个函数,但我不知道如何使用这个库以及如何添加我的约束,我的限制:
我正在尝试在我的 iPhone 应用程序中加载 .clp 文件。为此,我使用下面的代码 NSString *filePath = [[NSBundle mainBundle]
我必须以包含 9 个向量(每个长度为 9)的向量格式解决数独谜题。由于向量是 Prolog 中的链表,我认为如果我首先将拼图转换为 2D 数组格式,搜索速度会更快。 示例拼图: puzzle(P) :
我是一名优秀的程序员,十分优秀!