minizinc 在数组中搜索连续的数字
minizinc search consecutive numbers in array
我正在尝试在 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;
但是,无法满足:(
这里有两个提示。
提示 1:错误表明第 8 行有问题,其中 j=3。如果您注释掉此约束,则不会出现语法错误。由于我不明白此约束的用途,因此无法为您提供帮助。
提示 2:此外,如果您注释掉该约束(在第 8 行),那么可能需要很长时间才能获得解决方案 - 取决于求解器 - 因为你有决策变量 values
和indices
设置为 var int
。最好为这两个决策变量声明一个正域。
我正在尝试在 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;
但是,无法满足:(
这里有两个提示。
提示 1:错误表明第 8 行有问题,其中 j=3。如果您注释掉此约束,则不会出现语法错误。由于我不明白此约束的用途,因此无法为您提供帮助。
提示 2:此外,如果您注释掉该约束(在第 8 行),那么可能需要很长时间才能获得解决方案 - 取决于求解器 - 因为你有决策变量 values
和indices
设置为 var int
。最好为这两个决策变量声明一个正域。