minizinc搜索数组中的连续数字

时间:2017-11-27 18:57:42

标签: arrays numbers minizinc

我正在尝试在minizinc中创建一个模型,在下面的数组中按MaxSUM顺序找到3个数字:

[2,3,4,**10,22,11**,17]).
[1,2,3,4,**10,22,11**,11,10,24]).
[2,3,4,5,10,23,**10,22,11**,17]).

我希望我的模型输出这些数字,它们的指数和它们的总和。

我试过了:

array[int] of int : list1 = [2,3,4,10,22,11,17]; 
array[int] of int : list2 = [1,2,3,4,10,22,11,11,10,24]; 
array[int] of int : list3 = [2,3,4,5,10,23,10,22,11,17];

array[1..3] of var int: values;
array[1..3] of var int: indices;

constraint forall(i in 1..3, j in list1)(
                     values[i]=list1[j]
                  );
constraint exists (i in 1..length(list1)-2)(
                       exists(j in 1..length(list2)-2)(
                       exists(k in 1..length(list3)-2)
                             (list1[i]=list2[j]/\list2[j]=list3[k] /\
                             list1[i+1]=list2[j+1]/\list2[j+1]=list3[k+1]/\
                             list1[i+2]=list2[j+2]/\list2[j+2]=list3[k+2]
                             /\values[1]=list1[i]/\values[2]=list1[i+1]/\values[3]=list1[i+2]
                             /\indices[1]=i/\indices[2]=j/\indices[3]=k
                  )));
var int: max_sum;
constraint max_sum=sum(values);
solve maximize max_sum;

但是,UNSATISFIABLE :(

1 个答案:

答案 0 :(得分:1)

这是两个提示。

提示1:错误表明第8行出了问题,其中j = 3。如果你注释掉这个约束,那么就没有语法错误。由于我不明白这种约束的目的,我无法帮助你。

提示2:另外,如果你注释掉那个约束(在第8行),那么获得解决方案可能需要很长时间 - 取决于解算器 - 因为你有决策变量values和{{ 1}}设置为indices。为这两个决策变量说明一个积极的领域要好得多。