问题标签 [constraint-programming]

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 投票
0 回答
105 浏览

c++ - 约束求解集合中的差异

我有一组五组元组(int myInt,float myFloat)

我希望统一缩放每个集合,以便它:

在所有集合中的所有集合到集合的元组配对之间,最大化 myInts 对和 myFloats 对之间的差值接近 0 的发生次数。

然后它缩放所有集合以最小化那些近连音配对的距离

所以输入集
[ (24, .56), (0, .55) ]
[ (22, .37), (23, .59) ]

两个连音彼此靠近,它们应该缩放以最小化它们的浮点值的差异,忽略离群的连音。

在实际使用中,每组有 20 个连音,在 2 到 20 组之间,但通常在 4 个左右。

我是约束求解的新手,但我想到的方法是。

给每个集合一个随机缩放,然后向上或向下调整每个集合以最大化接近 0 的 myFloats 的数量。使用不同的随机值重复多次。

这类问题有什么已知的方法吗?我在正确的轨道上吗?

0 投票
1 回答
345 浏览

prolog - 如何将变量域定义为非连续范围

我从 SICStus Prolog 开始,我想定义一个变量,比如说StartingTimes,让域由 list 定义[1, 5, 10]

我怎样才能在 SICStus Prolog 中做到这一点?

我会做类似的事情:

但这太可怕了。必须有一个简单的方法来做到这一点。也许fd_sets

注意:我试图找出它是如何在手册中完成的,但是序言使用了常用词,而且很难使用谷歌来做到这一点。

0 投票
2 回答
372 浏览

prolog - 如何将域变量添加到 global_cardinality?

我正在尝试为global_cardinality我的程序添加一个约束,并且在SICStus Prolog 的手册中写道:

global_cardinality(+Xs,+Vals)

global_cardinality(+Xs,+Vals,+Options)

其中 Xs = [X1,...,Xd] 是整数或域变量的列表,Vals = [K1-V1,...,Kn-Vn] 是对的列表,其中每个键 Ki 都是唯一的整数Vi 是域变量或整数。如果 Xs 的每个元素都等于某个键,并且对于每对 Ki-Vi,则 Xs 的 Vi 元素恰好等于 Ki。

现在我可以写:

说这个号码1会被使用两次。该号码2将只使用一次。

但我想说的是,1将使用该数字:once, twice or three times

根据手册,我需要一个域变量,但正确的语法是什么?

0 投票
1 回答
1591 浏览

c++ - 涉及向量(数组)的快速简单的约束规划

我有很多很多向量,我需要使用一些非常基本的一阶逻辑来检查数字的重复项。

我可以使用十字路口,但事实证明这太慢了。我想我可以把它变成一个逐位问题。整组整数是已知的,每个向量/数组都可以表示为一个位集,但我只能找到一半的解决方案。

我目前使用循环和矢量交集,但事实证明它对于我需要检查的问题数量来说太慢了。

举一个简单的例子,给定:

我要确定的问题始终是更大的格式:

我需要验证以上是否可能没有重复。

有没有一种比 900 万次循环更快的检查向量/数组的方法?约束库是唯一的选择吗?

为了澄清:

容器是 std::vector。

向量包含任何整数。

我需要逐个问题地检查它们以识别完整的整数集。

使用指定的条件逻辑来选择整个向量,是否会出现重复?使用的条件运算符总是只有“AND”和“OR”。我列出的问题是一个简化版本,但这实际上就是它的全部内容。它只是大小不同。

我不太关心的输出......它可能是一个布尔值,另一个潜在重复的向量等。我试图找到适合这项工作的工具,而不是打捞。

在我目前的设置中,我将通过分析像 A 这样的强制项目并删除它与...相交的任何东西来解决这个问题(在这种情况下,N...然后我会再次循环,并对 M 执行相同的过程,这现在是强制选择,删除 E,留下 F。

0 投票
1 回答
841 浏览

prolog - 增加 ECLiPSe/prolog/fd 中的堆栈大小

我们必须在几个有约束的环境(ECLiPSe ic、ECLiPSe fd、SWI-prolog、GNU-prolog、NaxosSolver 等)中解决 prolog 中的骗子问题。我已经使用了尾递归(我认为)和我能想到的尽可能多的削减(这样我猜分辨率树没有变得尽可能大。如果需要,我可以发布我的代码。

当数据数变为 10000-50000 时,我在 ECLiPSe 中的 fd 和 ic 中收到堆栈溢出,在 SWI-prolog 中,程序永远运行。所以我想增加 ECLiPSe 中堆栈的大小,但我看不到如何。我试图在我的代码的第一行写这个:

,但它说超出范围。

看看 eclipse 说了什么,这可能会有所帮助: *尽管进行了垃圾收集,但全局/跟踪堆栈的溢出!您可以使用“-g kBytes”(GLOBALSIZE)选项来获得更大的堆栈。峰值大小为:全局堆栈 128832 KB,跟踪堆栈 5312 KB

0 投票
4 回答
268 浏览

binding - Prolog中变量的几个绑定选项

我想以这样的方式将变量绑定到几个原子,以便稍后它将与这些原子之一统一。直觉上它应该像这样工作(假设 ; 是可能值的析取):

如您所见,这个想法接近类型层次结构的概念。所以,我想知道是否有一些内置的(元)谓词可以很容易地做这样的事情,或者是否有一些常用的方法使用某种数据结构来建模,或者我必须构建这种谓词从头开始?

0 投票
2 回答
171 浏览

constraint-programming - SMT-Lib标准是否支持理论组合?

我知道有几部作品试图处理 SMT 中的理论组合。但是,SMT-Lib 2.0 语言 ( http://smtlib.cs.uiowa.edu/docs.html ) 没有说明这一点。我的问题是它是否支持这一点,以及什么 Solvers 提供了同时处理多种理论的能力?

谢谢,

0 投票
1 回答
80 浏览

schedule - 大型会议调度后勤

我要安排一个会议,每天有 6 节课,10 多位讲师,为期 14 天。有些讲师有些天有空,有些则没有,有些更喜欢特定的日期或课程,有些天他们休息

我用谷歌搜索了很多,但找不到好的材料来了解它。我想从头开始学习它,这意味着如果我需要学习约束编程,这对我来说没问题,因为我没有任何相关背景。

我正在寻找学习材料、书籍和任何关于此的建议。在 stackoverflow 的某个地方,我读过遗传算法,它对它有好处,但没有人确定它。因为这是我必须面对的最简单的话题之一,而且我将来会面临更难的解决方案,我必须从我的经理那里学习基本的新任务,我必须面对它。

如果您建议任何书籍、网站、论文和资源来学习或与我分享,我将不胜感激

0 投票
3 回答
7990 浏览

java - Simple constraint programming solver

I'm trying to get familiar with constraint programming.

All documentation/videos I've seen so far just contain description of top-level concepts and code examples based on CP-libraries utilization (like Choko, Gecode, JaCoP etc).

I'd like to implement at least something simple in Java without any libraries.

Are there any resources where I can find working code in Java/C#/C++/Python which implements main CP ideas? (at least "send more money" problem solution).

(or, maybe, if somebody can explain it here, it would be great).

0 投票
2 回答
343 浏览

math - 在eclipse clp中使用三角函数

我是 eclipse CLP 的新手,我想实现一个谓词,让所有角度都等同于特定的正弦函数,比如

我知道这个方案可能适用于变量的整数值;所以我需要一个也使用 CLP 的替代解决方案。