이 섹션에서는 라우팅 솔버의 몇 가지 옵션을 설명합니다.
검색 한도
검색 한도는 최대 시간 또는 발견된 솔루션 수와 같은 지정된 한도에 도달한 후 솔버를 종료합니다. 문제 해결사의 검색 매개변수를 통해 검색 한도를 설정할 수 있습니다. 예시는 시간 제한을 참조하세요.
다음 표에서는 가장 일반적인 검색 한도를 설명합니다.
이름 | 유형 | 기본 | 설명 |
---|---|---|---|
solution_limit
|
int64 | Kint64max | 검색 중에 생성되는 솔루션 수를 제한합니다. |
time_limit.seconds
|
int64 | Kint64max | 검색에 소요된 시간으로 초 단위로 제한합니다. |
lns_time_limit.seconds
|
int64 | 100 | 소요 시간(초): 시간: 각 로컬 검색 인접 항목의 검색 완료. |
첫 번째 솔루션 전략
첫 번째 솔루션 전략은 문제 해결사가 초기 솔루션을 찾기 위해 사용하는 방법입니다. 다음 표에는 first_solution_strategy
의 옵션이 나와 있습니다.
옵션 | 설명 |
---|---|
AUTOMATIC
|
솔버가 해결되는 모델에 따라 사용할 전략을 감지하도록 합니다. |
PATH_CHEAPEST_ARC
|
경로 '시작' 노드에서 시작하여 최저 경로 세그먼트를 만드는 노드에 연결한 후 경로에 추가된 마지막 노드를 반복하여 경로를 확장합니다. |
PATH_MOST_CONSTRAINED_ARC
|
PATH_CHEAPEST_ARC 와 유사하지만 원호는 비교 기반 선택기로 평가되며 가장 제한적인 원호를 우선으로 합니다. 라우팅 모델에 선택기를 할당하려면 ArcIsMoreConstrainedThanArc() 메서드를 사용합니다. |
EVALUATOR_STRATEGY
|
원호 비용은 SetFirstSolutionEvaluator() 에 전달된 함수를 사용하여 평가된다는 점을 제외하면 PATH_CHEAPEST_ARC 와 유사합니다. |
SAVINGS
|
저축 알고리즘 (Clarke & Wright) 참조 클라크, G. & Wright, J.W. '중앙역에서 출발하여 여러 배송 지점까지의 차량 예약', 운영 연구, Vol. 12, 1964, pp. 568-581. |
SWEEP
|
스윕 알고리즘 (렌, 홀리데이). 분기별 (1970~1977년), Vol. 23, No. 3 (9월), Nothony Wren & Alan Holliday 1972), pp. 333-344. |
CHRISTOFIDES
|
Christodides 알고리즘 (실제로 최대 일치 대신 최대 일치를 사용하는 Christofides 알고리즘의 변형으로, 측정항목 이동 영업 담당자에게 근사치의 3/2 계수를 보장하지 않음) 노드를 삽입할 수 없을 때까지 경로를 확장하여 일반 차량 라우팅 모델에서 작동합니다. 니코 크리스토피데스, 여행 영업사원의 새로운 휴리스틱에 대한 최악의 사례, 보고서 388, 산업경영대학원, 1976년 |
ALL_UNPERFORMED
|
모든 노드를 비활성화합니다. 노드가 선택사항인 경우에만 (유한 페널티 비용이 있는 분리 제약조건의 요소) 솔루션을 찾습니다. |
BEST_INSERTION
|
가장 저렴한 위치에 가장 저렴한 노드를 삽입하여 솔루션을 반복적으로 빌드합니다. 삽입 비용은 라우팅 모델의 전역 비용 함수를 기준으로 합니다. 2012년 2월 현재 선택적 노드가 있는 모델에서만 작동합니다 (유한 페널티 비용 적용). |
PARALLEL_CHEAPEST_INSERTION
|
가장 저렴한 위치에 가장 저렴한 노드를 삽입하여 솔루션을 반복적으로 빌드합니다. 삽입 비용은 원호 비용 함수를 기준으로 합니다. BEST_INSERTION 보다 빠릅니다. |
LOCAL_CHEAPEST_INSERTION
|
각 노드를 가장 저렴한 위치에 삽입하여 솔루션을 반복적으로 빌드합니다. 삽입 비용은 원호 비용 함수를 기준으로 합니다. 삽입을 위해 선택한 노드에 따라 PARALLEL_CHEAPEST_INSERTION 와 다릅니다. 여기에서는 노드가 생성 순서대로 고려됩니다. PARALLEL_CHEAPEST_INSERTION 보다 빠릅니다. |
GLOBAL_CHEAPEST_ARC
|
가장 저렴한 경로 세그먼트를 생성하는 두 노드를 반복적으로 연결합니다. |
LOCAL_CHEAPEST_ARC
|
후속 바인딩이 없는 첫 번째 노드를 선택하고 가장 저렴한 경로 세그먼트를 생성하는 노드에 연결합니다. |
FIRST_UNBOUND_MIN_VALUE
|
결합되지 않은 후속 항목이 있는 첫 번째 노드를 선택하고 사용 가능한 첫 번째 노드에 연결합니다. 이는 ASSIGN_MIN_VALUE 와 결합된 CHOOSE_FIRST_UNBOUND 전략 (constraint_solver.h)과 동일합니다. |
검색 상태
라우팅 모델의 status
메서드를 사용하여 검색 상태를 반환할 수 있습니다.
다음은 검색 상태를 출력하는 Python 코드입니다.
print("Solver status: ", solver.status())
이렇게 하면 다음 의미를 가진 정수가 출력됩니다.
가치 | 설명 |
---|---|
0 |
ROUTING_NOT_SOLVED : 문제가 아직 해결되지 않았습니다. |
1 |
ROUTING_SUCCESS : 문제가 해결되었습니다. |
2
|
ROUTING_PARTIAL_SUCCESS_LOCAL_OPTIMUM_NOT_REACHED : RoutingModel.Solve() 를 호출한 후 문제가 해결되었습니다. 단, 로컬 최적화에 도달하지 못했습니다. 더 많은 시간을 두면 솔루션을 개선할 수 있습니다. |
3 |
ROUTING_FAIL : 문제에 대한 해결책을 찾을 수 없습니다. |
4 |
ROUTING_FAIL_TIMEOUT : 솔루션을 찾기 전에 제한 시간에 도달했습니다. |
5 |
ROUTING_INVALID : 모델, 모델 매개변수 또는 플래그가 잘못되었습니다. |
6 |
ROUTING_INFEASIBLE : 문제를 해결할 수 없는 것으로 확인되었습니다. |
지역 검색 옵션
다음 표에는 로컬 검색 전략 (메타유리학이라고도 함) 옵션이 나열되어 있습니다. 이러한 옵션을 설정하는 예는 검색 전략 변경을 참고하세요.
옵션 | 설명 |
---|---|
AUTOMATIC |
문제 해결사가 메타온을 선택하도록 합니다. |
GREEDY_DESCENT |
로컬 최솟값에 도달할 때까지 지역 검색 인접 항목의 개선 (비용 절감)을 허용합니다. |
GUIDED_LOCAL_SEARCH |
가이드가 있는 지역 검색을 사용하여 지역 최솟값을 제외합니다. (안내 지역 검색 참조) 이는 일반적으로 차량 라우팅에 가장 효율적인 메타 태그입니다. |
SIMULATED_ANNEALING |
시뮬레이션된 어닐링을 사용하여 국소 최솟값을 이스케이프합니다 (시뮬레이션된 어닐링 참고). |
TABU_SEARCH |
Tabu 검색을 사용하여 로컬 최솟값을 참조합니다 (예: Tabu Search). |
GENERIC_TABU_SEARCH |
솔루션의 객관적 값에 대한 테이블 검색을 사용하여 로컬 최솟값을 이스케이프합니다. |
전파 제어
이름 | 유형 | 기본 | 설명 |
---|---|---|---|
use_full_propagation
|
bool | true | 라우팅 모델에서 전파 전파만 사용하는 대신 전체 전파를 통해 제약 조건을 사용합니다. 전체 전파는 깊이 우선 검색을 사용하거나 보조 변수의 값을 확정하기 위해 강력한 전파가 필요한 모델에만 필요합니다. 이 설정을 true로 변경하면 대부분의 경우 검색 속도가 느려지고 모든 경우에 메모리 사용량이 증가합니다. |