부하 비용으로 요청

로드 비용으로 요청을 보내 최적화 도구가 방문 간에 차량이 운반하는 로드를 고려하도록 합니다. 발생한 비용은 전송된 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시간 동안 weightLbs 로드 950을 운반하는 경우 계산은 다음과 같습니다.

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)

다음은 로드 비용에 관해 자주 묻는 질문입니다.

질문 답변
로드 비용은 어디에서 지정하나요? Vehicle.LoadLimit에서 로드 비용을 지정합니다.
로드 비용은 어떻게 배송과 일치하나요? 적재 비용은 적재 수요 유형이 중량 또는 부피와 같은 차량의 적재 한도 유형과 일치하는 배송에 적용됩니다. 로드 유형은 로드 수요 및 제한에 설명된 대로 임의의 문자열입니다.
부하 비용은 어떻게 표시되나요? 부하 비용은 전환 거리 또는 시간으로 표현됩니다. cost_per_kilometer를 사용하여 거리 측면에서 비용을 지정하고 cost_per_traveled_hour를 사용하여 기간 측면에서 비용을 지정합니다.
로드 비용은 언제 적용되나요? 차량 부하가 부하 비용의 load_threshold와 비교됩니다. cost_per_unit_above_threshold가 지정되면 max(0, load - load_threshold) 수식을 사용하여 load_threshold 이상의 차량 부하에 비례하여 비용이 추가됩니다. cost_per_unit_below_threshold가 지정되면 min(load, load_threshold) 수식을 사용하여 load_threshold 아래 차량의 짐에 비례하여 비용이 추가됩니다.
부하 비용 매개변수의 기본값은 무엇인가요? load_threshold, cost_per_unit_above_threshold, cost_per_unit_below_threshold는 기본적으로 모두 0입니다.
부하 비용은 어떤 단위로 표시되나요? 부하 비용은 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를 Cloud 프로젝트 번호 또는 ID로 설정합니다.

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

    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

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