[英]Restriction to sort an array in Minizinc
我正在尝试构建一个参数n = 5
的模型,该参数表示数组的长度。 该模型还有一个决策变量,其范围为0..9
并涉及两个约束。 第一个是数组的值的总和必须等于这个数组的值的乘积,最后一个必须是值的顺序应该是递增的。
我附上代码:
int: n = 5; % Array length
var 0..9: x;
array[1..n] of var 1..n: V;
% Constraints
constraint sum(V) = product(V);
constraint increasing(array[1..n] of var 1..n: V); % Sort problem
solve satisfy;
output[show(V)];
如果要添加数组V
排序的约束,可以使用库中的递增约束
include "globals.mzn";
% ...
constraint increasing(V);
您还必须包含文件“globals.mzn”,其中包含increasing
.
完整的模型是这样的:
include "globals.mzn";
int: n = 5; % Array length
var 0..9: x;
array[1..n] of var 1..n: V;
% Constraints
constraint sum(V) = product(V);
constraint increasing(V);
solve satisfy;
output[show(V)];
如果可能,使用已接受的答案中指示的现有约束是很好的。 如果没有可用的约束,最好也知道如何指定您自己的谓词。
包含您自己的递增规范的完整模型可能如下所示。
int: n = 5; % Array length
var 0..9: x;
array[1..n] of var 1..n: V;
predicate increasing(array[1..n] of var 1..n: V) =
forall(i in 1..n-1) (
V[i] <= V[i+1]
);
% Constraints
constraint sum(V) = product(V);
constraint increasing(V);
solve satisfy;
output[show(V)];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.