Parametry modelu kosztu

Komunikat OptimizeToursRequest (REST, gRPC) zawiera kilka właściwości związanych z kosztami. Łącznie te parametry kosztu przedstawiają model kosztów żądania. Model kosztów uwzględnia wiele ogólnych celów optymalizacji żądania, takich jak:

  • Preferowanie szybszych tras Vehicle zamiast krótszych lub na odwrót
  • Określenie, czy koszt wyświetlenia obiektu Shipment jest wart wartości ukończenia, do którego doprowadziły komponenty Shipment
  • Odbiór i dostawa w wyznaczonych przedziałach czasowych tylko wtedy, gdy jest to opłacalne,

Zobacz przykładowe żądanie z kosztami

{
  "model": {
    "globalStartTime": "2023-01-13T16:00:00-08:00",
    "globalEndTime": "2023-01-14T16:00:00-08:00",
    "shipments": [
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789456,
              "longitude": -122.390192
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 100.0
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789116,
              "longitude": -122.395080
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 5.0
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.795242,
              "longitude": -122.399347
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 50.0
      }
    ],
    "vehicles": [
      {
        "endLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "startLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "costPerHour": 40.0,
        "costPerKilometer": 10.0
      }
    ]
  }
}
    

Vehicle właściwości kosztu

Komunikat Vehicle (REST, gRPC) ma kilka właściwości kosztów:

  • Vehicle.cost_per_hour: reprezentuje koszt obsługi pojazdu na godzinę, w tym czas przewozu, czas oczekiwania, wizyty i przerwy.
  • Vehicle.cost_per_kilometer: reprezentuje koszt przebytego kilometra pojazdem.
  • Vehicle.cost_per_traveled_hour: reprezentuje koszt posiadania pojazdu tylko w transporcie, z wyłączeniem czasu oczekiwania, wizyty i przerwy.

Te parametry kosztów umożliwiają optymalizatorowi zrównoważenie czasu i odległości. Koszty związane z zoptymalizowaną trasą są wyświetlane w wiadomości z odpowiedzią jako metrics.costs:

Gdy wartość costPerHour rośnie, optymalizator próbuje znaleźć szybsze trasy, które mogą nie być najkrótsze. W tym przykładzie najszybsza trasa jest najkrótsza, więc zmiany parametrów kosztów mają niewielki wpływ.

Shipment właściwości kosztu

Komunikat Shipment (REST, gRPC) też zawiera kilka parametrów kosztów:

  • Shipment.penalty_cost to koszt poniesiony w wyniku pominięcia dostawy.
  • Shipment.VisitRequest.cost reprezentuje koszt konkretnego odbioru lub dostawy. Służy głównie do uzyskania kompromisu kosztów pomiędzy różnymi opcjami odbioru lub dostawy w przypadku jednej przesyłki.

Parametry kosztu funkcji Shipment korzystają z tych samych jednostek bezwymiarowych co parametry kosztu typu Vehicle. Koszt poniesiony w całości Shipment przekracza koszt kary. Element Shipment nie jest uwzględniony na trasie żadnej z instancji Vehicle i zamiast tego pojawia się na liście skipped_shipments w wiadomości z odpowiedzią.

ShipmentModel właściwości kosztu

Komunikat ShipmentModel (REST, gRPC) zawiera 1 właściwości kosztową globalDurationCostPerHour. Koszty są naliczane na podstawie łącznego czasu potrzebnego na wykonanie ShipmentRoute przez wszystkie pojazdy. Jeśli zwiększysz wartość globalDurationCostPerHour, priorytetem będzie wcześniejsze zakończenie wszystkich dostaw.

Właściwości kosztu odpowiedzi w optymalizacji trasy

Komunikat OptimizeToursResponse (REST, gRPC) ma właściwości kosztowe, które reprezentują koszty ponoszone w procesie realizacji ShipmentRoute. Usługi metrics.costs i metrics.totalCost odzwierciedlają liczbę jednostek kosztów poniesionych we wszystkich trasach w odpowiedzi. Każdy wpis routes ma właściwości routeCosts i routeTotalCosts, które reprezentują koszty związane z konkretną trasą.

Wyświetl odpowiedź na przykładowe żądanie z kosztami

