簡體   English   中英

Minizinc的“ var set of int:x”而不是“ int set:x”

[英]Minizinc “var set of int: x” instead of “set of int: x”

我在“高爾夫球手”問題中有一系列問題(每個星期應該有成組的小組,這樣,沒有兩個球員可以一起玩一次,每個人每周都玩一次):

int: gr; %number of groups
set of int: G=1..gr;
int: sz; %size of groups
set of int: S=1..sz;
int: n=gr*sz; %number of players
set of int: P=1..n;
int: we; % number of weeks
set of int: W=1..we;

include "globals.mzn";

array[G,W] of var set of P: X; %X[g,w] is the set of people that form group g in week w

我的約束如下(我不確定是否一切正常):

constraint forall (g in G, w in W) (card (X[g,w]) = sz); %Each group should have size sz

constraint forall (w in W, g,h in G where g > h) (disjoint(X[g,w], X[h,w])); % Nobody plays twice in one week

constraint forall (w,u in W where w > u) (forall (g,h in G) (card(X[g,w] intersect X[h,u]) <= 1 )); % Two players never meet more than once

constraint forall (w in 2..we) (w+sz-1 in X[1,w] /\ 1 in X[1,w]); %Symmetries breaking: week permutations

constraint forall (w in W, g in 1..gr-1) ( min(X[g,w]) < min(X[g+1,w]) ); %Symmetries breaking: group permutations

constraint forall (g in G, s in S) ( s+sz*(g-1) in X[g,1]);

solve satisfy;

output [ show(X[i,j]) ++ if j == we then "\n" else " " endif | i in 1..gr, j in 1..we ];

我的問題出在約束編號5上。我不能在“ int set:x”的變量集上使用min,我應該在“ int set:x”的集上使用min。 不幸的是,我不了解這兩者之間的區別(從我閱讀的內容來看,這可能與定義每組的大小有關,但我不確定)。

有人可以向我解釋問題並提出解決方案嗎? 我將非常感謝。 謝謝!

首先: var是一個決策變量。 所有Minizinc程序的目標都是確定所有決策變量的值。 您不知道值是什么,而您正在嘗試查找值。 任何不是var都只是一個已知數。 (不考慮集合的使用)

在Minizinc中根本不執行決策變量( var )的min(X[g,w]) 原因是在沒有最小值的情況下使用X[g,w] < X[g+1,w]更有意義。 為什么只限制所有數字中兩個集合中的最低數字。 即{1,3,5} <{1,4}的1 < 1

(我希望MiniZinc設置了<,所以我不會說謊,我不確定)

我已經找到了解決方案-在這種情況下,我們應該對集合中的元素進行排列以使max函數成為可能。

constraint forall (w in 2..we) ( max([i | i in X[1,w-1]]) < max([i | i in X[1,w]])); %Symmetries breaking: week permutations

constraint forall (w in W, g in 1..gr-1) ( min([i | i in X[g,w]]) < min([i | i in X[g+1,w]]));% Symmetries breaking: group permutations (I have been trying to speed up the constraint above, but it does not work with var set of int..)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM