I limiti e le richieste di carico sono un tipo di vincolo che puoi utilizzare per gestire la capacità. Questo vincolo specifica la capacità richiesta di una spedizione e la capacità massima di un veicolo, il che ti consente di ottimizzare le assegnazioni di itinerari in base a questi vincoli.
I limiti e le richieste di carico possono supportare obiettivi quali:
- Evitare il sovraccarico dei veicoli.
- Monitora come cambiano i carichi dei veicoli man mano che le spedizioni vengono ritirate e consegnate.
- Dai la priorità all'accoppiamento di veicoli pesanti con spedizioni di carichi pesanti.
I limiti e le richieste di carico sono specificati in queste proprietà:
loadDemands
specifica la quantità di capacità richiesta da una determinata spedizione.loadLimits
specifica la capacità massima per un determinato veicolo.
Struttura
Come mostrato nel diagramma, i limiti e le richieste di carico sono strutturati nel seguente modo:
loadDemands
è una proprietà diShipment
. UnShipment
può avere più richieste di carico.loadLimits
è una proprietà diVehicle
. UnVehicle
può avere più limiti di carico.
Elenco di controllo di Essentials
Il seguente elenco di controllo descrive le conoscenze essenziali che prevengono potenziali errori relativi al carico. Questo elenco può aiutarti a convalidare la tua richiesta e a risolvere i problemi relativi alla tua risposta.
Proprietà
Questa sezione descrive le proprietà per i limiti e le richieste di carico, che sono le seguenti:
- Tipo di carico:una proprietà condivisa tra le richieste e i limiti di carico.
Load
eLoadLimit
: proprietà uniche presenti rispettivamente nelle richieste di carico e nei limiti di carico.
Tipo di carico
Un tipo di carico è una chiave stringa che applichi in modo uniforme a spedizioni e veicoli. Un singolo tipo di carico si applica alla richiesta di carico di una spedizione e al limite di carico di un veicolo.
I tipi di carico utilizzano la sintassi del tipo di mappa Protocol Buffers. Quando assegni un nome a un tipo di carico, utilizza identificatori che descrivano il tipo di carico e la relativa unità. Ad esempio: weightKg, volume_gallons, palletcount o frequencyDaily.
Load
e LoadLimit
Gli oggetti Load
e LoadLimit
contengono proprietà specifiche per definire i requisiti di capacità per spedizioni e veicoli. La seguente tabella descrive queste proprietà:
Oggetto | Genitore | Proprietà | Property type | Descrizione della proprietà |
---|---|---|---|---|
Load |
loadDemands |
amount |
stringa (formato int64) | Definisce il requisito di capacità della spedizione nel tipo specificato. |
LoadLimit |
loadLimits |
maxLoad |
stringa (formato int64) | Definisce la capacità di carico massima del veicolo nel tipo specificato. |
Esempi
Questa sezione tratta tre tipi di esempi:
- Esempi di codice che illustrano la struttura delle proprietà di richieste e limiti di carico.
- Uno scenario di esempio che mostra un modo per utilizzare le richieste e i limiti di carico in una richiesta API.
- Un esempio di richiesta che include i valori impostati nello scenario di esempio.
Esempi di codice
Il seguente esempio mostra la struttura di una richiesta di caricamento in cui puoi impostare il tipo loadDemands
come stringa e la proprietà amount
come stringa nel formato int64:
{ "model": { "shipments": [ ... { "loadDemands": { "MATCHING_LOAD_TYPE": { "amount": "YOUR_LOAD_AMOUNT" } } } ], "vehicles": [ ... ] } }
Il seguente esempio mostra la struttura più semplice di un limite di carico, in cui
puoi impostare il tipo loadLimits
come stringa e la proprietà maxLoad
come stringa nel formato int64:
{ "model": { "shipments": [ ... ], "vehicles": [ ... { "loadLimits": { "MATCHING_LOAD_TYPE": { "maxLoad": "YOUR_MAX_LOAD" } } } ] } }
Scenario di esempio
Questa sezione descrive uno scenario in cui hai un'attività di asilo per cani e stai ottimizzando un percorso per trasportare alcuni cani in un veicolo con un numero limitato di trasportini.
Ogni spedizione rappresenta una fermata in cui prelevi un determinato numero di cani. In questo esempio, ogni spedizione ha un luogo di ritiro diverso, ovvero la casa dei cani di cui ti prendi cura, e tutte le spedizioni hanno lo stesso luogo di consegna, l'edificio del tuo asilo nido per cani.
Per questo esempio, i valori delle proprietà nella richiesta sono i seguenti:
Genitore | Proprietà | Tipo | Valore | Scenario |
---|---|---|---|---|
loadDemands |
tipo di carico | stringa | dogUnit |
Definisce il tipo di carico per la spedizione. Questo esempio utilizza dogUnit , dove ogni dogUnit rappresenta un cane. |
loadDemands |
amount |
numero | 1ª spedizione: 1 2ª spedizione: 3 |
Specifica la quantità del tipo di carico definito. In questo esempio, stai definendo due spedizioni: nella prima ritiri un cane, nella seconda tre. |
loadLimits |
tipo di carico | stringa | dogUnit |
Definisce il tipo di limite di carico applicato al veicolo. Questo valore deve corrispondere al tipo di carico della spedizione affinché il limite sia pertinente. |
loadLimits |
maxLoad |
numero | 6 |
Specifica la quantità massima del tipo di carico che il veicolo può trasportare. In questo esempio, hai un solo veicolo con una capacità massima di 6 dogUnit , dove ogni dogUnit rappresenta una gabbia per cani. |
Il seguente diagramma illustra i limiti di carico del veicolo, le richieste di carico di ogni spedizione e il modo in cui ogni spedizione consuma i limiti di carico del veicolo:
In questo esempio, le richieste di carico di ogni spedizione e i limiti di carico del veicolo hanno i seguenti effetti:
L'ottimizzatore non avrà problemi a generare un percorso per il veicolo per trasportare i cani, poiché il veicolo può trasportare fino a 6 cani e tu ne stai prendendo solo 4.
Un limite di carico di 6
dogUnit
sul veicolo significa anche che puoi trasportare solo altri due cani su questo veicolo specifico.Se il numero di cani era superiore al limite di carico, l'ottimizzatore avrebbe saltato uno dei ritiri o lo avrebbe assegnato a un veicolo adatto.
Ricorda che non esiste un insieme di tipi predefiniti. In questo esempio, potresti modificare il tipo di carico da unità per cani a unità di peso per limitare il peso dei cani oppure modificarlo in misure lineari per limitarne la larghezza o l'altezza. Questa flessibilità ti consente di adattare i limiti e le richieste di carico alle tue esigenze specifiche.
Esempio di richiesta
L'esempio seguente mostra la struttura di una richiesta optimizeTours
di base
che incorpora i valori dello scenario di esempio:
{ "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.8024, "longitude": -122.4058 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ], "label": "One bernese mountain dog", "loadDemands": { "dogUnit": { "amount": "1" } } }, { "pickups": [ { "arrivalLocation": { "latitude": 37.7359, "longitude": -122.5011 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ], "label": "Three chihuahuas", "loadDemands": { "dogUnit": { "amount": "3" } } } ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "loadLimits": { "dogUnit": { "maxLoad": "6" } }, "costPerKilometer": 1.0 } ] } }
Ricorda che, a differenza di questo esempio, una spedizione può avere più richieste di carico e un veicolo può avere più limiti di carico, il che ti consente di fornire vincoli complessi da prendere in considerazione durante l'ottimizzazione degli itinerari della flotta.
Limiti di carico soft
Puoi impostare i limiti di carico come vincoli flessibili aggiungendo softMaxLoad
e
costPerUnitAboveSoftMax
al loadLimits
di un veicolo. Ciò consente
all'ottimizzatore di superare il carico massimo del veicolo a un costo, dando la priorità al completamento del percorso
rispetto al rispetto rigoroso del limite di carico.
Puoi utilizzare maxLoad
e softMaxLoad
insieme per impostare un limite di carico rigido e uno morbido. In questo caso, softMaxLoad
imposta il carico che può essere superato, mentre maxLoad
imposta un limite rigido che non può essere superato. Quando vengono utilizzati entrambi, maxLoad
deve essere maggiore di softMaxLoad
.
Proprietà
La tabella seguente descrive le proprietà dei vincoli flessibili per le richieste di carico e i limiti.
Genitore | Nome proprietà | Property type | Descrizione della proprietà |
---|---|---|---|
loadLimits |
softMaxLoad |
stringa (formato int64) | Il carico massimo preferito per un veicolo. Se il carico del veicolo supera questo valore, viene addebitato un costo. |
loadLimits |
costPerUnitAboveSoftMax |
numero | Il costo per unità di carico superiore a softMaxLoad . Questo campo è obbligatorio quando utilizzi softMaxLoad . Per saperne di più sui costi, consulta il concetto chiave Modello di costi. |
Esempio di codice
L'esempio seguente mostra la struttura delle proprietà del vincolo flessibile di
loadLimits
:
{ "loadLimits": { "LOAD_TYPE": { "softMaxLoad": "LOAD_AMOUNT", "costPerUnitAboveSoftMax": COST_PER_UNIT } } }