Inviare una richiesta con i costi di caricamento

Esegui una richiesta con i costi di carico per fare in modo che l'ottimizzatore tenga conto del carico trasportato dai veicoli tra le visite. Il costo sostenuto dipende sia dalla quantità di ShipmentRoute.VehicleLoad trasportata sia dalla distanza o dalla durata della transizione (utilizzando rispettivamente cost_per_kilometer o cost_per_traveled_hour).

Esempio di richiesta minima con costi di carico

Di seguito è riportato un esempio parziale di una richiesta con un costo di carico. In questo esempio, il singolo veicolo non può trasportare più di 1000 kg di carico totale weightKg, che comporta 1 unità di costo per chilometro quando il carico weightKg trasportato supera i 500 kg.

  {
    "model": {
      "vehicles": [{
        "loadLimits": {
          "weightKg": {
            "maxLoad": "1000",
            "costPerKilometer": {
              "loadThreshold": "500",
              "costPerUnitAboveThreshold": 1
            }
          }
        }
      }]
    }
  }
  

Il calcolo del costo di carico per questo esempio è il seguente:

cost = max(carried load - load threshold, 0) * distance * cost per unit above threshold

Quindi, se il veicolo trasporta un carico weightKg di 600 per 10 chilometri, il calcolo sarà il seguente:

(600 - 500) * 10 * 1 = 1000 cost units

I costi di carico possono essere utilizzati per modellare una serie di concetti, come l'aumento del consumo di energia del veicolo durante il trasporto di carichi pesanti o l'usura del veicolo causata da un carico eccessivo.

Altro esempio di richiesta con costi di carico

Di seguito è riportato un altro esempio di costi di carico che impone un costo per il tempo di percorrenza sia sopra che sotto una soglia:

  {
    "model": {
      "vehicles": [{
        "loadLimits": {
          "weightLbs": {
            "maxLoad": "1000",
            "costPerTraveledHour": {
              "loadThreshold": "900",
              "costPerUnitAboveThreshold": 10,
              "costPerUnitBelowThreshold": 1
            },
          },
        }
      }]
    }
  }
  

Il calcolo del costo di carico per questo esempio è il seguente:

cost = max(carried load - load threshold, 0) * time * cost per unit above threshold
  + min(carried load, load threshold) * time * cost per unit below threshold

Quindi, se il veicolo trasporta un carico weightLbs di 950 per 5 ore, il calcolo sarà il seguente:

max(950 - 900, 0) * 5 * 10 + min(950, 900) * 5 * 1 = 7000

In questo esempio, la load_threshold per il costo di carico weightLbs è vicina a max_load. Il cost_per_unit_above_threshold applica un costo elevato per ora di percorrenza quando il veicolo viaggia con un carico particolarmente pesante, penalizzando i percorsi che potrebbero aumentare l'usura del veicolo o consumare carburante in eccesso. Il cost_per_unit_below_threshold aggiunge un costo per unità di peso trasportata dal veicolo fino alla soglia, che rappresenta un aumento del consumo di carburante man mano che il veicolo trasporta più carico.

Domande frequenti

Ecco alcune domande frequenti sui costi di carico:

Domanda Risposta
Dove posso specificare i costi di carico? Specifica i costi di carico in Vehicle.LoadLimit.
Come vengono abbinati i costi di carico alle spedizioni? Un costo di carico si applica alle spedizioni il cui tipo di richiesta di carico corrisponde al tipo di limite di carico per il veicolo, ad esempio peso o volume. I tipi di carico sono stringhe arbitrarie, come descritto in richieste e limiti di carico.
Come vengono espressi i costi di carico? I costi di carico sono espressi in termini di transizione distanza o durata. Utilizza cost_per_kilometer per specificare i costi in termini di distanza e cost_per_traveled_hour per specificare i costi in termini di durata.
Quando vengono applicati i costi di carico? Il carico del veicolo viene confrontato con il load_threshold del costo di carico. Se viene specificato cost_per_unit_above_threshold, il costo viene aggiunto in proporzione al carico del veicolo superiore alla load_threshold utilizzando la formula max(0, load - load_threshold). Se cost_per_unit_below_threshold viene specificato, il costo viene aggiunto in proporzione al carico del veicolo inferiore alla load_threshold, utilizzando la formula min(load, load_threshold).
Quali sono i valori predefiniti per i parametri dei costi di carico? load_threshold, cost_per_unit_above_threshold e cost_per_unit_below_threshold sono tutti zero per impostazione predefinita.
In quali unità sono espressi i costi di carico? I costi di carico sono espressi nelle stesse unità adimensionali di tutti gli altri parametri di costo, come global_duration_cost_per_hour o Shipment.penalty_cost.
Dove posso trovare i costi di carico nella risposta? I costi di carico sostenuti vengono visualizzati nelle proprietà metrics e route_metrics dei messaggi di risposta. Ad esempio, un sostenuto cost_per_kilometer verrà visualizzato come model.vehicles.load_limits.cost_per_kilometer.

Per una spiegazione dettagliata dei costi di carico, consulta la documentazione di riferimento (REST, gRPC).

Esempio: eseguire una richiesta OptimizeTours

Le richieste OptimizeTours possono essere effettuate anche utilizzando REST o gRPC.

Prima di effettuare una richiesta, sostituisci i seguenti parametri con valori appropriati per il tuo ambiente:

  • Assicurati di aver configurato le credenziali predefinite dell'applicazione come descritto in Utilizzare OAuth.
  • Imposta PROJECT_NUMBER_OR_ID sul numero o sull'ID del tuo progetto Cloud.

    Il seguente comando invia una richiesta OptimizeTours all'API Route Optimization e riceve una risposta in modo sincrono.

    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

Al termine della richiesta, riceverai un messaggio di risposta.