1

나는 단지 내가 누적 술어의 옵션입니다 세계 자원 제한의 최소화에 의해 주문 활동의 일정을 검색 할이프롤로그에서 누적 술어의 [limit (x)] 옵션에 변수를 사용할 수 있습니까?

schedule(Activities, GLB) :- 

    get_start_times(Activities,StartTimes), 
    get_resources(Activities,Resources), 
    get_durations(Activities,Durations), 

    sum_list(Durations, MaxTime), 
    StartTimes ins 0..MaxTime, 
    GLB in 0..100, 
    get_tasks(StartTimes,Durations,Resources, Tasks), 
    cumulative(Tasks, [limit(GLB)]), 

    labeling([min(GLB)],[StartTimes, GLB]). 

처럼 뭔가를 할 수 있습니다. 그러나 한계를 변수로 지정할 때 충분하게 인스턴스화되지 않은 인수를 계속 얻습니다. 정말로 가능하지 않다면 내가 원하는 것을 다른 방법으로 얻을 수 있습니까?

+0

직접 'GLB'를 열거하십시오. '누적/2'이전. – false

답변

2

false은 이미 다음과 같이 반복 할 수 있습니다. cumulative/2이 게시 될 때 인스턴스화되도록 GLB을 직접 열거 할 수 있습니다. 현재 변수를 자원 한계로 지정할 수 없습니다. 당신이 올바른 궤도에

, 단순히 당신의 술어의 마지막 부분을 변경

StartTimes ins 0..MaxTime, 
GLB in 0..100, 
get_tasks(StartTimes,Durations,Resources, Tasks), 
indomain(GLB), 
cumulative(Tasks, [limit(GLB)]), 
labeling([], StartTimes). 

오름차순으로, 콘크리트 정수로 GLB의 모든 가능한 인스턴스 생성을 열거합니다 indomain/1 사용. 따라서 이것은 반복적 인 심화를 제공하며 받아 들일 수있는 가장 작은 값인 GLB에 대해 성공합니다.

+0

고마워, 내가 정확히 찾고 있었던 것이지. –