최적화 제약

최적화 제약

FD 변수를 최소화/최대화하는 술어들을 설명해요.

출처: GNU Prolog Manual - Optimization constraints

본문

fd_minimize/2, fd_maximize/2

Templates

fd_minimize(+callable_term, ?fd_variable)
fd_maximize(+callable_term, ?fd_variable)

Description fd_minimize(Goal, X)는 변수 X를 최소화하는 값을 찾기 위해 Goal을 반복적으로 호출해요. Goal은 X를 인스턴스화해야 하는 Prolog 목표인데, 일반적인 경우는 fd_labeling/2(9.9.1절)의 사용이에요. 이 술어는 재시작이 있는 분기-한정(branch-and-bound) 알고리즘을 사용해요: call(Goal)이 성공할 때마다 계산은 Goal의 마지막 호출 끝에 있는 X의 값인 V에 대한 새 제약 X #< V로 재시작돼요. 실패가 발생하면(Goal에 남은 선택점이 없거나 추가된 제약이 저장소의 나머지와 모순되기 때문에) 마지막 해가 최적이므로 다시 계산돼요.

fd_maximize(Goal, X)fd_minimize/2와 비슷하지만 X가 최대화돼요.

Errors

  • Goal이 변수 — instantiation_error
  • Goal이 변수도 callable 항도 아님 — type_error(callable, Goal)
  • Goal의 술어 지시자 Pred가 기존 프로시저에 대응하지 않고 unknown Prolog 플래그 값이 error(8.22.1절) — existence_error(procedure, Pred)
  • X가 변수도 FD 변수도 정수도 아님 — type_error(fd_variable, X)

Portability: GNU Prolog 술어.

더 알아보기