问题标签 [minizinc]

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 投票
1 回答
131 浏览

minizinc - 基数约束类型失败;如何正确使用 minizinc `card`

以下模型适用于 langfords 问题

然而,更自然的阅读约束

失败并出现错误

有什么建议么?

0 投票
1 回答
917 浏览

minizinc - 来自另一个数组的 Minizinc 约束

我正在尝试使用 minizinc 进行我的第一个约束编程。我正在尝试创建一个包含n插槽和n人员的时间表,每个插槽分配一个不同的人。我正在使用一个array of var int来模拟日程安排,alldifferent()用来确保每个插槽中都有不同的人。一个单独array的 size nnames包含它们的名称,如下所示:

如何通过名称中的值限制 schdule?在我上面的(损坏的)示例中,当forall取消注释约束时,我得到(使用 Minizinc IDE):

我遵循错误,直到不理解找不到哪个声明。show()当我从 schdule 值索引到数组时,名称中的输出块s 值非常高兴。

我错过了什么?有没有更好的方法来模拟名称?我希望将名称扩展到人的其他“属性”并创建额外的约束。我确信模型和我的 forall 约束都非常幼稚!

0 投票
2 回答
493 浏览

optimization - 最大连续值数(Minizinc)

我正在尝试在 Minizinc 中为下一个约束建模:

假设 S 是一个大小为 n 的决策变量数组。我希望我的决策变量取一个介于 1-k 之间的值,但使用的连续值的数量有一个最大值“Cons_Max”。

例如,假设 Cons_Max = 2,n = 8 和 k = 15,则序列 [1,2,4,5,7,8,10,11] 是有效序列,而 eg [1,2,3, 5,6,8,9,11] 不是有效序列,因为此处的最大连续值数等于 3 (1,2,3)。重要的是要提到序列 [1,3,5,7,9,10,12,14] 也是有效的,因为这些值不需要是连续的,但连续值的最大数量固定为“Cons_Max” .

关于如何在 Minizinc 中建模的任何建议?

0 投票
1 回答
123 浏览

output - Minizinc:条件不满足时返回文本

我正在编写一个应该解决 MiniZinc 中的纸牌游戏的代码。如果条件不满足,我已被要求返回一条消息“此纸牌无法解决”。

不幸的是,我在 Internet 上找不到解决此问题的方法。有谁知道我该怎么做?

0 投票
1 回答
387 浏览

minizinc - 如何量化 MiniZinc 中的所有子集

我想为 MiniZinc 中一组整数的每个子集创建一个约束,沿着这条线......

我还想使用S约束中的基数,并且C只是一组整数。是否有我可以使用的子集语法?(上述模型不起作用)。

0 投票
2 回答
571 浏览

syntax-error - Minizinc "var set of int: x" 而不是 "set of int: x"

我在高尔夫球手问题中有一组集合(每周应该有一组,这样没有两个玩家一起玩超过一次,并且每个人每周都玩一次):

我的限制如下(我不确定一切是否正常):

我的问题在于约束编号 5。我不能在“var set of int: x”上使用 min,我应该在“set of int: x”上使用它。不幸的是,我不明白这两者之间的区别(从我读过的内容来看,这可能与定义每组的大小有关,但我不确定)。

有人可以向我解释这个问题并提出解决方案吗?我将非常感激。谢谢!

0 投票
0 回答
475 浏览

optimization - 在 Minizinc 中求解非线性方程组

我正在研究流体力学玩具问题,即三个水库问题,我想使用 Minizinc 解决它。

我有三个管道,我为每个管道使用三个方程,在管道中使用它们的结果是该管道中的流体速度。系统约束说管道的速度之和必须为零。

所以,我面临一个错误:

我不知道为什么会这样。Minizinc标准库有内置的 log10,它符合我的需要:function var float: log10(var float: x)

谢谢。

我的代码是:

0 投票
1 回答
134 浏览

constraint-programming - 确定每个变量可以取的所有值

我有一个变量数组和它们之间的线性约束列表。对于每个变量,我都有一个集合,其中包含一个有效值的起始列表。使用 Minizinc,我怎样才能将这些起始值集减少到仅能满足约束的那些?

一个简单的例子来展示我想要实现的目标:

当我用一个solve satisfy项目运行它并打印所有解决方案时xy,我得到(删除了水平线):

想要的是以某种方式获得一个 var set 数组,调用它xypossible,在这种情况下等于[ {1, 3, 4, 5}, {2, 3, 4, 6} ]。我想我可以定义一组约束,以某种方式检查,对于 中的每个可能值xypossible[1],有一个值xypossible[2]产生一个有效的解决方案,反之亦然,然后求解以最大化 中所有集合的总基数xypossible,但是当我的真实数据可能是几百个变量的规模时,有几十个线性约束,这对于代码来说很难看,而且运行起来很糟糕。

如果没有一种很好的方法可以将其作为模型,那么有没有一种方法可以捕获信息作为求解器识别有效值作为其自身工作的一部分的结果?

0 投票
1 回答
188 浏览

minizinc - Provide start solution in MiniZinc

How can one provide a start solution for an optimization problem formulated in MiniZinc in the IDE or via a data file to, e.g., speed up the solution process of the corresponding fd solver (in this case Gecode)?

0 投票
1 回答
460 浏览

constraints - 卡在 Minizinc 中制作俄罗斯方块求解器

我正在尝试在 Minizinc 中实现俄罗斯方块求解器,我想这也被称为“打包”问题。

我是 Minizinc 的新手,几乎不知道我在做什么,但我目前在我的代码中遇到了一个特定的约束。

我试图通过将俄罗斯方块中的 4 个“l”块放入正方形中来解决 4x4 正方形,以便填满整个正方形。

我的一个主要限制是:

这个约束应该首先通过所有提供的块(4个“l”块),然后循环通过实际的板找到:如果当前块是类型1(类型“l”),并且它的原点放置在x,y,并且它的旋转为 1(因此在这种情况下没有旋转),并且它没有被反射,并且它下面有超过 3 块空间,那么它必须在 x,​​y,y 处有第一个块+1、y+2 和 y+3。

然而,即使有这个约束(以及我所有的其他约束),我仍然通过求解器得到这样的输出:

甚至不应该将块放置在第二行,因为它没有 3 个清除块向下,并且板与原点完全不匹配,并且不符合上述有块的约束直线下降。

我真的不知道如何解决这个问题。在纸面上,逻辑似乎是合理的,但我无法弄清楚我哪里出错了。我将发布我的完整代码以及我的所有其他约束。请注意,是的,我意识到我目前只有一个方向的“l”块的约束,但我试图用 4 个“l”块来解决它,它应该适合那个方向,所以没有理由为什么它应该输出它正在输出的内容。

感谢您的帮助。