Richieste e limiti di carico

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

Le richieste e i limiti 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.

Le richieste e i limiti di carico possono supportare obiettivi come:

  • Impedire il sovraccarico dei veicoli.
  • Monitorare la variazione dei carichi dei veicoli durante il ritiro e la consegna delle spedizioni.
  • Dare la priorità all'accoppiamento di veicoli pesanti con spedizioni di carichi pesanti.

Le richieste e i limiti 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, le richieste e i limiti di carico sono strutturati come segue:

Elenco di controllo degli elementi essenziali

Il seguente elenco di controllo descrive le conoscenze essenziali che prevengono potenziali errori relativi al carico. Questo elenco può aiutarti a convalidare la richiesta e risolvere i problemi relativi alla risposta.

Proprietà

Questa sezione descrive le proprietà per le richieste e i limiti di carico, che sono le seguenti:

  • Tipo di carico: una proprietà condivisa tra richieste e limiti di carico.
  • Load e LoadLimit: proprietà univoche presenti rispettivamente nelle richieste 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 sia alla richiesta di carico di una spedizione sia al limite di carico di un veicolo.

I tipi di carico utilizzano la sintassi del tipo di mappa dei buffer di protocollo . Quando assegni un nome a un tipo di carico, utilizza identificatori che descrivono 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 tabella seguente 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

L'esempio seguente mostra la struttura di una richiesta di carico in cui puoi impostare il loadDemands tipo come stringa e la amount proprietà come stringa nel formato int64:

{
  "model": {
    "shipments": [ ...
      {
        "loadDemands": {
          "MATCHING_LOAD_TYPE": {
            "amount": "YOUR_LOAD_AMOUNT"
          }
        }
      }
    ],
    "vehicles": [ ...
    ]
  }
}

L'esempio seguente mostra la struttura più semplice di un limite di carico, in cui puoi impostare il loadLimits tipo 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 itinerario per trasportare alcuni cani in un veicolo con una quantità limitata di gabbie.

Ogni spedizione rappresenta una fermata in cui ritiri un determinato numero di cani. In questo esempio, ogni spedizione ha una località di ritiro diversa, ovvero la casa dei cani di cui ti prendi cura, e tutte le spedizioni hanno la stessa località di consegna, l'edificio del tuo asilo 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 ne ritiri tre.
loadLimits tipo di carico stringa dogUnit Definisce il tipo di limite di carico applicato al veicolo. Affinché il limite sia pertinente, il tipo di carico della spedizione deve corrispondere a questo valore.
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 itinerario per il veicolo per trasportare i cani, poiché il veicolo può trasportare fino a 6 cani e tu ne ritiri solo 4.

  • Avere un limite di carico di 6 dogUnit sul veicolo significa anche che potresti trasportare altri due cani su questo veicolo specifico.

  • Se il numero di cani fosse superiore al limite di carico, l'ottimizzatore ignorerebbe uno dei ritiri o lo assegnerebbe a un veicolo adatto.

Ricorda che non esiste un insieme di tipi predefiniti. In questo esempio, potresti modificare il tipo di carico da unità di cani a unità di peso per limitare il peso dei cani o modificarlo in misurazioni lineari per limitarne la larghezza o l'altezza. Questa flessibilità ti consente di personalizzare le richieste e i limiti di carico in base 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
      }
    ]
  }
}

Tieni presente 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 tua flotta.

Limiti di carico flessibili

Puoi impostare i limiti di carico come vincoli flessibili aggiungendo softMaxLoad e costPerUnitAboveSoftMax a loadLimits di un veicolo. In questo modo, l'ottimizzatore può superare il carico massimo del veicolo a un costo, dando la priorità al completamento dell'itinerario rispetto al rispetto rigoroso del limite di carico.

Puoi utilizzare maxLoad e softMaxLoad insieme per impostare un limite di carico rigido e uno flessibile. In questo caso, softMaxLoad imposta il carico che può essere superato e 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 e i limiti di carico.

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 si utilizza softMaxLoad. Per saperne di più sui costi, consulta il concetto chiave del modello di costi.

Esempio di codice

L'esempio seguente mostra la struttura delle proprietà dei vincoli flessibili di loadLimits:

{
   "loadLimits": {
        "LOAD_TYPE": {
          "softMaxLoad": "LOAD_AMOUNT",
          "costPerUnitAboveSoftMax": COST_PER_UNIT
        }
      }
}