라우팅 솔버는 측정기준이라는 객체를 사용하여 이동 시간 또는 차량이 픽업 및 배달을 하는 경우 운반하는 총 중량 에서 자세한 내용을 확인하실 수 있습니다. 라우팅 문제에 이러한 수량이 포함된 경우 제약 조건 또는 목표 함수를 사용하려면 측정기준을 정의하여 이를 지정해야 합니다.
이 섹션에서는 측정기준을 정의하고 사용하는 방법을 설명합니다.
측정기준의 예
다음은 이전 섹션의 몇 가지 측정기준 예입니다.
VRPTW 예는 추적할 측정기준을 만듭니다. 각 차량의 누적 이동 시간을 나타냅니다. 솔버는 크기를 사용하여 차량이 위치의 지정할 수 있습니다
CVRP 예는 수령 (예: 배송물 중량 또는 부피): 경로를 따라 차량이 운반하는 누적 하중입니다. 솔버는 크기를 사용하여 차량의 하중 제약 조건을 적용합니다. 용량을 초과할 수 없습니다.
아래 예에서는
AddDimension
드림
메서드를 사용하여 축소하도록 요청합니다.
Python
routing.AddDimension( callback_index, slack_max, capacity, fix_start_cumul_to_zero, dimension_name)
C++
routing.AddDimension( callback_index, slack_max, capacity, fix_start_cumul_to_zero, dimension_name)
자바
routing.addDimension( callbackIndex, slackMax, capacity, fixStartCumulToZero, dimensionName)
C#
routing.AddDimension( callbackIndex, slackMax, capacity, fixStartCumulToZero, dimensionName)
AddDimension
메서드에는 다음과 같은 입력이 있습니다.
callback_index
: 수량을 반환하는 콜백의 색인입니다. 이 콜백에 대한 해결사의 내부 참조인 색인은RegisterTransitCallback
또는RegisterUnitaryTransitCallback
메서드와 같은 메서드를 지원합니다.slack_max
: 대기를 나타내는 데 사용되는 변수인 slack의 최댓값입니다. 위치에 광고를 게재합니다. 자세한 내용은 아래의 Slack 변수를 참고하세요. 확인하세요. 문제에 대기 시간이 없다면 일반적으로slack_max
를 설정할 수 있습니다. 0으로 설정합니다.capacity
: 각 경로를 따라 누적된 총 수량의 최댓값입니다.capacity
를 사용하여 CVRP입니다. 문제에 제약 조건이 있는 경우capacity
을 경로에 제한을 두지 않는 경우(예: 모든 콜백을 정의하는 데 사용되는 행렬 또는 배열의 항목입니다.fix_start_cumulative_to_zero
: 불리언 값입니다. true인 경우 누적 값은 수량이 0에서 시작합니다. 대부분의 경우True
로 설정해야 합니다. 하지만 VRPTW 또는 리소스 제약, 일부 차량 시간 제한으로 인해 시간 0 이후에 시작해야 할 수 있으므로fix_start_cumulative_to_zero
를False
로 설정하세요.dimension_name
: 측정기준의 이름(예:'Distance'
) 프로그램의 다른 위치에서 변수에 액세스하는 데 사용할 수 있습니다.
CVRP 프로그램은
AddDimensionWithVehicleCapacity
드림
메서드를 사용하여 축소하도록 요청합니다. 이 메서드는 각 차량에 대해 하나의 항목이 있는 용량 배열을 사용합니다.
반면에 AddDimension
는 capacity
에 단일 값을 사용하므로 모든
차량의 용량이 동일한 것으로 가정됩니다.)
RoutingModel
를 참고하세요.
참조 페이지를 참조하세요.
섹션 솔루션 기간을 목록 또는 배열에 저장 는 목록 또는 배열의 측정기준에 누적 데이터를 저장하는 함수를 나타냅니다.
Slack 변수
이것은 시간을 절약할 수 있습니다. 다음과 같이 가정해 보겠습니다. 차량이 경로의 한 단계에서 i 위치로부터 위치 j로 이동하는 경우:
- i에서 차량의 누적 이동 시간은 100분입니다.
- j에서 차량의 누적 이동 시간은 200분입니다.
- i에서 j까지의 이동 시간은 75분입니다.
차량이 도착 시 위치 i를 즉시 떠날 수 없거나 누적이 불가능합니다. 위치 j의 시간은 175가 됩니다. 대신, 차량이 대기 시간인 출발 전 위치 i 즉, 위치 i의 지연은 25입니다.
VRPTW에서는 차량이 대기해야 할 수 있으므로 VRPTW에서 슬랙을 허용해야 합니다.
특정 위치 방문 시 시간 제한으로 인해 발생합니다. 이와 같은 문제에서는
slack_max
을 차량이 대기할 수 있는 최대 시간으로 설정합니다.
위치를 지정해야 합니다. 사용자가
slack_max
를 매우 큰 수로 설정하면 됩니다.
반면 CVRP의 경우 누적 부하 i
에서
j
는 항상 i
의 수요와 같으므로 지연이 없습니다. 다음과 같은 문제의 경우
이 경우 slack_max
를 0으로 설정하면 됩니다.
다음으로 느슨함의 공식 정의를 알려 드리겠습니다. 내부적으로 측정기준은 경로를 따라 누적되는 수량과 관련된 두 가지 유형의 변수:
- 대중교통 변수: 각 단계에서의 수량 증가 또는 감소
경로
i -> j
가 경로의 한 단계인 경우 대중교통 변수는i
입니다. 대중교통 콜백의 경우 대중교통 매트릭스의j
항목 또는 위치 i의 콜백 값 (콜백이 한 위치에만 의존하는 경우) - 누적 변수: 각 위치의 총 누적 수량입니다. 나
는
dimension_name.CumulVar(i)
예를 보려면 다음을 참조하세요. 기간 제약 조건 가상 현실을 볼 수 있습니다.
차량이 한 단계에서 i
위치에서 j
위치로 이동한다고 가정하면
Slack은 다음과 같이 이러한 변수와 관련이 있습니다.
<ph type="x-smartling-placeholder">
slack(i) = cumul(j) - cumul(i) - transit(i, j)</ph>
측정기준에 대한 자세한 내용은 다음을 참고하세요.
RoutingDimension
드림
참조 섹션에 나와 있습니다.