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에 지정되지 않은 모든 차량에 적용됩니다. 기본값은 최대 하나일 수 있습니다. 즉, 제약 조건 완화 필드는 최대 하나만 비어 있는 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만 설정하고 다른 하나는 thresholdTime만 설정합니다. 방문이 여러 relaxations의 조건을 충족하는 경우 가장 완화된 수준이 적용됩니다. 따라서 차량 시작부터 경로 방문 순서대로 차량 종료까지 완화 수준이 더 완화됩니다. 즉, 경로가 진행될수록 완화 수준이 감소하지 않습니다.

relaxations의 기준 조건을 충족하지 않는 경로 방문의 타이밍과 순서는 완전히 제한되며 이러한 순서에 방문을 삽입할 수 없습니다. 또한 차량이 비어 있지 않은 경우 차량 시작 또는 종료가 완화 조건을 충족하지 않으면 시간이 고정됩니다.

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

enum (Level)

thresholdTime 이상 및 thresholdVisitCount 이상의 조건이 충족될 때 적용되는 제약 조건 완화 수준입니다.

thresholdTime

string (Timestamp format)

완화 level를 적용할 수 있는 시간 또는 그 이후의 시간입니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

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와 동일하지만 차량도 완화됩니다. 기준 시간 또는 그 이후에는 방문이 완전히 무료이며 실행되지 않을 수도 있습니다.