부하 비용으로 요청

최적화 도구가 방문 간에 차량이 운반하는 하중을 고려하도록 하중 비용으로 요청합니다. 발생한 비용은 운반되는 ShipmentRoute.VehicleLoad의 양과 전환 거리 또는 기간 (cost_per_kilometer 또는 cost_per_traveled_hour 사용)에 따라 다릅니다.

하중 비용이 포함된 최소 요청 예

다음은 하중 비용이 포함된 요청의 일부 예입니다. 이 예에서 단일 차량은 총 weightKg 하중을 1, 000kg 이하로 운반할 수 있으며, 운반되는 weightKg 하중이 500kg을 초과하면 킬로미터당 1비용 단위가 발생합니다.

  {
    "model": {
      "vehicles": [{
        "loadLimits": {
          "weightKg": {
            "maxLoad": "1000",
            "costPerKilometer": {
              "loadThreshold": "500",
              "costPerUnitAboveThreshold": 1
            }
          }
        }
      }]
    }
  }
  

이 예의 하중 비용 계산은 다음과 같습니다.

cost = max(carried load - load threshold, 0) * distance * cost per unit above threshold

따라서 차량이 10km에 걸쳐 600의 weightKg 하중을 운반하는 경우 계산은 다음과 같습니다.

(600 - 500) * 10 * 1 = 1000 cost units

하중 비용은 무거운 하중을 운반할 때 차량 에너지 사용량 증가 또는 과도한 차량 하중으로 인해 발생하는 차량 마모와 같은 다양한 개념을 모델링하는 데 사용할 수 있습니다.

하중 비용이 포함된 또 다른 요청 예

다음은 임곗값 위와 아래 모두에서 이동 시간당 비용을 부과하는 하중 비용의 또 다른 예입니다.

  {
    "model": {
      "vehicles": [{
        "loadLimits": {
          "weightLbs": {
            "maxLoad": "1000",
            "costPerTraveledHour": {
              "loadThreshold": "900",
              "costPerUnitAboveThreshold": 10,
              "costPerUnitBelowThreshold": 1
            },
          },
        }
      }]
    }
  }
  

이 예의 하중 비용 계산은 다음과 같습니다.

cost = max(carried load - load threshold, 0) * time * cost per unit above threshold
  + min(carried load, load threshold) * time * cost per unit below threshold

따라서 차량이 5시간 동안 950의 weightLbs 하중을 운반하는 경우 계산은 다음과 같습니다.

max(950 - 900, 0) * 5 * 10 + min(950, 900) * 5 * 1 = 7000

이 예에서 weightLbs 하중 비용의 load_thresholdmax_load에 가깝습니다. cost_per_unit_above_threshold는 차량이 특히 무거운 하중으로 이동할 때 이동 시간당 높은 비용을 적용하여 차량의 마모를 증가시키거나 과도한 연료를 소비할 수 있는 경로에 페널티를 부과합니다. cost_per_unit_below_threshold는 차량이 운반하는 단위 중량당 비용을 임곗값까지 추가하여 차량이 더 많은 하중을 운반할 때 연료 소비가 증가함을 나타냅니다.

자주 묻는 질문(FAQ)

다음은 하중 비용에 관해 자주 묻는 질문(FAQ)입니다.

질문 답변
하중 비용은 어디에서 지정하나요? Vehicle.LoadLimit에서 하중 비용을 지정합니다.
하중 비용은 배송과 어떻게 일치하나요? 하중 비용은 하중 수요 유형이 차량의 하중 한도 유형(예: 중량 또는 부피)과 일치하는 배송에 적용됩니다. 하중 유형은 하중 수요 및 한도에 설명된 대로 임의의 문자열입니다.
하중 비용은 어떻게 표현되나요? 하중 비용은 전환 거리 또는 기간으로 표현됩니다. cost_per_kilometer를 사용하여 거리에 따른 비용을 지정하고 cost_per_traveled_hour를 사용하여 기간에 따른 비용을 지정합니다.
하중 비용은 언제 적용되나요? 차량 하중은 하중 비용의 load_threshold와 비교됩니다. cost_per_unit_above_threshold가 지정된 경우 차량의 하중이 에 비례하여 비용이 추가됩니다. load_threshold 공식을 사용하여 max(0, load - load_threshold). 이 지정된 경우 min(load, load_threshold) 수식을 사용하여 차량의 하중이 load_threshold 아래에 비례하여 비용이 추가됩니다.cost_per_unit_below_threshold
하중 비용 매개변수의 기본값은 무엇인가요? load_threshold, cost_per_unit_above_threshold, and cost_per_unit_below_threshold are all zero by default.
하중 비용은 어떤 단위로 표현되나요? 하중 비용은 global_duration_cost_per_hour 또는 Shipment.penalty_cost와 같은 다른 모든 비용 매개변수와 동일한 무차원 단위로 표현됩니다.
응답에서 하중 비용은 어디에서 찾을 수 있나요? 발생한 하중 비용은 응답 메시지의 metricsroute_metrics 속성에 표시됩니다. 예를 들어 발생한 cost_per_kilometermodel.vehicles.load_limits.cost_per_kilometer로 표시됩니다.

하중 비용에 관한 자세한 설명은 참조 문서 (REST, gRPC)를 참고하세요.

예: OptimizeTours 요청하기

OptimizeTours 요청은 REST 또는 gRPC를 사용하여 만들 수도 있습니다.

요청하기 전에 다음 매개변수를 사용자 환경에 적합한 값으로 바꿉니다.

  • OAuth 사용에 설명된 대로 애플리케이션 기본 사용자 인증 정보가 구성되어 있는지 확인합니다.
  • PROJECT_NUMBER_OR_ID를 클라우드 프로젝트 번호 또는 ID로 설정합니다.

    다음 명령어는 OptimizeTours 요청을 Route Optimization API로 전송하고 응답을 동기식으로 수신합니다.

    curl -X POST 'https://routeoptimization.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID:optimizeTours' \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    --data @- << EOM
    {
      "model": {
        "shipments": [
          {
            "deliveries": [
              {
                "arrivalLocation": {
                  "latitude": 37.789456,
                  "longitude": -122.390192
                },
                "duration": "250s"
              }
            ],
            "penaltyCost": 100.0,
            "loadDemands": {
              "weightKg": {
                "amount": 50
              }
            }
          },
          {
            "deliveries": [
              {
                "arrivalLocation": {
                  "latitude": 37.789116,
                  "longitude": -122.395080
                },
                "duration": "250s"
              }
            ],
            "penaltyCost": 30.0,
            "loadDemands": {
              "weightKg": {
                "amount": 10
              }
            }
          },
          {
            "deliveries": [
              {
                "arrivalLocation": {
                  "latitude": 37.795242,
                  "longitude": -122.399347
                },
                "duration": "250s"
              }
            ],
            "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",
                "costPerKilometer": {
                  "loadThreshold": "15",
                  "costPerUnitAboveThreshold": 1
                }
              }
            }
          }
        ]
      }
    }
    EOM

요청이 완료되면 응답 메시지가 전송됩니다.