2014-07-16 1 views
3

저는 프롤로그를 처음 사용하고 있으며 우분투에서 swi-prolog를 사용하여 배우고 있습니다. 나는 근로자/제품 할당 문제를 해결하기 위해 clpfd 모듈을 사용하고 있습니다. 문제는 페이지 7의 this 종이에 나와 있습니다. 여기까지 제가 그 논문에서 가지고있는 것입니다.SWI Prolog 최대화 기능이 작동하지 않는 것 같습니다.

solver(Sol) :- 
    Sol = [A,B,C,D], 
    [A,B,C,D] ins 1..4, 
    all_distinct(Sol), 
    element(A,[7,1,3,4],A1), 
    element(B,[8,2,5,1],B1), 
    element(C,[4,3,7,2],C1), 
    element(D,[3,1,6,3],D1), 
    A1 + B1 + C1 + D1 #= E, 
    maximize(E,Sol), 
    label(Sol). 

나는 을 사용할 수 없습니다. 이 오류를 발생

ERROR: solver/1: Undefined procedure: maximize/2 
ERROR: However, there are definitions for: 
ERROR:   maximize/3 

누군가가 예상대로 maximize 기능이 작동하지 않거나 어떻게 그것을 프레임 수해야하는 이유를 지적 할 수 있을까요? 미리 감사드립니다.

답변

4

SWI-Prolog에서 최대화는 labeling/2 옵션으로 사용할 수 있습니다. 하여 maximize/2label/1 목표를 바꾸

labeling([max(E)], Sol]

되돌아에, 당신은 E의 내림차순으로 솔루션을 얻을.

+0

이것은 작동합니다. 도와 주셔서 감사합니다. – broccoli

+1

s (X) : 오늘'min (Expr)'을 사용했습니다. 나는 그것이 완전하다는 것을 파헤 쳐다 본다. – repeat