MiniZinc中如何获取多维数组指定单维度的长度
MiniZinc多维数组指定维度长度获取方法
length函数仅支持一维数组,对多维数组调用时会先将数组按存储顺序展平为一维结构,返回值是数组全部元素的总个数。你调用后得到14,就是数组A的总元素数,并非第一维的长度。- 获取多维数组指定维度长度的标准写法为
card(index_set(数组名, 维度序号)):index_set(A, 1)用于获取数组A第一维的完整索引集合card()函数用于计算集合的元素个数(集合基数),返回结果就是对应维度的实际长度
针对你定义的数组A,第一维长度的正确获取表达式为card(index_set(A, 1))。
- 你当前使用硬编码范围的约束不需要提前计算维度长度,直接遍历第一维的索引集合即可适配任意长度的第一维,且不受第一维索引起始值的影响,鲁棒性更强。修改后的约束代码如下:
constraint forall(row in index_set(A, 1))( S[A[row, 2]] >= C[A[row, 1]] );
内容的提问来源于stack exchange,提问作者Brannon
相关产品推荐
相关产品推荐

