- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了一种情况,我正在对数组进行建模 S
包含来自预定义域 1..t
的一组值(计划) ,加上0
,这是“不存在/未使用”的特殊值。
我现在想发布一个约束来对成本函数求和,表示为二维数组 C
,列表 S'
,保存 S
的每个非零元素以相同的顺序,如下所示:
constraint x = sum([C[S'[d], S'[d + 1]] | d in 1..max - 1])
但是,这并不容易做到。我尝试过的事情:
roots
的函数形式将索引集设置为 S
其数据非零。该解决方案的问题是:
[S[i] | i in 1..max where S[i] != 0]
)仅选择值非零的元素:这也不起作用,因为 where
列表推导式上的子句导致列表的类型为 opt
,并且元素数量也错误(我认为其中一些是 <>
),本质上将过滤零的问题减少到使用 <>
再次出现相同的问题。 :s.我真正想要的是 filter
或zip
,这都可以轻松解决我的问题,但我认为我缺少某种标准解决方案。否则,我就必须重新设计模型。
最佳答案
可以通过使用递归函数来解决您的问题,该函数通过迭代数组 S
的索引来计算成本。我举例说明了函数calculate_cost()
下面是一个小例子:
int: t = 10; int: N = 5;
% cost array
array[1..t,1..t] of int: C = array2d(1..t,1..t,[ i | i in 1..t, j in 1..t]);
% variables
array[1..N] of var 0..t: S;
var 0..1000: x;
% constraints
constraint S[1] = 4; % setting some arbitrary values
constraint S[2] = 7;
constraint S[3] = 0;
constraint S[4] = 6;
constraint x = calculate_cost(1,2);
function var int: calculate_cost(int: index1, int:index2) =
if index1 > N then 0
elseif index2 > N then 0
else
let {
var bool: value_at_index1_is_zero = S[index1] == 0;
var bool: value_at_index2_is_zero = S[index2] == 0;
}
in
if value_at_index1_is_zero
then calculate_cost(index1+1, index1+2)
elseif value_at_index2_is_zero
then calculate_cost(index1, index2 + 1)
else
C[S[index1],S[index2]] + calculate_cost(index2, index2+1)
endif
endif;
solve satisfy;
此示例有 S = [4, 7, 0, 6, 0]
并计算成本x = C[4,7] + C[7,6] = 4 + 7 = 11
。
在函数 calculate_cost()
中,我通过跳过 S
中具有零值的索引来递归计算总和。 。在前几行中,我检查索引是否越界,并在这种情况下返回 0(递归的基本情况)。然后我创建两个局部变量 true
如果值为 S[index]
index
为零。然后,如果其中一种情况为真,我将忽略这些索引,并再次递归调用该函数,并在递归调用中增加/调整相应的索引。
这可行,但可能不是解决这个问题的好方法,因为它在 FlatZinc 模型中引入了很多辅助变量,因此重新表述问题可能仍然更好。
关于arrays - MiniZinc:压缩列表中的非零元素对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48582978/
我想在 MiniZinc 中用相同的项目创建两个数组,不一定按相同的顺序。在这里,A0 中的每一项也应该在 A1 : array[1..3] of var int:A0; array[1..3] of
假设我想计算 {1,2,..100} 的 80 个元素子集的数量,使它们的总和为 3690。 我有以下模型: array[1..100] of var 0..1: b; constraint (sum
我看到 MiniZinc Handbook 中的各个地方都使用了 $ (主要在 Reference Manual 部分),但我一直找不到定义。有人可以向我解释一下吗?谢谢。 最佳答案 MiniZinc
在斑马谜题 ( http://rosettacode.org/wiki/Zebra_puzzle#MiniZinc ) 的解决方案中,有一个约束条件,规定其中一只宠物必须是斑马: var 1..5:
在斑马谜题 ( http://rosettacode.org/wiki/Zebra_puzzle#MiniZinc ) 的解决方案中,有一个约束条件,规定其中一只宠物必须是斑马: var 1..5:
我正在尝试解决 MiniZinc 中的一个练习,其中部分排序关系由二维数组给出: enum NODE = { A, B, C, D, E }; int : SOURCE = 1; int : TARG
我正在熟悉 MiniZinc 的基础知识。因此,借助 MiniZinc IDE,我编写了如下代码片段 solve satisfy; string: s1 = "hello"; string: s2 =
锌规范是这样说的: If no output item is present, the implementation should print all the global variables and
MiniZinc 中的 channel 是什么?你能提供一个简单的例子来解释 channel 吗?最后,什么是逆? 最佳答案 两者都用于建立两个数组之间的双向关系。 设 f 是一个数组,index_s
FlatZinc 文档说 只有非标谓词必须在 FlatZinc 模型的顶部声明: Predicates used in the model that are not standard FlatZinc
我有一个二维网格,其中某些单元格值会产生不同的分数,我想通过为单元格分配值来最大化分数。是否可以跟踪求解器在求解过程中尝试的每个网格?下面是模型的一个片段,只是为了演示这个想法。 int: i_cou
picat求解器 (v. 2.6#2) 指出示例模型 knights.mzn包含在 minizinc 存储库中,特此复制粘贴: % RUNS ON mzn20_fd % RUNS ON mzn-fzn
尝试学习 minizinc,但在完成示例之后,我是否可以确认,如果我想获得多个输出,或者有一种更“自然的 minizinc”方式来获得它,我实际上必须编写一些程序语言。 例如,假设我想让所有不同的数字
练习是: n个人想要拍一张合影。每个人都可以给出他或她旁边的偏好想要放置在照片上。要解决的问题是找到满足最大数量的放置位置偏好。 到目前为止我编写的代码: include "globals.mzn";
我正在尝试编写一个带有嵌套循环的输出语句,以及在外部级别的重要输出。如果 Minizinc 有一个顶级 for 命令,我会做类似的事情 for (f in Foo) ( output(["Foo:
我想检查 1 到 5 之间的哪个数字没有出现在数组组中,并将这个(或多个)数字放在另一个数组中。 g=2; set of int: GROUPS = 1..g; groups = [{1, 3}, {
问题 给定一个 MiniZinc 字符串数组: int: numStats; set of int: Stats = 1..numStats; array[Stats] of string: stat
我有一个变量,它应该只在特定条件下有一个值,所以我想它需要是一个可选变量。如果满足该条件,则可选变量应限制为集合的元素。 问题是,MiniZinc 似乎不喜欢可选变量和集合。 如何重写,使 MiniZ
我如何使用嵌套 for 循环(就像下面 java 所做的那样)在 Minizinc 中生成/填充数组? int[][] input1 = {{1,1,1}, {3,3,3}, {5,5,5} }; i
我正在使用 minizinc 和 gecode 以分布式方式解决最小化问题。我有多个分布式服务器,它们使用相同的输入来解决相同的模型,并且我希望所有服务器都能获得相同的解决方案。 问题是模型有多个解决
我是一名优秀的程序员,十分优秀!