首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MiniZinc按索引连接变量数组

MiniZinc按索引连接变量数组
EN

Stack Overflow用户
提问于 2017-01-28 21:52:09
回答 1查看 1.5K关注 0票数 1

我有一个包含3个变量数组的MiniZinc程序,其形式如下:

代码语言:javascript
复制
array[NbLines] of var Domain: vars1;
array[NbLines, NbRows] of var Domain: vars2;
array[NbLines, NbRows] of var Domain: vars3;

我需要以以下方式指定我的搜索变量顺序,但是我没有成功地正确构造我的数组。有类似于MiniZinc的代码:

代码语言:javascript
复制
varsOrder = [[vars1[i]] ++ row(vars2, i) ++ row(vars3, i) | i in NbLines]

MiniZinc表示数组理解表达式中不允许数组。我该怎么办?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-01 18:12:42

正如您已经注意到的,您不能像这样连接数组。我能想到的是两种方法,尽管第一种方法并不完全是你想要的。

1)使用array1d(array)

您可以使用"array1d“来扁平矩阵(2d数组),如下所示:

代码语言:javascript
复制
solve :: int_search(vars1 ++ array1d(vars2) ++ array1d(vars3), first_fail, indomain_min, complete) satisfy;

然而,这与上面所写的不完全相同,但它比下一种方法容易得多:

2)制作一个主数组,并将所有元素插入到适当的位置。

代码语言:javascript
复制
 int: totLen = ...; % the total length of all the arrays
 array[1..totLen] of var Domain: all;

您必须执行一个循环,以将所有元素插入" all“数组中所需的确切位置。不过,我把这作为一项练习。:-)

然后,"all“数组可以用于标记:

代码语言:javascript
复制
solve :: int_search(all, first_fail, indomain_min, complete) satisfy;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41915247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档