Inviare una richiesta con i costi di caricamento

Fai una richiesta con i costi di carico per consentire all'ottimizzatore di prendere in considerazione il carico trasportato dai tuoi veicoli tra una visita e l'altra. 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).

Una richiesta di esempio minima con i costi di caricamento

Ecco un esempio parziale di una richiesta con un costo di caricamento. In questo esempio, il singolo veicolo non può trasportare più di 1000 kg di carico weightKg totale, 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 caricamento 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 di weightKg di 600 su 10 chilometri, il calcolo sarà:

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

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

Un altro esempio di richiesta con costi di caricamento

Ecco un altro esempio di costi di carico che impongono un costo per il tempo di percorrenza sia al di sopra che al di sotto di una soglia:

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

Il calcolo del costo di caricamento 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 di weightLbs di 950 per 5 ore, il calcolo sarà:

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

In questo esempio, il load_threshold per il costo di caricamento di weightLbs è vicino a max_load. Il cost_per_unit_above_threshold applica un costo elevato per ora di viaggio 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 caricamento:

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

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

Esempio: invia 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.