2016-11-01 4 views
1

의 모든 부분 집합을 통해 정량화하는 방법은MiniZinc

constraint forall (S subset C, k in M) (
    % Some constraint over the set S, and integer k 
); 

나는 또한 싶습니다 ...이의 라인을 따라, MiniZinc의 정수의 집합의 모든 부분 집합에 대한 제약 조건을 만들 싶습니다 제약에서 S의 카디널리티를 사용하고, C은 정수의 집합입니다. 사용할 수있는 하위 집합에 대한 구문이 있습니까? (위의 모델은 작동하지 않습니다).

답변

1

현재 배열 세트에 대한 생성기가 없습니다. 따라서 데이터 파일에 수동으로 전원 세트를 나열하는 것 이외에는 주어진 세트의 모든 하위 세트를 반복 실행하는 방법이 없습니다.

대부분의 경우 모델은 이러한 생성기가 필요하지 않도록 다시 공식화 할 수 있습니다. 사용 예를 들어, 고려 변수가 대신 설정 :

var set of C: S; 
% or if you want to declare S in a different way: 
% var set of 0..100: S; % Different declaration 
% constraint S subset C; 
forall (k in M) { 
    % some cool constraints 
} 

이 모델은 없다는 제약을 포함 할 수 있도록 것입니다. "이러한 일련의 모든 제약 조건이 유지되도록 S이있다"

+0

그러나 S보다 보편적 인 양을 강제로 계산 하시겠습니까? 그것은 forall (S 서브셋 C)이고 존재하지 않습니다. 어떻게 든 주위에 이중 부정을 밀어 넣을 수 있습니까? – haz

+0

@ haz 제 지식에는 당신이 묘사 할 상황에 맞는 직접적인 해결책이 없습니다. 전에 말했듯이, 모델은 재 형성이 필요합니다. 자세한 내용을 제공 할 수 있다면 내가 너를 더 멀리 도울 수있을거야. – Dekker

+1

아니, 충분 해. 작업을 재개 할 수는 있지만 MiniZinc에서 직접 인코딩을 시연하기 위해 교과서에있는 MIP 모델을 충실히 유지하려고했습니다. 다른 변수 집합/제약 조건이 필요하지만 큰 문제는 아닙니다. 감사. – haz