Demandes et limites de charge

La propriété loadDemands est définie sous ShipmentModel.shipments.Shipment et la propriété loadLimits sous ShipmentModel.vehicles.Vehicle.

Les demandes et limites de charge sont un type de contrainte que vous pouvez utiliser pour gérer la capacité. Cette contrainte spécifie la capacité requise d'un envoi et la capacité maximale d'un véhicule, ce qui vous permet d'optimiser les affectations de routes en fonction de ces contraintes.

Les demandes et les limites de charge peuvent vous aider à atteindre des objectifs tels que :

  • empêcher la surcharge des véhicules ;
  • Surveillez l'évolution de la charge des véhicules à mesure que les expéditions sont récupérées et livrées.
  • Priorisez l'association des véhicules lourds avec les expéditions de charges lourdes.

Les demandes et les limites de charge sont spécifiées dans les propriétés suivantes :

  • loadDemands spécifie la capacité requise pour un envoi donné.
  • loadLimits spécifie la capacité maximale d'un véhicule donné.

Structure

Comme le montre le schéma, les demandes et les limites de charge sont structurées comme suit :

Checklist Essentials

La checklist suivante décrit les connaissances essentielles qui permettent d'éviter les erreurs potentielles liées au chargement. Cette liste peut vous aider à valider votre demande et à résoudre les problèmes liés à votre réponse.

Propriétés

Cette section décrit les propriétés des demandes et limites de charge, qui sont les suivantes :

  • Type de charge : propriété partagée entre les demandes et les limites de charge.
  • Load et LoadLimit : propriétés uniques présentes respectivement dans les demandes et les limites de charge.

Type de chargement

Un type de chargement est une clé de chaîne que vous appliquez de manière égale aux expéditions et aux véhicules. Un seul type de chargement s'applique à la demande de chargement d'un envoi ainsi qu'à la limite de chargement d'un véhicule.

Les types de charge utilisent la syntaxe du type de carte Protocol Buffers. Lorsque vous nommez un type de charge, utilisez des identifiants décrivant le type de charge et son unité. Par exemple : weightKg, volume_gallons, palletcount ou frequencyDaily.

Load et LoadLimit

Les objets Load et LoadLimit contiennent des propriétés spécifiques permettant de définir les exigences de capacité pour les expéditions et les véhicules. Le tableau suivant décrit ces propriétés :

Objet Parent Propriété Type de propriété Description de la propriété
Load loadDemands amount string (format int64) Définit la capacité requise de l'envoi dans le type spécifié.
LoadLimit loadLimits maxLoad string (format int64) Définit la capacité de charge maximale du véhicule dans le type spécifié.

Exemples

Cette section aborde trois types d'exemples :

  • Exemples de code illustrant la structure des propriétés de limites et de demandes de charge.
  • Exemple de scénario montrant comment utiliser les demandes et les limites de charge dans une requête API.
  • Exemple de requête qui inclut les valeurs définies dans le scénario exemple.

Exemples de code

L'exemple suivant montre la structure d'une demande de chargement dans laquelle vous pouvez définir le type loadDemands sous forme de chaîne et la propriété amount sous forme de chaîne au format int64 :

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

L'exemple suivant montre la structure la plus élémentaire d'une limite de charge, où vous pouvez définir le type loadLimits sous forme de chaîne et la propriété maxLoad sous forme de chaîne au format int64 :

{
  "model": {
    "shipments": [ ...
    ],
    "vehicles": [ ...
      {
        "loadLimits": {
          "MATCHING_LOAD_TYPE": {
            "maxLoad": "YOUR_MAX_LOAD"
          }
        }
      }
    ]
  }
}

Exemple de scénario

Cette section décrit un scénario dans lequel vous gérez une garderie pour chiens et vous optimisez un itinéraire pour transporter quelques chiens dans un véhicule avec un nombre limité de cages.

Chaque livraison représente un arrêt où vous récupérez un certain nombre de chiens. Dans cet exemple, chaque envoi a un lieu de prise en charge différent (le domicile des chiens dont vous vous occupez), et tous les envois ont le même lieu de livraison (le bâtiment de votre garderie pour chiens).

Dans cet exemple, les valeurs de propriété de votre requête sont les suivantes :

