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 che illustrano la struttura dei costi di caricamento.
- Uno scenario di esempio che mostra un modo per utilizzare i costi di caricamento per raggiungere un obiettivo commerciale.
- Un esempio di richiesta che include i valori impostati nello scenario di esempio.
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: 50Spedizione 2: 10Spedizione 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
costPerUnitAboveThresholdda1a5. 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