问题标签 [clp]

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 回答
302 浏览

prolog - 约束逻辑编程调度

我正在尝试在 prolog 中使用 clp 解决问题。问题如下:

基本上,一艘船载有许多集装箱,我们想卸下它们。集装箱被描述为谓词 container(I,N,D),其中 I 是集装箱标识符,N 是需要卸货的人数,D 是持续时间。一个示例可能如下所示:

容器(a,1,1)。
容器(b,2,2)。
容器(c,2,2)。
容器(d,3,3)。

容器也可以放在另一个容器上,例如:

上(a,c)。
上(b,c)。
上(c,d)。

容器 a 在 c 之上,依此类推...

问题是最小化卸载集装箱的成本。成本定义为雇佣人数乘以所需时间。在整个卸货期间雇用所有人员。

我从问题开始就遇到了问题,因为我不熟悉 prolog 的 clp 部分。有没有人对如何解决问题或在哪里可以找到有关 clp prolog 如何工作的示例有任何建议?

0 投票
1 回答
46 浏览

parse-platform - 如何使用 Javascript 编辑 Parse.com 用户

我要做的就是使用 Javascript 工具设置一个所有用户都必须为 false 的布尔值。当我尝试这样做时,我收到“错误 206:ParseUserCannotBeAlteredWithoutSessionError”。我为该工具登录的用户具有“管理员”角色,该角色具有对 User 表的读/写 CLP。

