簡體   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