Parametry modelu kosztu

Komunikat OptimizeToursRequest (REST, gRPC) zawiera pewną liczbę właściwości powiązane z koszty. Razem te parametry kosztu odpowiadają za żądanie model kosztów. Model kosztów uwzględnia wiele głównych wartości żądania celów optymalizacji, takich jak:

  • Nadawanie priorytetu szybszym trasom Vehicle zamiast krótszych tras lub na odwrót w pobliżu
  • Określanie, czy koszt realizacji celu Shipment jest wart wartości Ukończono Shipment
  • Odbiór i dostawa w wyznaczonych przedziałach czasowych jest oszczędność

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 prowadzenia pojazdu na godzinę. łącznie z transportem publicznym, czasem oczekiwania, wizytą i przerwami.
  • Vehicle.cost_per_kilometer: reprezentuje koszt przebytego kilometra przez w pojeździe.
  • Vehicle.cost_per_traveled_hour: reprezentuje koszt posiadania pojazdu tylko w transporcie publicznym, z wyłączeniem czasu oczekiwania, wizyt i przerwy.

Te parametry kosztów umożliwiają optymalizatorowi równanie czasu w zależności od przebytej odległości kompromisów. Koszty poniesione przez zoptymalizowaną trasę pojawią się w odpowiedzi. wiadomość jako metrics.costs:

Gdy wartość costPerHour rośnie, optymalizator próbuje znaleźć szybsze trasy która może nie być najkrótszą trasą. W tym przykładzie najszybsza trasa przebiega więc zmiany parametrów kosztu mają niewielki skutek.

Shipment właściwości kosztu

Komunikat Shipment (REST, gRPC) również ma kilka kosztów parametry:

  • Shipment.penalty_cost to koszt poniesiony w wyniku pominięcia przesyłki.
  • Shipment.VisitRequest.cost przedstawia koszt konkretnego odbioru lub na dostawę, służący głównie do uzyskania zwrotu kosztów między wieloma odbiorami lub opcje dostawy w przypadku jednej przesyłki.

Parametry kosztu typu Shipment korzystają z tych samych jednostek bezwymiarowych co koszt typu Vehicle . Koszt poniesiony w całości Shipment przekracza koszt kary, Shipment nie znajduje się na trasie żadnej z tras obsługiwanych przez: Vehicle. Zamiast tego pojawia się w skipped_shipments w wiadomości z odpowiedzią.

ShipmentModel właściwości kosztowe

Komunikat ShipmentModel (REST, gRPC) zawiera 1 koszt usługa, globalDurationCostPerHour. Koszt ten jest naliczany na podstawie łącznej ile czasu potrzeba na ukończenie ShipmentRoute przez wszystkie pojazdy. Rosnący globalDurationCostPerHour priorytetowo traktuje wcześniejszą realizację wszystkich dostaw.

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

Komunikat OptimizeToursResponse (REST, gRPC) ma właściwości kosztu które reprezentują koszty poniesione w związku z ukończeniem zadań ShipmentRoute. Właściwości metrics.costs i metrics.totalCost wskazują liczbę jednostki kosztów poniesione we wszystkich trasach w odpowiedzi. Każdy wpis routes ma Usługi routeCosts i routeTotalCosts, które odpowiadają za koszty tego i konkretnej trasy.

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 ponoszone w związku z z pominiętymi przesyłkami. Właściwość skippedShipments podaje, które przesyłki zostały pominięto.

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 łącznym kosztom kary model.shipments.penalty_cost w przykładowej odpowiedzi. Niski stan przesyłki penaltyCost w porównaniu z Vehicle 40.0 costPerHour i 10.0 costPerKilometer sprawiają, że pominięcie przesyłki jest tańsze niż go wypełnić.

Temat dla zaawansowanych: koszty i ograniczenia miękkie

Kilka właściwości komunikatu OptimizeToursRequest (REST, gRPC) stanowią ograniczenia miękkie, czyli ograniczenia, które generują koszty, których nie da się spełnić.

Na przykład ograniczenia pojazdu LoadLimit (REST, gRPC) mają Usługi softMaxLoad i costPerUnitAboveSoftMax. Łącznie wiążą się one proporcjonalny do jednostek obciążenia, które przekraczają softMaxLoad, dzięki czemu do przekroczenia limitu tylko wtedy, gdy ma to sens z punktu widzenia kosztów.

Podobnie ograniczenia TimeWindow (REST, gRPC) mają Usługi soft_start_time i soft_end_time z odpowiednimi cost_per_hour_before_soft_start_time i cost_per_hour_after_soft_end_time które są naliczane w zależności od tego, jak wcześnie lub za późno następowało zdarzenie 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 jednostek co w przypadku innych parametrów kosztów.

LoadLimit ograniczeń zostało opisanych szczegółowo w Wczytywanie żądań i limitów. Szczegółowe informacje o TimeWindow ograniczeniach w artykule Ograniczenia dotyczące czasu odbioru i dostawy.