부하 수요 및 한도

이 가이드에서는 loadDemandsloadLimits에 대해 설명하고 각각의 관계에 대해 설명합니다. 있습니다.

수령 및 배송 시간 기간 제약 조건에서 언급했듯이 OptimizeToursRequest 메시지 (REST, gRPC)에는 최적화 중인 문제에 대한 제약조건을 지정하는 속성을 사용합니다. 여러 개 OptimizeToursRequest 속성은 로드 제약조건을 나타냅니다.

차량과 배송은 배송 시 고려해야 할 물리적 속성을 경로를 계획합니다.

  • 차량: loadLimits 속성은 처리할 수 있습니다. Vehicle 메시지 보기 (REST, gRPC) 문서를 참조하세요.
  • 배송: loadDemands 속성은 특정 상품의 적재량을 지정합니다. 소비하게 됩니다 Shipment 메시지 보기 (REST, gRPC) 문서를 참조하세요.

이 두 제약 조건을 함께 사용하면 최적화 도구에서 가장 적합한 방식으로 차량에 배송물을 적절하게 할당합니다. 선적 수요에 따라 달라집니다

이 문서의 나머지 부분에서는 loadLimitsloadDemands에 관해 자세히 설명합니다.

부하 수요 및 한도: 유형

각 부하 수요와 한도 제약조건을 유형으로 표현할 수 있습니다.

다음 예와 같이 자체 로드 유형 집합을 제공할 수 있습니다.

  • 무게
  • 볼륨
  • 선형 측정
  • 운송하는 물품 또는 장비의 이름

이 가이드에서는 weightKg를 예시 유형으로 사용합니다.

Shipment.loadDemandsVehicle.loadLimits 모두 프로토콜 버퍼를 사용합니다. map 유형: 로드 유형을 나타내는 string 키를 포함합니다.

Shipment.loadDemands 값은 Load 메시지 (REST, gRPC)를 사용합니다. Load 메시지에는 용량을 나타내는 단일 amount 속성이 있습니다. 이(가) 지정된 유형의 배송을 완료해야 합니다.

Vehicle.loadLimits 값은 LoadLimit 메시지 (REST, gRPC)를 사용합니다. LoadLimit 메시지에는 maxLoad와 함께 여러 속성이 있습니다. 지정된 유형에서 차량의 최대 적재량을 나타냅니다.

배송의 loadDemands는 다음 경우에만 할당된 차량의 loadLimits를 사용합니다. 두 개의 로드 유형 키가 일치합니다 예를 들어 loadDemands/:

"loadDemands": {
  "weightKg": {
    "amount": 50
  }
}

배송에 필요한 weightKg 유형의 적재 단위 50개 완료되었습니다. 다음 차량의 loadLimits 보유:

"loadLimits": {
  "weightKg": {
    "maxLoad": 100
  }
}

상품maxLoad weightKg 유형이 배송 상품의 loadDemands보다 크거나 같음 weightKg 유형입니다. 단, loadLimits이(가) 있는 차량은 다음과 같습니다.

"loadLimits": {
  "equipmentRackStorage": {
    "maxLoad": 10
  }
}

Google Cloud Storage 버킷이 없으므로 weightKg 용량이 무제한으로 수하물 제한이 weightKg이므로 차량이 배송물의 있습니다.

화물과 차량 간의 화물 환승

배송 상품이 차량에 의해 픽업 및 배송될 때 배송의 배송 상품과 차량 간에 loadDemand의 이체가 이루어집니다. 이 차량의 로드는 OptimizeToursResponse 메시지의 (REST, gRPC)routes.transitions 항목을 사용합니다. 시퀀스는 다음과 같습니다.

  1. 배송에 필요한 적재 용량은 loadDemand로 정의됩니다.
  2. 배송이 할당된 차량 및 차량의 vehicleLoads이(가) 배송의 loadDemand 금액만큼 증가합니다. 이 응답에서 양성 visits.loadDemands으로 표시됨 메시지가 표시됩니다.
  3. 차량이 배송물을 배송하고 차량의 vehicleLoads이 감소합니다. 배송된 배송 상품의 loadDemand 금액만큼 환불됩니다. 환승: 응답 메시지에서 음수 visits.loadDemands로 표현됩니다.

