문제는 일부 사람들이 고정 된 크기의 그룹으로 골프를 치는 일정을 찾는 것입니다. 모든 플레이어가 한 번에 한 그룹에 속해 있음을 보장해야합니다. 여기 Minizinc lazyfd 솔루션이 제한을 무시합니다.
내 코드입니다 :int: gr; % number of groups
int: sz; % size of groups
int: we; % number of weeks
int: n=gr*sz; % number of players
set of int: G=1..gr; % set of group indices
set of int: P=1..n; % set of players
set of int: W=1..we; % set of weeks
% test instance
gr = 2;
sz = 2;
we = 2;
array[G,W] of var set of P: X;
%X[g,w] is the set of people that form group with index g in week w
% forall group x, |x| = sz
constraint forall (g in G, w in W)
(card (X[g,w]) = sz);
% one person cannot play in two groups simultaneously
constraint forall (g in G, w in W, p in X[g,w], g2 in (g+1..gr))
(not(p in X[g2,w]));
solve satisfy;
내 문제는 지금은 얻을 내가 사용하는 경우 G12 즉, 해결사
$ minizinc -b lazy this.mzn
을 lazyfd 즉
무시하는 것 같다X = array2d(1..2 ,1..2 ,[1..2, 1..2, 1..2, 1..2]);
----------
내 두 번째 제약. 게으른 옵션을 사용하지 않고 G12 한편 는, 즉
$ minizinc this.mzn
맞습니다
X = array2d(1..2 ,1..2 ,[1..2, 1..2, 3..4, 3..4]);
----------
을 산출한다. G12 MIP 및 Gecode도 올바른 결과를 제공합니다.
어떻게 가능합니까? 그리고 내가 어떻게 그것에 의존 할 수 있도록 게으른 해결사를 사용할 수 있습니까? 아니면 어떻게 든 엉망이 된 내 설치입니까?
는 '버그'처럼 보입니다. [여기] (https://github.com/MiniZinc/libminizinc/issues)보고하십시오. '게으른'엔진이 아닌 다른 엔진을 쓰지 않는 이유는 무엇입니까? –
성능이 내 이유 였지만 성능은 버그에서 비롯된 것 같습니다 ... 게으른 해결사 만 합리적인 시간 내에 문제를 해결할 수있는 좀 더 복잡한 예제가있었습니다. 처음에는 그 사실을 몰랐습니다. 잘못된 해결책! – JTSkywalker
이 예제에서'fd' 엔진은 1 초 이내에 다른 배열 배열을 '36'찾았고'지연 엔진'은 다른 배열을'777 '찾습니다. 그래서 예, 버그 또는 엔진 자체의 다른 본질적인 제한 때문에 제가 잘 모르고 있기 때문입니다. –