Parametri del modello di costo

Sviluppatori dello Spazio economico europeo (SEE)

Il messaggio OptimizeToursRequest (REST, gRPC) contiene una serie di proprietà relative ai costi. Questi parametri di costo rappresentano il modello di costo della richiesta. Il modello di costo acquisisce molti degli obiettivi di ottimizzazione di alto livello della richiesta, ad esempio:

  • Dare la priorità ai percorsi più veloci Vehicle rispetto a quelli più brevi o viceversa
  • Decidere se il costo per la consegna di un Shipment valga il valore del completamento del Shipment
  • Eseguire ritiri e consegne entro finestre temporali solo quando è conveniente

Visualizza un esempio di richiesta con i costi

{
  "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
      }
    ]
  }
}
    

Proprietà del costo Vehicle

Il messaggio Vehicle (REST, gRPC) ha diverse proprietà di costo:

  • Vehicle.cost_per_hour: rappresenta il costo di funzionamento di un veicolo all'ora, inclusi i tempi di transito, attesa, visita e pausa.
  • Vehicle.cost_per_kilometer: rappresenta il costo per chilometro percorso dal veicolo.
  • Vehicle.cost_per_traveled_hour: rappresenta il costo di gestione di un veicolo solo durante il transito, esclusi i tempi di attesa, visita e pausa.

Questi parametri di costo consentono all'ottimizzatore di effettuare compromessi tra tempo e distanza percorsa. I costi sostenuti dall'itinerario ottimizzato vengono visualizzati nel messaggio di risposta come metrics.costs:

Man mano che costPerHour aumenta, l'ottimizzatore tenta di trovare percorsi più veloci che potrebbero non essere i percorsi più brevi. In questo esempio, il percorso più veloce è anche il più breve, quindi le modifiche ai parametri di costo hanno un effetto minimo.

Proprietà del costo Shipment

Il messaggio Shipment (REST, gRPC) ha anche diversi parametri di costo:

  • Shipment.penalty_cost rappresenta il costo sostenuto per saltare la spedizione. Se non imposti il parametro penalty_cost di una spedizione, la spedizione diventa obbligatoria, il che significa che verrà ignorata solo se non può essere completata in base ai vincoli specificati.
  • Shipment.VisitRequest.cost rappresenta il costo di un ritiro o di una consegna specifici, utilizzato principalmente per consentire compromessi sui costi tra più opzioni di ritiro o consegna per una singola spedizione.

I parametri di costo Shipment utilizzano le stesse unità adimensionali dei parametri di costo Vehicle. Il costo sostenuto per completare un Shipment supera il costo della penalità, il Shipment non è incluso nel percorso di alcun Vehicle e viene visualizzato nell'elenco skipped_shipments nel messaggio di risposta.

Proprietà del costo ShipmentModel

Il messaggio ShipmentModel (REST, gRPC) include una singola proprietà di costo, globalDurationCostPerHour. Questo costo viene sostenuto in base al tempo totale necessario a tutti i veicoli per completare i relativi ShipmentRoute. L'aumento globalDurationCostPerHour dà la priorità al completamento anticipato di tutte le spedizioni.

Proprietà dei costi della risposta di Route Optimization

Il messaggio OptimizeToursResponse (REST, gRPC) ha proprietà di costo che rappresentano i costi sostenuti durante il processo di completamento delle ShipmentRoute. Le proprietà metrics.costs e metrics.totalCost rappresentano il numero di unità di costo sostenute in tutte le route nella risposta. Ogni voce routes ha proprietà routeCosts e routeTotalCosts che rappresentano i costi per quella rotta specifica.

Visualizza una risposta alla richiesta di esempio con i costi

{
  "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
    }
  }
}
    

Nella risposta di esempio, gli metrics.costs di primo livello sono:

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

Il valore model.shipments.penalty_cost rappresenta il costo sostenuto a causa delle spedizioni saltate. La proprietà skippedShipments elenca le spedizioni che sono state saltate.

In questo esempio, viene ignorato solo model.shipments[1] nella richiesta di esempio. model.shipments[1] ha un costo di penalità di 5 unità, che corrisponde alla chiave model.shipments.penalty_cost nella risposta di esempio. Il basso penaltyCost della spedizione rispetto al Vehicle di 40,0 costPerHour e 10,0 costPerKilometer rende più conveniente saltare la spedizione che completarla.

Argomento avanzato: costi e vincoli soft

Diverse proprietà dei messaggi OptimizeToursRequest (REST, gRPC) rappresentano vincoli soft, ovvero vincoli che comportano un costo quando non possono essere soddisfatti.

Ad esempio, i vincoli del veicolo LoadLimit (REST, gRPC) hanno le proprietà softMaxLoad e costPerUnitAboveSoftMax. Insieme, questi comportano un costo proporzionale alle unità di carico che superano softMaxLoad, consentendo di superare il limite solo se ha senso dal punto di vista dei costi.

Allo stesso modo, i vincoli TimeWindow (REST, gRPC) hanno proprietà soft_start_time e soft_end_time, con cost_per_hour_before_soft_start_time e cost_per_hour_after_soft_end_time corrispondenti, che vengono sostenuti in base a quanto presto o tardi si verifica l'evento vincolato rispetto a TimeWindow.

Come per tutti i parametri del modello di costo, i costi dei vincoli deboli sono espressi nelle stesse unità adimensionali degli altri parametri di costo.

I vincoli LoadLimit sono trattati in dettaglio in Load Demands and Limits. I vincoli TimeWindow sono trattati in dettaglio in Vincoli relativi alla finestra temporale di ritiro e consegna.