在 Minizinc 中对数组进行排序的限制
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
有序的约束,可以使用库中的increasing约束
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)];
我正在尝试使用代表数组长度的参数 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
有序的约束,可以使用库中的increasing约束
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)];