在这个博客(http://blog.parse.com/learn/engineering/parse-security-iii-are-you-on-the-list/)中,他们简要地提到了万能钥匙,但从不解释如何使用它。这:https://www.parse.com/questions/masterkey-in-nodejs也不起作用,脚本甚至无法运行。

有人可以告诉我如何在 JS 中使用主密钥,比如 Parse 可能应该在他们的文档中的某个地方吗?

0 投票
1 回答
391 浏览

parse-platform - parse.com - 如何从代码中设置 CLP?

我在 Cloud Code 上有一个生成动态类的函数。并且这些类可能无法在 Cloud Code 之外访问(没有 MasterKey)。

所以我的问题是......如何将 CLP 从 Cloud Code 配置到这些新类?

我已经尝试将 ACL 设置为一个对象,但我需要为整个类进行配置。

0 投票
0 回答
34 浏览

mingw - 使用 mingw 在 Windows 8.1 上安装 Symphony

我正在尝试将硬币或交响乐与 Scilab 联系起来。我已经为 Linux 做到了。现在我正在尝试在 Windows 中构建它,我已经使用 MS Visual Studio 2010 进行了尝试,但它只生成静态库 (*.lib) 文件。我想生成dll文件。我尝试使用 mingw 构建它,但 Clp 中出现以下错误。最后显示错误

0 投票
0 回答
190 浏览

constraint-programming - 约束逻辑编程初学者的最佳工具

我需要为我的大学创建一个用于生产订单调度的原型应用程序。

我对 CLP 的主题仍然很陌生,我正在寻找一个简单的工具/环境/系统,它可以让我为少数机器(即 5-10 台)定义逻辑,包括它们的继承、容量、速度、转换时间等,定义一些生产订单(它们的参数可能是截止日期、利润、延迟罚款),因此以优化的顺序返回它们。

由于我在 CLP 工具方面没有经验,任何人都可以推荐一个快速创建原型的好工具吗?目前,我发现了很多关于 ECLiPSe 的好意见,但我真的可以借鉴与 CLP 合作的人的意见。

0 投票
1 回答
171 浏览

prolog - ECLiPSe clp:获取网格上的所有相邻单元格

所以我的问题如下:我想,给定网格中 X,Y 坐标的某个点,返回其所有相邻的单元格。

(注意:在以下示例中,我使用符号 UL = 左上角,UM = 上中,UR = 右上,L = 左,R = 右,BL = 左下,BM = 下-中间和 BR = 右下角。)

例如:

对于 5x5 网格上 (3,3) 处的元素 x

对于 5x5 网格上 (1,1) 处的元素 x

现在,从上面的示例中可以看出,与当前元素 x 相邻的单元格数量可能会根据元素 x 本身的 X、Y 坐标而变化。

我想通过说指定坐标 X 左右的每个 X 以及指定坐标 Y 上方和下方的每个 Y 都应该在 1..N 的域中来解决这个问题,然后定义它们的实际值:

但是,当然,只要越过棋盘的边界,这就会评估为假。

我希望我不需要明确区分有关董事会边界的情况;相反,我试图找到一些东西,而不是在达到越界坐标时评估为假,只是“丢弃”该结果并尝试计算其他相邻单元格。

我确信在 ECLiPSe 中会有一个很好的小解决方案,但我已经搜索了文档并且 - 到目前为止 - 似乎无法找到适合我需要的东西。

任何帮助是极大的赞赏!

0 投票
1 回答
311 浏览

prolog - 3-in-a-row 逻辑谜题:优化列表/数组中的序列约束

在下面的谜题中,我们尝试用蓝色和白色方块填充网格,如下所示:

  • 不允许使用相同颜色的 3 行(或列)。
  • 每一行和每一列都有相同数量的蓝色和白色方块。

example_puzzle

如果我们现在用 0 表示白色,用 1 表示蓝色,我们得到:

我们可以很快验证

是这个例子的解决方案。

作为约束,我写了以下内容:

sequence_total/6确保值 1 应在行/列中恰好出现 N2 次(N 的一半),并且 3 个元素的指定行/列中的每个序列应包含值 1 的 1 到 2 倍(所以没有 3 个值为 1 的方格可以相邻出现)。

对于 18x18 拼图实例 (*),我得到以下结果:

看起来约束在执行任何搜索之前都做得很好,因为“只”需要 147 个回溯。然而,运行时间对我来说似乎真的很长,尤其是与回溯的数量相比。我猜这是由于必须进行的所有序列检查?更改search/6中的任何选择/选择方法对运行时间几乎没有任何影响这一事实似乎证实了这一点。

如果是这样,是否有任何其他更有效的方法来约束列表/数组中的序列不具有相邻的 N 个相同元素并提高运行时间?

编辑

使用下面@jschimpf 提供的分解版本后,得到如下结果:

新的约束不如 sequence/6 强,我们确实需要更多的回溯,但是我们的运行时间从 10.39 秒下降到了 0.22 秒,因此总体结果非常理想。

样本数据:

用于此问题的谜题(无需回溯即可解决)

问题(p(6,1),[(1,1,0),(1,5,1),(2,2,0),(3,6,0),(4,1,1), (4,4,0),(5,3,1),(5,4,1),(6,2,0),(6,5,1)])。

我发布结果的谜题 (*):

问题(p(18,1),[(1,3,0),(1,9,0),(1,10,0),(1,12,0),(1,14,0), (1,18,1),(2,4,0),(2,7,1),(2,8,1),(3,2,1),(3,6,0),(3 ,16,0),(3,17,0),(4,2,1),(4,4,1),(4,10,1),(4,13,1),(4,18 ,1),(5,8,1),(5,10,1),(5,15,0),(5,16,1),(6,12,1),(7,3,0 ),(7,4,0),(7,6,1),(7,9,0),(7,12,1),(7,17,0),(8,1,1), (8,4,0),(8,8,1),(8,15,1),(8,16,1),(9,7,0),(9,10,0),(9 ,14,0),(10,2,1),(10,4,1),(10,6,1),(10,13,1),(11,7,0),(11,10 ,1),(12,1,1),(12,4,1),(12,7,1),(12,15,1),(12,16,1),(13,1,1 ),(13,6,0),(13,8,1),(13,10,0),(13,16,1),(14,5,1),(14,10,0), (14,13,1),(15,1,1),(15,3,1),(15,12,0),(15,13,​​1),(15,15,0),(16 ,2,1),(16,4,0),(16,12,0),(16,18,0),(17,9,0),(17,15,0),(17,18 ,0),(18,2,1),(18,8,1),(18,11,1),(18,15,1),(18,16,1)])。

0 投票
1 回答
918 浏览

c# - 在 VS2013 中从 C# .net 调用 CLP(用 C++ 编写的线性规划求解器)

我需要在 VS2013 中从 C# .net (4.0, 4.5) 调用 CLP(用 C++ 编写的线性规划求解器)。

我已经搜索了一些关于如何从 C# 调用 C++ lib 的链接。

我找到了可能的选择:

  1. 使用 C# 变形器

    http://astarte.csr.unibo.it/coinORwrapper/coinORwrapper.htm

  2. 自己设计包装类。

    http://www.codeproject.com/Articles/19354/Quick-C-CLI-Learn-C-CLI-in-less-than-minutes

    https://msdn.microsoft.com/en-us/library/ms235281%28v=vs.120%29.aspx

    https://social.msdn.microsoft.com/Forums/vstudio/en-US/299da822-5539-4e5b-9ba7-b614e564c9f4/presenting-ac-library-lib-for-use-in-c-project

CLP 有太多的类,所以我尽量避免为每个类编写一个包装类。这可能会导致太多错误。

第一个选项没有英文文档,并且有错误。

还有其他方法可以从 C# 调用 CLP 吗?

谢谢

0 投票
0 回答
180 浏览

prolog - CLP (CHR) 中的非重叠矩形

我有一组矩形,矩形的左上角坐标不同,宽度/高度也不同。例如,让我们取一个带有固定变量的矩形 A:X 坐标(左上角)为 1,Y 坐标为 2,宽度为 1,高度为 2。现在矩形 B 的变量并非全部接地:X 为 1,Y 为 [1,2],宽度为 2,高度为 [1,2]。

基于此信息,我们应该能够判断 2 是 Y 的不可能值,因为它会导致两个矩形的左上角相同,因此它们会重叠。然后 Y 将接地为 1。高度也是如此:如果高度为 2,则矩形 B 的左下角将与矩形 A 重叠,因此只允许 1。有了这些信息,我们就能够通过传播将矩形 B 接地。但对我来说问题是我有很多矩形要考虑,并且有很多可用的选项。

我在 SWI-Prolog 中使用 CHR 来实现。目前我有这样的东西(它只是这里实现的非重叠矩形约束的一小部分):

标题左侧的矩形是矩形 A,我简化的是矩形 B。如果 X 坐标接地(它是一个数字)但 Y 没有接地(它是一个列表),那么我尝试删除所有列表中 Y 的不可能值。最好的情况是只剩下 1 个元素,我们也可以将 Y 接地。在第二个 simpagation 规则中,我做同样的事情:如果我们知道 Y 的值但不知道 X 的值,我们会尝试消除 X 的所有不可能值。

这是用于验证矩形 B 的左上角是否在矩形 A 内的大量代码。我什至已经通过假设矩形 A 先接地而简化了事情,这并没有考虑到 A 的左上角的事实可能在矩形 B 内。当我试图弄清楚宽度和高度的传播时,事情变得更加复杂,因为矩形放置和不同的重叠可能性有很多组合。想到我必须考虑的所有可能性,我感到非常不知所措。

我尝试查找非重叠矩形放置的算法,但许多人认为我已经拥有完整的信息。不幸的是,我没有所有扎根的价值观,重点是我自己进行传播。有没有人对如何以战略方式解决这个问题提出建议?

0 投票
1 回答
92 浏览

prolog - 如何验证涉及 dif/2 约束的交换性?

围绕 dif/2 约束有很多炒作,尤其是作为 (\=)/2 和 (\==)/2 的一些非声明性的补救措施。这种非声明性通常以非单调性为特征,并给出了非交流性的例子。

但是测试涉及 dif/2 的测试用例是否可交换的方法是什么。这是我想要做的元解释:

我做了一个交换性测试,我想探测两个变体给出相同的结果:

因此,通常您可以使用 (==)/2 内置谓词检查单调性,如果归结为检查交换性。由于此谓词遵循实例化变量。

但是如果你在测试产生约束的用例, call_with_residue/2 是不够的,你还需要约束相等。这可能很棘手,如以下示例所示:

任何想法如何进行?

免责声明,这是一个陷阱:
我不认可交换性测试是一种好的测试方法,您可以在其中将好的和坏的谓词与规范分开。因为通常好谓词和坏谓词都可能没有交换性问题。

我正在使用交换性测试作为一种工具来了解 Dif/2 约束相等的方法。然后可以在更传统的测试用例中将这种相等用作验证点。