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'une expédition et la capacité maximale d'un véhicule, ce qui vous permet d'optimiser les affectations d'itinéraires en fonction de ces contraintes.

Les demandes et limites de charge peuvent répondre à des objectifs tels que :

  • Empêcher la surcharge des véhicules
  • Surveiller l'évolution des charges des véhicules lors de la collecte et de la livraison des expéditions
  • Prioriser l'association des véhicules lourds aux expéditions à forte charge

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

  • loadDemands spécifie la quantité de capacité requise par une expédition particulière.
  • loadLimits spécifie la capacité maximale d'un véhicule donné.

Structure

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

Check-list des éléments essentiels

La check-list suivante décrit les connaissances essentielles qui permettent d'éviter les erreurs potentielles liées à la charge. Cette liste peut vous aider à valider votre requête et à résoudre les problèmes liés à votre réponse.

Les

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 limites de charge.
  • Load et LoadLimit: propriétés uniques présentes respectivement dans les demandes et limites de charge.

Type de charge

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

Les types de charge utilisent la syntaxe du type de correspondance 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 Chaîne (format int64) Définit l'exigence de capacité de l'expédition dans le type spécifié.
LoadLimit loadLimits maxLoad Chaîne (format int64) Définit la capacité de charge maximale du véhicule dans le type spécifié.

Exemples

Cette section couvre trois types d'exemples :

  • Exemples de code illustrant la structure des propriétés des demandes et limites de charge.
  • Exemple de scénario montrant une façon d'utiliser les demandes et limites de charge dans une requête API.
  • Exemple de requête incluant les valeurs définies dans l' exemple de scénario.

Exemples de code

L'exemple suivant montre la structure d'une demande de charge dans laquelle vous pouvez définir le loadDemands type en tant que chaîne et la amount propriété en tant que 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, dans laquelle vous pouvez définir le type loadLimits en tant que chaîne et la propriété maxLoad en tant que 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 possédez 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 expédition représente un arrêt où vous récupérez un certain nombre de chiens. Dans cet exemple, chaque expédition a un lieu de collecte différent, qui est le domicile des chiens dont vous vous occupez, et toutes les expéditions ont le même lieu de livraison, à savoir le bâtiment de votre garderie pour chiens.

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

Parent Propriété Type Valeur Scénario
loadDemands Type de charge Chaîne dogUnit Définit le type de charge pour l'expédition. Cet exemple utilise dogUnit, où chaque dogUnit représente un chien.
loadDemands amount Nombre 1re expédition : 1
2e expédition : 3
Spécifie la quantité du type de charge défini. Dans cet exemple, vous définissez deux expéditions : dans la première, vous récupérez un chien, et dans la seconde, vous en récupérez trois.
loadLimits Type de charge Chaîne dogUnit Définit le type de limite de charge appliqué au véhicule. Cette valeur doit correspondre au type de charge de l'expédition pour que la limite soit pertinente.
loadLimits maxLoad Nombre 6 Spécifie la quantité maximale du type de charge 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 demandes de charge de chaque expédition et la façon dont chaque expédition utilise les limites de charge du véhicule :

Le véhicule commence l'itinéraire avec six espaces vides représentant 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 charge de chaque expédition et les limites de charge du véhicule ont les effets suivants :

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

  • Une limite de charge de six dogUnit sur le véhicule signifie également 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'une des collectes ou l'affecterait à 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 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 charge et un véhicule peut avoir plusieurs limites de charge, ce qui vous permet de fournir des contraintes complexes à prendre en compte lors de l'optimisation des itinéraires de votre flotte.

Limites de charge flexibles

Vous pouvez définir des limites de charge en tant que contraintes flexibles en ajoutant softMaxLoad et costPerUnitAboveSoftMax aux loadLimits d'un véhicule. Cela permet à l'optimiseur de dépasser la charge maximale du véhicule à un coût donné, 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 flexible pour les demandes et limites de charge.

Parent Nom de propriété Type de propriété Description de la propriété
loadLimits softMaxLoad Chaîne (format int64) Charge maximale préférée pour un véhicule. Si la charge du véhicule dépasse cette valeur, des frais sont facturés.
loadLimits costPerUnitAboveSoftMax Nombre Coût par unité de charge au-dessus de la 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ûts.

Exemple de code

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

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