InjectedSolutionConstraint

제한해야 하는 방문과 제한해야 하는 방식에 대한 정보를 포함하여 요청에 삽입된 솔루션입니다.

JSON 표현
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
필드
routes[]

object (ShipmentRoute)

삽입할 솔루션의 경로. 일부 경로는 원래 솔루션에서 생략될 수 있습니다. 경로 및 건너뛴 배송은 injectedFirstSolutionRoutes에 나열된 기본 유효성 가정을 충족해야 합니다.

skippedShipments[]

object (SkippedShipment)

주입할 용액 배송을 건너뛰었습니다. 일부는 원래 솔루션에서 생략될 수 있습니다. routes 필드를 참고하세요.

constraintRelaxations[]

object (ConstraintRelaxation)

0개 이상의 차량 그룹에 대해 제약 조건을 완화할 시기와 정도를 지정합니다. 이 필드가 비어 있으면 비어 있지 않은 모든 차량 경로가 완전히 제한됩니다.

ConstraintRelaxation

차량 그룹의 경우 방문에 대한 제약 조건을 완화할 기준점과 완화 수준을 지정합니다. skipped_shipment 필드에 표시된 배송은 건너뛸 수 있습니다. 즉, 실행할 수 없습니다.

JSON 표현
{
  "relaxations": [
    {
      object (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
필드
relaxations[]

object (Relaxation)

vehicleIndices에서 차량이 있는 경로의 방문에 적용될 모든 방문 제약조건 완화입니다.

vehicleIndices[]

integer

방문 제약 조건 relaxations가 적용되는 차량 색인을 지정합니다. 비어 있으면 기본값으로 간주되며 relaxations는 다른 constraintRelaxations에 지정되지 않은 모든 차량에 적용됩니다. 기본값은 최대 1개입니다. 즉, 제약 조건 완화 필드에는 최대 1개의 빈 vehicleIndices가 허용됩니다. 차량 색인은 여러 constraintRelaxations 내에서도 한 번만 나열할 수 있습니다.

interpretInjectedSolutionsUsingLabels가 true인 경우 차량 색인은 ShipmentRoute.vehicle_index와 동일하게 매핑됩니다 (fields 주석 참고).

휴식

relaxations가 비어 있으면 routes 모든 방문의 시작 시간과 순서가 완전히 제한되어 해당 경로에 새로운 방문이 삽입되거나 추가되지 않습니다. 또한 차량이 비어 있지 않은 경우 (즉, 방문 횟수가 없고 모델에서 usedIfRouteIsEmpty가 false로 설정되어 있지 않은 경우) routes의 차량 시작 및 종료 시간은 완전히 제한됩니다.

relaxations(i).level는 다음을 충족하는 방문 #j에 적용되는 제약조건 완화 수준을 지정합니다.

  • route.visits(j).start_time >= relaxations(i).threshold_time
  • j + 1 >= relaxations(i).threshold_visit_count

마찬가지로 차량 시동은 다음을 충족하는 경우 relaxations(i).level로 완화됩니다.

  • vehicleStartTime >= relaxations(i).threshold_time
  • relaxations(i).threshold_visit_count == 0 및 차량 끝은 다음을 충족하는 경우 relaxations(i).level로 완화됩니다.
  • vehicleEndTime >= relaxations(i).threshold_time
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

방문이 thresholdVisitCount를 충족하거나 thresholdTime를 충족하는 경우 휴식 수준을 적용하려면 동일한 level를 가진 두 개의 relaxations(thresholdVisitCount만 설정된 relaxationsthresholdTime만 설정된 relaxations)를 추가합니다. 방문이 여러 relaxations의 조건을 충족하면 가장 완화된 수준이 적용됩니다. 그 결과, 차량 시작부터 경로 방문까지 차량이 도착할 때까지 완화 수준은 더 완화됩니다. 즉, 경로가 진행됨에 따라 완화 수준은 감소하지 않습니다.

relaxations의 기준점 조건을 충족하지 않는 경로 방문의 타이밍과 순서는 완전히 제한되어 있으므로 이러한 시퀀스에 방문이 삽입되지 않을 수 있습니다. 또한 차량 시동 또는 종료가 휴식 조건을 충족하지 않으면 차량이 비어 있지 않는 한 시간이 고정됩니다.

JSON 표현
{
  "level": enum (Level),
  "thresholdTime": string,
  "thresholdVisitCount": integer
}
필드
level

enum (Level)

thresholdTime 및 이후 조건과 최소 thresholdVisitCount이(가) 충족될 때 적용되는 제약 조건 완화 수준입니다.

thresholdTime

string (Timestamp format)

완화 level이 적용될 수 있는 시점 또는 이후의 시간입니다.

RFC3339 UTC 'Zulu' 형식의 타임스탬프입니다(나노초 단위, 소수점 이하 9자리). 예를 들면 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"입니다.

thresholdVisitCount

integer

완화 level이(가) 적용될 수 있는 또는 그 이후의 방문수입니다. thresholdVisitCount가 0이거나 설정되지 않은 경우 level는 차량 시동 시 직접 적용될 수 있습니다.

route.visits_size() + 1인 경우 level는 차량 끝에만 적용될 수 있습니다. route.visits_size() + 1보다 크면 해당 경로에 level가 전혀 적용되지 않습니다.

수준

방문에 적용되는 다양한 제약조건 완화 수준 및 기준점 조건을 충족할 때 따르는 완화 수준을 표현합니다.

아래는 완화 시간을 높이기 위한 순서입니다.

열거형
LEVEL_UNSPECIFIED

암시적 기본 휴식 수준: 제약이 완화되지 않습니다. 즉, 모든 방문이 완전히 제한됩니다.

이 값은 level에서 명시적으로 사용하면 안 됩니다.

RELAX_VISIT_TIMES_AFTER_THRESHOLD 방문 시작 시간과 차량 시작/종료 시간은 제한되지만 각 방문은 동일한 차량에 바인딩된 상태로 유지되며 방문 시퀀스를 준수해야 합니다. 방문 시퀀스 사이 또는 그 앞에 방문을 삽입할 수 없습니다.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD RELAX_VISIT_TIMES_AFTER_THRESHOLD와 동일하지만 방문 시퀀스도 완화됩니다. 즉, 방문이 차량에 바인딩된 상태로 유지됩니다.
RELAX_ALL_AFTER_THRESHOLD RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD과 동일하지만 차량이 완화되기도 합니다. 기준점 시간 이후 방문은 완전히 무료이며 실적이 떨어질 수 있습니다.