Richieste e limiti di carico

La proprietà loadDemands è definita in ShipmentModel.shipments.Shipment e la proprietà loadLimits in ShipmentModel.vehicles.Vehicle.

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:

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 e LoadLimit: 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

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:

Il veicolo inizia il percorso con 6 spazi vuoti che rappresentano i limiti di carico del veicolo. La prima spedizione richiede spazio per un cane, la seconda per tre cani. Lo stato finale del veicolo è di 4 posti occupati su 6, con due posti vuoti rimanenti.

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
        }
      }
}