차량의 vehicleLoads은 어느 시점에서든 지정된 loadLimits을(를) 초과할 수 없습니다. 있습니다.

부하 수요 및 한도가 포함된 전체 예시

로드 수요 및 한도

{
  "populatePolylines": false,
  "populateTransitionPolylines": false,
  "model": {
    "globalStartTime": "2023-01-13T16:00:00Z",
    "globalEndTime": "2023-01-14T16:00:00Z",
    "shipments": [
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789456,
              "longitude": -122.390192
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 100.0,
        "loadDemands": {
          "weightKg": {
            "amount": 50
          }
        }
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789116,
              "longitude": -122.395080
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 15.0,
        "loadDemands": {
          "weightKg": {
            "amount": 10
          }
        }
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.795242,
              "longitude": -122.399347
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 50.0,
        "loadDemands": {
          "weightKg": {
            "amount": 80
          }
        }
      }
    ],
    "vehicles": [
      {
        "endLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "startLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "costPerHour": 40.0,
        "costPerKilometer": 10.0,
        "loadLimits": {
          "weightKg": {
            "maxLoad": 100
          }
        }
      }
    ]
  }
}
    

예시 요청에는 여러 로드 관련 매개변수가 포함되어 있습니다.

  • shipments[0]의 로드 수요는 50weightKg입니다.
  • shipments[1]의 로드 수요는 10 weightKg입니다.
  • shipments[2]의 로드 수요는 80weightKg입니다.
  • vehicles[0]의 로드 한도는 weightKg 100개입니다.

로드 수요 및 한도

{
  "routes": [
    {
      "vehicleStartTime": "2023-01-13T16:00:00Z",
      "vehicleEndTime": "2023-01-13T16:43:27Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2023-01-13T16:00:00Z",
          "detour": "0s",
          "loadDemands": {
            "weightKg": {
              "amount": "50"
            }
          }
        },
        {
          "shipmentIndex": 1,
          "isPickup": true,
          "startTime": "2023-01-13T16:02:30Z",
          "detour": "150s",
          "loadDemands": {
            "weightKg": {
              "amount": "10"
            }
          }
        },
        {
          "startTime": "2023-01-13T16:08:55Z",
          "detour": "150s",
          "loadDemands": {
            "weightKg": {
              "amount": "-50"
            }
          }
        },
        {
          "shipmentIndex": 1,
          "startTime": "2023-01-13T16:16:37Z",
          "detour": "343s",
          "loadDemands": {
            "weightKg": {
              "amount": "-10"
            }
          }
        },
        {
          "shipmentIndex": 2,
          "isPickup": true,
          "startTime": "2023-01-13T16:27:07Z",
          "detour": "1627s",
          "loadDemands": {
            "weightKg": {
              "amount": "80"
            }
          }
        },
        {
          "shipmentIndex": 2,
          "startTime": "2023-01-13T16:36:26Z",
          "detour": "0s",
          "loadDemands": {
            "weightKg": {
              "amount": "-80"
            }
          }
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-13T16:00:00Z",
          "vehicleLoads": {
            "weightKg": {}
          }
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-13T16:02:30Z",
          "vehicleLoads": {
            "weightKg": {
              "amount": "50"
            }
          }
        },
        {
          "travelDuration": "235s",
          "travelDistanceMeters": 795,
          "waitDuration": "0s",
          "totalDuration": "235s",
          "startTime": "2023-01-13T16:05:00Z",
          "vehicleLoads": {
            "weightKg": {
              "amount": "60"
            }
          }
        },
        {
          "travelDuration": "212s",
          "travelDistanceMeters": 791,
          "waitDuration": "0s",
          "totalDuration": "212s",
          "startTime": "2023-01-13T16:13:05Z",
          "vehicleLoads": {
            "weightKg": {
              "amount": "10"
            }
          }
        },
        {
          "travelDuration": "380s",
          "travelDistanceMeters": 1190,
          "waitDuration": "0s",
          "totalDuration": "380s",
          "startTime": "2023-01-13T16:20:47Z",
          "vehicleLoads": {
            "weightKg": {}
          }
        },
        {
          "travelDuration": "409s",
          "travelDistanceMeters": 1371,
          "waitDuration": "0s",
          "totalDuration": "409s",
          "startTime": "2023-01-13T16:29:37Z",
          "vehicleLoads": {
            "weightKg": {
              "amount": "80"
            }
          }
        },
        {
          "travelDuration": "171s",
          "travelDistanceMeters": 665,
          "waitDuration": "0s",
          "totalDuration": "171s",
          "startTime": "2023-01-13T16:40:36Z",
          "vehicleLoads": {
            "weightKg": {}
          }
        }
      ],
      "metrics": {
        "performedShipmentCount": 3,
        "travelDuration": "1407s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "1200s",
        "totalDuration": "2607s",
        "travelDistanceMeters": 4812,
        "maxLoads": {
          "weightKg": {
            "amount": "80"
          }
        }
      },
      "routeCosts": {
        "model.vehicles.cost_per_kilometer": 48.12,
        "model.vehicles.cost_per_hour": 28.966666666666665
      },
      "routeTotalCost": 77.086666666666659
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 3,
      "travelDuration": "1407s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "1200s",
      "totalDuration": "2607s",
      "travelDistanceMeters": 4812,
      "maxLoads": {
        "weightKg": {
          "amount": "80"
        }
      }
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2023-01-13T16:00:00Z",
    "latestVehicleEndTime": "2023-01-13T16:43:27Z",
    "totalCost": 77.086666666666659,
    "costs": {
      "model.vehicles.cost_per_hour": 28.966666666666665,
      "model.vehicles.cost_per_kilometer": 48.12
    }
  }
}
    

