[英]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.