레이블링 제약
레이블링 제약
FD 변수에 값을 할당(레이블링)하는 술어들을 설명해요.
본문
fd_labeling/2, fd_labeling/1, fd_labelingff/1
Templates
fd_labeling(+fd_variable_list, +fd_labeling_option_list)
fd_labeling(+fd_variable, +fd_labeling_option_list)
fd_labeling(+fd_variable_list)
fd_labeling(+fd_variable)
fd_labelingff(+fd_variable_list)
fd_labelingff(+fd_variable)
Description
fd_labeling(Vars, Options)은 Options가 주는 레이블링 옵션 리스트에 따라 리스트 Vars의 각 변수 X에 값을 할당해요. Vars는 단일 FD 변수일 수도 있어요. 이 술어는 백트래킹 시 재실행 가능해요.
FD 레이블링 옵션: Options는 레이블링 옵션 리스트예요. 이 리스트가 모순된 옵션을 포함하면 가장 오른쪽 옵션이 적용돼요. 가능한 옵션은:
variable_method(V)— 열거할 변수를 고르는 휴리스틱을 지정:standard— 휴리스틱 없음, 가장 왼쪽 변수가 선택.first_fail(또는ff) — 도메인에 요소 수가 가장 적은 변수를 선택. 여러 변수가 같은 요소 수를 가지면 가장 왼쪽 변수가 선택.most_constrained—first_fail과 같지만 여러 변수가 같은 요소 수를 가질 때 가장 많은 제약에 나타나는 변수를 선택.smallest— 도메인에 가장 작은 값을 가진 변수를 선택. 그런 변수가 하나 이상이면 가장 많은 제약에 나타나는 변수를 선택.largest— 도메인에 가장 큰 값을 가진 변수를 선택. 그런 변수가 하나 이상이면 가장 많은 제약에 나타나는 변수를 선택.max_regret— 도메인의 가장 작은 값과 다음 값 사이의 차이가 가장 큰 변수를 선택. 그런 변수가 하나 이상이면 가장 많은 제약에 나타나는 변수를 선택.random— 변수를 무작위로 선택. 각 변수는 한 번만 선택됨. 기본값은standard예요.
reorder(true/false)— 변수 휴리스틱이 변수 리스트를 동적으로 재정렬해야 하는지(true) 여부(false)를 지정. 동적 재정렬은 일반적으로 더 효율적이지만 어떤 경우에는 정적 순서가 더 빠를 수 있어요. 기본값은true예요.value_method(V)— 선택된 변수에 할당할 값을 고르는 휴리스틱을 지정:min— 가장 작은 것부터 가장 큰 것까지 값을 열거(기본값).max— 가장 큰 것부터 가장 작은 것까지 값을 열거.middle— 중간부터 경계까지 값을 열거.bounds— 경계부터 중간까지 값을 열거.random— 값을 무작위로 열거. 각 값은 한 번만 시도됨.bisect— X #=< M과 X #> M 사이에 재귀적 선택을 만들며, M은 변수 도메인의 중간점. 값은 따라서 가장 작은 것부터 가장 큰 것까지 시도됨. 이는 도메인 분할(domain splitting)이라고도 알려져 있음. 기본값은min이에요.
backtracks(B)— 열거 중 백트래킹 수와 B를 통일.
fd_labeling(Vars)는 fd_labeling(Vars, [])과 동일해요.
fd_labelingff(Vars)는 fd_labeling(Vars, [variable_method(ff)])과 동일해요.
Errors
- Vars가 부분 리스트이거나 변수인 요소 E를 가진 리스트 —
instantiation_error - Vars가 부분 리스트도 리스트도 아님 —
type_error(list, Vars) - Vars 리스트의 어떤 요소 E가 변수도 정수도 FD 변수도 아님 —
type_error(fd_variable, E) - Options가 부분 리스트이거나 변수인 요소 E를 가진 리스트 —
instantiation_error - Options가 부분 리스트도 리스트도 아님 —
type_error(list, Options) - Options 리스트의 어떤 요소 E가 변수도 레이블링 옵션도 아님 —
domain_error(fd_labeling_option, E)
Portability: GNU Prolog 술어.