Parent Propriété Type Valeur Scénario
loadDemands type de chargement chaîne dogUnit Définit le type de chargement pour l'expédition. Cet exemple utilise dogUnit, où chaque dogUnit représente un chien.
loadDemands amount Total 1re livraison : 1
2e livraison : 3
Spécifie la quantité du type de charge défini. Dans cet exemple, vous définissez deux expéditions : la première concerne un chien et la seconde, trois.
loadLimits type de chargement chaîne dogUnit Définit le type de limite de charge appliquée au véhicule. Cette valeur doit correspondre au type de chargement de l'envoi pour que la limite soit pertinente.
loadLimits maxLoad Total 6 Spécifie la quantité maximale du type de chargement que le véhicule peut transporter. Dans cet exemple, vous ne disposez que d'un seul véhicule d'une capacité maximale de six dogUnit, où chaque dogUnit représente une cage pour chien.

Le diagramme suivant illustre les limites de charge du véhicule, les exigences de charge de chaque envoi et la façon dont chaque envoi consomme les limites de charge du véhicule :

Le véhicule commence son trajet avec six emplacements vides, qui représentent les limites de charge du véhicule. Le premier envoi nécessite de l'espace pour un chien, tandis que le second en nécessite pour trois. L'état final du véhicule est que quatre des six places sont désormais occupées, et qu'il reste deux places vides.

Dans cet exemple, les demandes de chargement de chaque envoi et les limites de chargement du véhicule ont les effets suivants :

  • L'outil d'optimisation n'aura aucun problème à générer un itinéraire pour le véhicule afin de transporter les chiens, car le véhicule peut transporter jusqu'à six chiens, et vous n'en récupérez que quatre.

  • Si le véhicule est limité à une charge de 6 dogUnit, cela signifie que vous ne pouvez transporter que deux chiens supplémentaires dans ce véhicule spécifique.

  • Si le nombre de chiens était supérieur à la limite de charge, l'optimiseur ignorerait l'un des ramassages ou l'attribuerait à un véhicule adapté.

N'oubliez pas qu'il n'existe pas d'ensemble de types prédéfinis. Dans cet exemple, vous pouvez remplacer le type de charge par des unités de poids pour limiter le poids des chiens, ou par des mesures linéaires pour limiter leur largeur ou leur hauteur. Cette flexibilité vous permet d'adapter les demandes et les limites de charge à vos besoins spécifiques.

Exemple de requête

L'exemple suivant montre la structure d'une requête optimizeTours de base intégrant les valeurs de l'exemple de scénario :

{
  "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
      }
    ]
  }
}

N'oubliez pas que, contrairement à cet exemple, une expédition peut avoir plusieurs demandes de chargement et qu'un véhicule peut avoir plusieurs limites de chargement. Vous pouvez ainsi fournir des contraintes complexes à prendre en compte lors de l'optimisation des itinéraires de votre flotte.

Limites de charge souples

Vous pouvez définir des limites de charge comme des contraintes souples en ajoutant softMaxLoad et costPerUnitAboveSoftMax à l'loadLimits d'un véhicule. Cela permet à l'optimiseur de dépasser la charge maximale du véhicule moyennant un coût, en privilégiant l'achèvement de l'itinéraire plutôt que le respect strict de la limite de charge.

Vous pouvez utiliser maxLoad et softMaxLoad ensemble pour définir une limite de charge stricte et une limite de charge flexible. Dans ce cas, softMaxLoad définit la charge qui peut être dépassée, et maxLoad définit une limite stricte qui ne peut pas être dépassée. Lorsque les deux sont utilisés, maxLoad doit être supérieur à softMaxLoad.

Propriétés

Le tableau suivant décrit les propriétés de contrainte souple pour les demandes et les limites de charge.

Parent Nom de propriété Type de propriété Description de la propriété
loadLimits softMaxLoad string (format int64) Charge maximale recommandée pour un véhicule. Si la charge du véhicule dépasse cette valeur, des frais sont facturés.
loadLimits costPerUnitAboveSoftMax Total Coût par unité de charge au-dessus de softMaxLoad. Ce champ est obligatoire lorsque vous utilisez softMaxLoad. Pour en savoir plus sur les coûts, consultez le concept clé Modèle de coût.

Exemple de code

L'exemple suivant montre la structure des propriétés de contrainte souple de loadLimits :

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