Parametry modelu kosztu

Wiadomość OptimizeToursRequest (REST, gRPC) zawiera wiele właściwości związanych z kosztami. Te parametry kosztów razem stanowią model kosztowy prośby. Model kosztów uwzględnia wiele ogólnych celów optymalizacji żądania, takich jak:

  • priorytetem są szybsze Vehicle trasy, a nie krótsze,
  • Decyzja, czy koszt realizacji Shipment jest wart wartości wynikającej z ukończenia Shipment
  • Odbiór i dostawa w wyznaczonych przedziałach czasowych tylko wtedy, gdy jest to opłacalne,

Przykładowe zgłoszenie z koszty

{
  "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 kosztu:

  • Vehicle.cost_per_hour: koszt eksploatacji pojazdu na godzinę, w tym czas przejazdu, oczekiwania, wizyty i przerw.
  • Vehicle.cost_per_kilometer: koszt przejechania 1 km.
  • Vehicle.cost_per_traveled_hour: reprezentuje koszt eksploatacji pojazdu tylko w trakcie przejazdu, z wyłączeniem czasu oczekiwania, wizyt i przerwy.

Te parametry kosztów umożliwiają optymalizatorowi dokonywanie kompromisów między czasem a przebytą odległością. Koszty poniesione na podstawie zoptymalizowanej trasy są widoczne w odpowiedzi w formie metrics.costs:

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

Shipment właściwości kosztu

Wiadomość Shipment (REST, gRPC) zawiera też kilka parametrów kosztów:

  • Shipment.penalty_cost to koszt poniesiony w wyniku pominięcia dostawy.
  • Shipment.VisitRequest.cost to koszt określonego odbioru lub dostawy, który służy głównie do porównywania kosztów różnych opcji odbioru lub dostawy w przypadku jednej przesyłki.

Parametry kosztów Shipment używają tych samych bezwymiarowych jednostek co parametry kosztów 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 kosztowe

Komunikat ShipmentModel (REST, gRPC) zawiera jedną właściwość kosztu globalDurationCostPerHour. Koszt ten jest ponoszony na podstawie łącznego czasu wymaganego na ukończenie ShipmentRoute przez wszystkie pojazdy. Zwiększenie wartości globalDurationCostPerHour spowoduje priorytetowe traktowanie wszystkich przesyłek.

Właściwości odpowiedzi optymalizacji trasy dotyczące kosztów

Komunikat OptimizeToursResponse (REST, gRPC) ma właściwości kosztu, które reprezentują koszty poniesione w procesie realizacji ShipmentRoute. Właściwości metrics.costsmetrics.totalCost w odpowiedzi reprezentują liczbę jednostek kosztu poniesionych na wszystkich trasach. Każdy wpis routes ma właściwości routeCosts i routeTotalCosts, które przedstawiają koszty na danej trasie.

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 elementy najwyższego poziomu metrics.costs 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 to koszt poniesiony z powodu pominięć dostawy. Właściwość skippedShipments zawiera listę pominanych przesyłek.

W tym przykładzie pominięto tylko model.shipments[1] w żądaniu. model.shipments[1] ma koszt kary równy 5 jednostkom, który jest zgodny z kluczem total 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 więc pominięcie przesyłki niż jej ukończenie.

Zaawansowany temat: koszty i miękkie ograniczenia

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 dotyczące pojazdu LoadLimit (REST, gRPC) mają właściwości softMaxLoadcostPerUnitAboveSoftMax. Razem powodują one koszty proporcjonalne do jednostek obciążenia, które przekraczają wartość softMaxLoad, co pozwala przekroczyć limit tylko wtedy, gdy ma to sens z punktu widzenia kosztów.

Podobnie ograniczenia TimeWindow (REST, gRPC) mają właściwości soft_start_timesoft_end_time oraz odpowiadające im właściwości cost_per_hour_before_soft_start_timecost_per_hour_after_soft_end_time, które są generowane na podstawie tego, jak wcześnie lub późno zdarzenie ograniczone występuje w stosunku do TimeWindow.

Podobnie jak w przypadku wszystkich parametrów modelu kosztu, koszty ograniczeń miękkich są wyrażone w tych samych bezwymiarowych jednostkach co inne parametry kosztu.

Ograniczenia LoadLimit są szczegółowo omawiane w artykule Potrzeby i limity obciążenia. Ograniczenia TimeWindow są szczegółowo opisane w ograniczeniach dotyczących czasu odbioru i dostawy.