Costi di caricamento

I costi di carico sono definiti nella proprietà `loadLimits` di un `Vehicle` in `ShipmentModel`.

I costi di carico specificano i costi o le sanzioni che un veicolo sostiene in base al carico che trasporta tra i ritiri e le consegne delle spedizioni. Puoi configurare questi costi in base alla distanza percorsa con costPerKilometer, alla durata del viaggio con costPerTraveledHour o utilizzare entrambi contemporaneamente.

Configura i costi di caricamento per supportare obiettivi come i seguenti:

  • Tieni conto dei costi del carburante che aumentano con il peso del carico.
  • Evita di instradare veicoli molto carichi su lunghe distanze.
  • Tieni conto dell'usura del veicolo dovuta al carico pesante.

Proprietà

Specifica i costi di carico all'interno della proprietà loadLimits di un Vehicle. Come tutti gli altri parametri di costo, i costi di caricamento utilizzano unità di costo relative e adimensionali.

Puoi definire i costi di caricamento utilizzando le seguenti proprietà:

Proprietà Tipo Descrizione
costPerKilometer Oggetto Contiene un tipo di oggetto LoadCost per calcolare i costi di viaggio in base ai chilometri percorsi.
costPerTraveledHour Oggetto Contiene un tipo di oggetto LoadCost per calcolare i costi di viaggio in base alle ore di viaggio, esclusi i tempi di attesa, visita e pausa.

LoadCost

Un tipo di messaggio LoadCost definisce il costo di viaggio per il trasporto di un carico specifico. Consente di impostare una soglia di carico e specificare tariffe di costo diverse per unità di carico sia al di sotto che al di sopra di questa soglia.

L'oggetto LoadCost contiene i seguenti parametri di configurazione:

Parametro Tipo Descrizione
loadThreshold stringa (formato int64) Il livello di carico in cui cambia il tasso di calcolo dei costi. Il valore predefinito è 0.
costPerUnitAboveThreshold Numero Il costo applicato a ogni unità di carico superiore a loadThreshold. Il valore predefinito è 0.
costPerUnitBelowThreshold Numero Il costo applicato a ogni unità di carico inferiore o uguale a loadThreshold. Il valore predefinito è 0.

Abbinare i costi di carico alle spedizioni

I costi di carico vengono applicati quando il carico trasportato da un veicolo corrisponde al tipo di spedizioni loadDemands sul suo percorso. I tipi di carico sono stringhe arbitrarie, ad esempio peso o volume. Per ulteriori dettagli sulla configurazione dei tipi di carico, vedi Tipi di carico.

Esempi

Questa sezione tratta tre tipi di esempi:

Esempi di codice

L'esempio seguente mostra come strutturare un costo di caricamento con tutti i parametri di configurazione disponibili. Questo esempio utilizza costPerKilometer, ma puoi sostituirlo con costPerTraveledHour per calcolare i costi in base alla durata del viaggio anziché alla distanza.

{
  "model": {
    "vehicles": [{
      "loadLimits": {
        "LOAD_TYPE": {
          "maxLoad": "MAX_LOAD",
          "costPerKilometer": {
            "loadThreshold": "LOAD_THRESHOLD",
            "costPerUnitAboveThreshold": COST_ABOVE,
            "costPerUnitBelowThreshold": COST_BELOW
          }
        }
      }
    }]
  }
}

Scenario di esempio

Questa sezione descrive uno scenario in cui vuoi ottimizzare il consumo di carburante e il carburante consumato è proporzionale alla distanza e al peso del carico. Poiché i veicoli consumano più carburante quando trasportano carichi più pesanti, è consigliabile pianificare itinerari che consegnano prima i pacchi più pesanti.

Per configurare questo comportamento, puoi configurare la richiesta in modo da penalizzare i veicoli che percorrono lunghe distanze con carichi pesanti. Per questo esempio, utilizza i seguenti valori delle proprietà nella richiesta:

Genitore Proprietà Tipo Valore Scenario
loadLimits load type stringa weightKg Definisce il tipo di capacità da monitorare. Questo esempio utilizza weightKg per rappresentare il peso del carico in chilogrammi.
loadLimits maxLoad stringa 100 Il peso massimo del carico che il veicolo può trasportare.
costPerKilometer loadThreshold stringa 15 Imposta la soglia di carico di base. Qualsiasi peso del carico superiore a 15 kg comporta la penalità per il costo del carburante basato sul carico.
costPerKilometer costPerUnitAboveThreshold numero 1 Funge da coefficiente del costo del carburante. Per ogni chilometro percorso, ogni chilogrammo di carico oltre la soglia di 15 kg comporta 1 unità di costo.
loadDemands amount stringa Spedizione 1: 50
Spedizione 2: 10
Spedizione 3: 80
Specifica il peso del carico per ciascuna delle tre spedizioni.

In questo scenario, i valori configurati hanno i seguenti effetti:

  • L'ottimizzatore organizza i percorsi in modo da consegnare prima i pacchi più pesanti. Il risolutore pianifica le consegne da 80 kg e 50 kg all'inizio del percorso per ridurre al minimo la distanza percorsa a pieno carico.
  • L'ottimizzatore organizza i percorsi in modo da ridurre al minimo la distanza percorsa con carichi pesanti. Per vedere in che modo queste impostazioni influiscono sui tuoi percorsi, puoi aumentare costPerUnitAboveThreshold da 1 a 5. Aumentando la penalità per il peso, inviti l'ottimizzatore a impegnarsi ancora di più per ridurre al minimo la distanza percorsa con carichi più pesanti, il che può riorganizzare la sequenza di consegna o dividere le spedizioni su più veicoli.

Esempio di richiesta

L'esempio seguente mostra la struttura di una richiesta optimizeTours di base che incorpora i valori del costo di caricamento dello scenario di esempio:

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

Formule di calcolo

L'ottimizzatore calcola i costi di carico utilizzando le seguenti formule.

Calcolo della soglia completa

Se specifichi sia costPerUnitAboveThreshold sia costPerUnitBelowThreshold, sostieni costi di viaggio separati per gli importi di carico sia superiori che inferiori a loadThreshold. La formula è:

cost = max(carried_load - load_threshold, 0) * distance_or_time * cost_per_unit_above_threshold
       + min(carried_load, load_threshold) * distance_or_time * cost_per_unit_below_threshold

Ad esempio, utilizzando i valori dell'esempio di richiesta, dove il valore di costPerUnitBelowThreshold è 2, se il veicolo percorre 10 chilometri trasportando un carico di 50, il calcolo è:

max(50 - 15, 0) * 10 * 1 + min(50, 15) * 10 * 2 = 650 cost units

Calcolo sopra la soglia

Quando specifichi solo costPerUnitAboveThreshold, il calcolo è un caso speciale della formula completa della soglia. Poiché il costo inferiore alla soglia è pari a zero, la seconda metà della formula completa restituisce zero. La formula è:

cost = max(carried_load - load_threshold, 0) * distance_or_time * cost_per_unit_above_threshold

Ad esempio, utilizzando i valori dell'esempio di richiesta in cui loadThreshold è 15 e costPerUnitAboveThreshold è 1, se il veicolo percorre 10 chilometri trasportando un carico di 50, il calcolo è:

max(50 - 15, 0) * 10 * 1 = 350 cost units

Calcolo al di sotto della soglia

Simmetricamente, se specifichi solo costPerUnitBelowThreshold, il calcolo è un altro caso speciale della formula della soglia completa in cui il costo al di sopra della soglia è zero. La formula è:

cost = min(carried_load, load_threshold) * distance_or_time * cost_per_unit_below_threshold