{
  "routes": [
    {
      "vehicleStartTime": "2023-01-14T00:00:00Z",
      "vehicleEndTime": "2023-01-14T00:28:22Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2023-01-14T00:00:00Z",
          "detour": "0s"
        },
        {
          "shipmentIndex": 2,
          "isPickup": true,
          "startTime": "2023-01-14T00:02:30Z",
          "detour": "150s"
        },
        {
          "startTime": "2023-01-14T00:08:55Z",
          "detour": "150s"
        },
        {
          "shipmentIndex": 2,
          "startTime": "2023-01-14T00:21:21Z",
          "detour": "572s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-14T00:00:00Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-14T00:02:30Z"
        },
        {
          "travelDuration": "235s",
          "travelDistanceMeters": 795,
          "waitDuration": "0s",
          "totalDuration": "235s",
          "startTime": "2023-01-14T00:05:00Z"
        },
        {
          "travelDuration": "496s",
          "travelDistanceMeters": 1893,
          "waitDuration": "0s",
          "totalDuration": "496s",
          "startTime": "2023-01-14T00:13:05Z"
        },
        {
          "travelDuration": "171s",
          "travelDistanceMeters": 665,
          "waitDuration": "0s",
          "totalDuration": "171s",
          "startTime": "2023-01-14T00:25:31Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 2,
        "travelDuration": "902s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "800s",
        "totalDuration": "1702s",
        "travelDistanceMeters": 3353
      },
      "routeCosts": {
        "model.vehicles.cost_per_kilometer": 33.53,
        "model.vehicles.cost_per_hour": 18.911111111111111
      },
      "routeTotalCost": 52.441111111111113
    }
  ],
  "skippedShipments": [
    {
      "index": 1
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 2,
      "travelDuration": "902s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "800s",
      "totalDuration": "1702s",
      "travelDistanceMeters": 3353
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2023-01-14T00:00:00Z",
    "latestVehicleEndTime": "2023-01-14T00:28:22Z",
    "totalCost": 57.441111111111113,
    "costs": {
      "model.vehicles.cost_per_kilometer": 33.53,
      "model.vehicles.cost_per_hour": 18.911111111111111,
      "model.shipments.penalty_cost": 5
    }
  }
}
    

W przykładowej odpowiedzi metrics.costs najwyższego poziomu to:

{
  "metrics": {
    ...
    "costs": {
      "model.vehicles.cost_per_hour": 18.911111111111111,
      "model.vehicles.cost_per_kilometer": 33.53,
      "model.shipments.penalty_cost": 5
    }
  }
}

Wartość model.shipments.penalty_cost reprezentuje koszty poniesione w związku z pominiętymi dostawami. Właściwość skippedShipments podaje, które przesyłki zostały pominięte.

W tym przykładzie pominięto tylko parametr model.shipments[1] w przykładowym żądaniu. model.shipments[1] ma koszt kary wynoszący 5 jednostek, co odpowiada łącznej wartości klucza model.shipments.penalty_cost w przykładowej odpowiedzi. Przesyłka jest krótka penaltyCost w porównaniu z urządzeniami Vehicle 40,0 costPerHour i 10,0costPerKilometer tańszymi jest pominięcie przesyłki niż jej ukończenie.

Temat dla zaawansowanych: koszty i ograniczenia miękkie

Kilka właściwości komunikatu OptimizeToursRequest (REST, gRPC) reprezentuje miękkie ograniczenia, czyli ograniczenia, które powodują naliczanie kosztów, gdy nie można ich spełnić.

Na przykład ograniczenia pojazdu LoadLimit (REST, gRPC) mają właściwości softMaxLoad i costPerUnitAboveSoftMax. Razem generują koszty proporcjonalne do jednostek obciążenia przekraczających softMaxLoad, co pozwala przekroczyć limit tylko wtedy, gdy jest to uzasadnione z punktu widzenia kosztów.

Podobnie ograniczenia TimeWindow (REST, gRPC) mają właściwości soft_start_time i soft_end_time wraz z odpowiadającymi im właściwościami cost_per_hour_before_soft_start_time i cost_per_hour_after_soft_end_time, które są nakładane na podstawie tego, jak wcześnie lub późno wystąpiło zdarzenie objęte ograniczeniami w odniesieniu do TimeWindow.

Tak jak w przypadku wszystkich parametrów modelu kosztów, koszty miękkiego ograniczenia są wyrażone w tych samych bezwymiarowych jednostkach co inne parametry kosztowe.

Ograniczenia typu LoadLimit omówiono szczegółowo w artykule Wymagania i limity obciążenia. Ograniczenia TimeWindow omówiono szczegółowo w artykule Ograniczenia przedziału czasu odbioru i dostawy.