Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Constraints 检查数组#中是否存在元素_Constraints_Linear Programming_Minizinc - Fatal编程技术网

Constraints 检查数组#中是否存在元素

Constraints 检查数组#中是否存在元素,constraints,linear-programming,minizinc,Constraints,Linear Programming,Minizinc,我想检查数组组中未出现的1到5之间的数字,并将此数字(或多个数字)放入另一个数组中 g=2; set of int: GROUPS = 1..g; groups = [{1, 3}, {2,5}]; p=5; set of int: PEOPLE = 1..p; 我试过用这种方法,但不起作用 int: peopleInGroup= (g*g); set of int: INGROUP = 1..peopleInGroup; array [INGROUP] of var int:

我想检查数组组中未出现的1到5之间的数字,并将此数字(或多个数字)放入另一个数组中

g=2;

set of int: GROUPS = 1..g; 

groups = [{1, 3}, {2,5}];

p=5;

set of int: PEOPLE = 1..p;  
我试过用这种方法,但不起作用

int: peopleInGroup= (g*g);
set of int: INGROUP = 1..peopleInGroup;
array [INGROUP] of var int: inGroup;  

int: peopleNotGroup= c-(g*g);
set of int: NOTGROUP = 1..peopleNotGroup;
array [NOTGROUP] of var int: notGroup;     


constraint forall(i in groups,person in i) (if sum(j in PEOPLE-1)  (i==person then inGroup[i]=person else notGroup[i]=person  endif)); 

如果
是一个文本,如您的问题-,那么您可以使用集合和列表理解,如第22页所述,以实现您的目标

例如

set of int: DOM = 1..5;
set of int: population = DOM;
array[1..2] of set of DOM: groups = [{1, 3}, {2, 5}];


% array initialization

array [int] of var DOM: in_array =
               [i | i in DOM where exists(g in groups) (i in g)];
array [int] of var DOM: out_array =
               [i | i in DOM where not exists(g in groups) (i in g)];

% set initialization

var set of DOM: in_set =
               {i | i in DOM where exists(g in groups) (i in g)};
var set of DOM: out_set =
               {i | i in DOM where not exists(g in groups) (i in g)};


solve satisfy;

output [
    "in_set=", show(in_set), "\n",
    "out_set=", show(out_set), "\n",
    "in_array=", show(in_array), "\n",
    "out_array=", show(out_array), "\n"
];
注意:
var
可以从所有变量的定义中删除,这里我使用它只是因为
flatzing
不会在标准输出上打印它们的内容

输出为:

~$ mzn2fzn example.mzn ; flatzinc example.fzn
in_array = array1d(1..4, [1, 2, 3, 5]);
in_set = {1, 2, 3, 5};
out_array = array1d(1..1, [4]);
out_set = {4};
----------

以下是生成的中间
flatzing
模型:

array [1..2] of set of int: groups = [{1, 3}, {2, 5}];
array [1..4] of var 1..5: in_array :: output_array([1..4]) = [1, 2, 3, 5];
var set of 1..5: in_set :: output_var = {1, 2, 3, 5};
array [1..1] of var 4..4: out_array :: output_array([1..1]) = [4];
var set of 1..5: out_set :: output_var = 4..4;
solve satisfy;