2014-09-23 8 views
0

CP 및 MiniZinc에 잠깐 노출되었지만 전문가는 아닙니다.제약 프로그래밍으로 고유 솔루션 생성

CP 모델을 가지고 있는데 여기에 ATM을 게시 할 수 없으며 MiniZinc에 구현되어 있습니다. 문제에 대한 모든 가능한 해결책을 생성해야합니다. 우리는 1000 개 미만, 100 개 이상이라는 "적은"것들을 가질 것으로 기대합니다.

minizinc 버전으로 전달 된 -a 플래그로 모델을 풀려고했습니다. 1.6 그러나 인쇄되고있는 많은 해결책이 동일하다는 것을 알았습니다.

Here "프로젝션"을 참조하십시오. 다른 논문에서 나는 그들이 "되돌아 오는 메커니즘"을 사용했다고 읽었다.

아직 나에게 명확하지 않습니다.

내 질문은 다음과 같습니다

  1. CP 모델 만의 고유 솔루션을 생성 할 수있는 가장 좋은 방법은 무엇입니까?
  2. SCIP 또는 Gecode와 같은 CP 라이브러리에 구현 된 표준 메커니즘이 있습니까? 그것은 공통의 이름을 가지고 있습니까?
  3. 계산이 효율적입니까?
  4. minizinc가이를 지원합니까? 해당 기능에 어떻게 액세스합니까?

답변

4

일반적으로 CP 시스템은 별개의 솔루션을 제공합니다. 필자는 출력 변수가 아니라 결정 변수가 인쇄되어 있지 않은 것으로 판단하고 이러한 값을 솔루션에 포함 시키면 고유 솔루션이되는 것을 알 수 없습니다.

당신이 (this recent discussion)에 링크 된 질문에서, Gecode의 FlatZinc 솔버 (적어도 SVN 버전)는 이제 출력 섹션에 결정 변수의 서브 세트가 주어지면 별개의 솔루션을 생성한다고 언급합니다. 다른 FlatZinc 솔버는이 기능이없는 것 같습니다.

질문에 답변이되지 않는 경우 모델 및 출력 예 (출력 섹션 포함)에 대해 자세히 알려주십시오.

+0

Indedd. 필자의 모델에서는 a [t]가 시간 t-1에서 b 값 사이의 변화를 측정한다는 것을 나타 내기 위해 'a [t]> = b [t] -b [t-1]'형태의 MIP와 같은 제약 조건을 썼다. ~ t. 나는 그것을'a [t] = max (0, b [t] -b [t-1])'로 바꾸고 예상대로 작동한다. 보다 효율적인 방법으로 제약 조건을 표현하는 더 좋은 방법이 없다면 궁금합니다. –