2013-07-27 6 views
1

Ivan Bratkos의 Prolog 프로그래밍 인공 지능 4 판 편집을 따르고 있습니다. 현재 제약 논리 프로그래밍에 대해 읽었습니다.swi-prolog로 제한 논리 프로그래밍에서 결과로 불필요한 변수

{Ta >= 0, 
Ta + 2 =< Tb, 
Ta + 2 =< Tc, 
Tb + 3 =< Td, 
Tc + 5 =< Tf, 
Td + 4 =< Tf}, 
minimize(Tf). 

SWI - 프롤로그 결과에 어떤 결과가 괜찮

Ta = 0, 
Tb = 2, 
Td = 5, 
Tf = 9, 
{_G371>=0, _G377=2-_G371, _G371=<2, Tc=4-_G371}. 

에 (심지어 것이라고 생각 : 책에서

은 다음과 같이 간다 작업 스케줄링을위한 작은 최적화 예를 프로그래머 이 책 에서처럼 {Tc = < 4} {Tc> = 2}와 같이 작성한 경우 더 예뻤습니다. 그러나 왜 '_G377 = 2-_G371'부분을 추가하는지 이해하지 못합니다. 매우 불필요한 것 같습니다. ...

이 추가 변수 (_G377)가 왜 결과에 추가됩니까? 경우 다른 사람의

는 책을 읽고 : 나는 '따 = < 0'책의 오류라고 생각으로 나는, '따> = 0'에 '따 = < 0'으로 변경되었습니다.

답변

1

표시되는 대답은 이 아닌 library(clpq)을 사용하고 있음을 나타냅니다. SICStus Prolog에서이 라이브러리를 처음으로 구현할 때 얻은 결과는 다음과 같습니다.

| ?- {Ta >= 0, 
Ta + 2 =< Tb, 
Ta + 2 =< Tc, 
Tb + 3 =< Td, 
Tc + 5 =< Tf, 
Td + 4 =< Tf}, 
minimize(Tf).  
Ta = 0, 
Tb = 2, 
Td = 5, 
Tf = 9, 
{Tc=<4}, 
{Tc>=2} ? 
yes 

그래서 이것은 SWI의 버그 인 것 같습니다. 아마도 일부 변수는 멀리 투영되지 않았을 것입니다.