추가된 로드 제약 조건은 visits의 순서에 영향을 미칩니다.

  1. shipment[0] 수령 완료
  2. shipment[1] 수령 완료
  3. shipment[0] 배송 완료
  4. shipment[1] 배송 완료
  5. shipment[2] 수령 완료
  6. shipment[2] 배송 완료

이 주문은 다음 위치에 차량이 3건의 배송을 완료할 수 없음을 반영합니다. 총 합계가 loadDemands 차량의 loadLimits입니다.

visits 항목에는 Visit가 완료됩니다. 양수인 화물 값은 화물 적재를 나타내며 음수 값은 배송 하역을 나타냅니다.

transitions 항목에는 Transition입니다. 예를 들어 transitions[2]weightKg 로드는 60입니다. 이는 shipment[0]shipment[1]의 결합된 부하를 나타냅니다.

측정항목 객체 routes[0].metricsmetrics.aggregatedRouteMetrics 포함 maxLoads 속성 weightKg 유형의 값은 80으로, shipments[2]을(를) 목적지로 이송한 차량 경로의 일부 배송 위치

소프트 로드 한도 제약 조건

수령 및 배송 기간 기간에 설명된 기간과 같음 제약 조건: 로드 제한 제약 조건에는 하드 및 소프트 변형이 있습니다. 이 LoadLimit 메시지의 maxLoad 속성은 엄격한 제약 조건을 표현합니다. 차량은 지정된 기간의 maxLoad 값을 초과하는 짐을 운반해서는 안 됩니다. 있습니다. softMaxLoad 속성과 costPerUnitAboveSoftMax 속성은 제약 조건으로 인해 모든 단위가 softMaxLoad를 초과하면 costPerUnitAboveSoftMax 비용.

소프트 로드 제한 제약 조건은 다음과 같은 여러 용도로 사용됩니다.

  • 필요한 최소 수보다 많은 차량에 걸쳐 배송 균형을 맞추는 경우 가장 비용 효율적일 때
  • 운전자에게 부담을 줄 수 있는 물건의 수를 원하는 대로 특정 경로 픽업 및 배달
  • 마모를 제한하기 위해 최대 물리적 용량 이하로 적재하는 데 유지보수 비용 절감

하드 및 소프트 로드 제한 제약 조건을 함께 사용할 수 있습니다. 예를 들어 하드 화물 한도는 차량이 안전하게 운반할 수 있는 화물의 최대 중량을 나타낼 수 있습니다. 또는 한 번에 차량에 실을 수 있는 최대 품목 수를 정하는 반면, 소프트 로드 한도는 과세 대상 상품의 최대 중량 또는 수일 수 있습니다. 차량에 모든 것을 장착할 수 있는 운전자의 능력에 따라 달라질 수 있습니다.