2017-11-23 4 views
2

Gecode에서, I는 분기 할 때 변수를 선택하는 메리트 함수를 사용하고있다.에서, 메리트 함수에서 홈/공간 변수 값에 액세스

: 변수 V의 장점을 계산하기 위해

, 내가 다른 변수 값에 액세스해야하지만 성능 함수가 호출 될 때처럼 보이는 공간 변수는 아직 값을 asigned되지 않은

Exception: IntVar::val: Attempt to access value of unassigned variable. 

내가 잘못 했나요? 메리트 함수에서 변수 값에 액세스하는 방법이 있습니까?

답변

2

문제는 변수를 검색하는 동안 1 개의 값만있는 것이 아니라 해당 도메인이 여전히 1보다 큰 것입니다. 즉, 변수에 여전히 다른 값이있을 수 있습니다. 도메인에 값이 하나만 남을 때까지 val 메소드를 사용할 수 없습니다. in 방법을 사용하는 단일 값에 대한 변수를 테스트 할 수

  • 가장 좋은 방법 :

    는 값 도메인을 사용하는 방법에 따라이 문제에 대한 다른 솔루션이 있습니다. 값이 변수의 도메인에 있으면이 메서드는 true을 반환합니다.

  • 변수를 서로 비교하려면 일반적으로 도메인을 비교하는 데 minmax 메서드를 사용합니다.
  • 값이 할당 될 때만 관련이있는 경우 val 메서드를 사용하기 전에 size 메서드를 사용하여 카디널리티 (도메인 크기)가 1인지 확인합니다.

가장 일반적인 경우이지만 변수와 상호 작용할 수있는 수많은 방법이 있습니다. IntVar documentation을 확인하십시오. 여기서 IntVar 클래스의 모든 메소드가 설명됩니다.

+1

내 경우에 들어갈 올바른 방법 인'min()'을 사용하여 해결했습니다. – Silverspur