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, consentendoti di ottimizzare le assegnazioni dei percorsi in base a questi vincoli.

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

  • Evita di sovraccaricare i veicoli.
  • Monitora come cambiano i carichi dei veicoli man mano che le spedizioni vengono ritirate e consegnate.
  • Dai la priorità all'abbinamento 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 di Essentials

Il seguente elenco di controllo descrive le conoscenze essenziali per evitare 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 i seguenti:

  • Tipo di carico: una proprietà condivisa tra le richieste di carico e i limiti.
  • 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 di stringa che applichi in modo uguale a spedizioni e veicoli. Un singolo tipo di carico si applica alla domanda di carico di una spedizione e 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 sua 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 illustra tre tipi di esempi:

Esempi di codice

L'esempio seguente mostra la struttura di una richiesta di carico 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": [ ...
    ]
  }
}

L'esempio seguente 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 gabbie.

Ogni spedizione rappresenta una fermata in cui ritiri un certo numero di cani. In questo esempio, ogni spedizione ha un luogo di partenza 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 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 cani.
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 un trasportino 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 è che 4 dei 6 spazi sono ora occupati, con due spazi vuoti rimanenti.

In questo esempio, i requisiti 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 il trasporto dei cani, poiché il veicolo può trasportare fino a 6 cani e tu ne stai ritirando solo 4.

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

  • Se il numero di cani fosse superiore al limite di carico, l'ottimizzatore salterebbe 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 oppure impostarlo su misure 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
      }
    ]
  }
}

Ricorda che, a differenza del caso 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 dei percorsi della tua flotta.

Limiti di carico flessibili

Puoi impostare i limiti di carico come vincoli flessibili aggiungendo softMaxLoad e costPerUnitAboveSoftMax al loadLimits di un veicolo. In questo modo, l'ottimizzatore può 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 flessibile. In questo caso, softMaxLoad imposta il carico che può essere superato, mentre maxLoad imposta un limite fisso 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 utilizzi softMaxLoad. Per saperne di più sui costi, consulta il concetto chiave Modello di costo.

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