繁体   English   中英

在 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排序的约束,可以使用库中的递增约束

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM