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 attributions de routes en fonction de ces contraintes.

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

  • Empêcher les véhicules d'être surchargés
  • Suivez l'évolution des chargements des véhicules à mesure que les envois sont collectés et livrés.
  • Priorisez l'association de véhicules lourds aux expéditions de charges lourdes.

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 un envoi particulier.
  • 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 à la charge. Cette liste peut vous aider à valider votre requête et à résoudre les problèmes de réponse.

Propriétés

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

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

Type de chargement

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'un envoi ainsi qu'à la limite de charge d'un véhicule.

Les types de charge utilisent la syntaxe de 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 pour 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 l'établissement
Load loadDemands amount string (format int64) Définit la capacité requise pour l'envoi du type spécifié.
LoadLimit loadLimits maxLoad string (format int64) Définit la capacité de charge maximale du véhicule du type spécifié.

Exemples

Cette section présente trois types d'exemples:

  • Exemples de code illustrant la structure des demandes de charge et des propriétés de limite.
  • Exemple de scénario montrant comment utiliser les demandes de charge et les limites 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 type loadDemands en tant que chaîne et la propriété amount 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 basique d'une limite de charge, où 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 gérez une pension pour chiens et que vous optimisez un itinéraire pour transporter quelques chiens dans un véhicule avec un nombre limité de cages.

Chaque envoi correspond à 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, qui est le domicile des chiens dont vous vous occupez, et tous les envois ont le même lieu de livraison, le bâtiment de votre pension 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 charge pour l'expédition. Cet exemple utilise dogUnit, où chaque dogUnit représente un chien.
loadDemands amount Total 1re expédition: 1
2e expédition: 3
Indique la quantité du type de charge défini. Dans cet exemple, vous définissez deux envois : dans le premier, vous récupérez un chien, et dans le second, trois chiens.
loadLimits type de chargement chaîne dogUnit Définit le type de limite de charge appliquée au véhicule. Ce paramètre doit correspondre au type de charge de l'envoi pour que la limite soit pertinente.
loadLimits maxLoad Total 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 avec une capacité maximale de 6 dogUnit, chaque dogUnit représentant une cage pour chien.

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

Le véhicule commence le trajet avec six espaces vides représentant les limites de charge du véhicule. Le premier envoi nécessite un espace pour un chien, le second un espace pour trois chiens. À la fin, quatre des six places sont occupées, et deux restent vides.

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

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

  • Une limite de charge de 6 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 chargement, l'optimiseur ignorait l'un des enlèvements ou l'attribuait à 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 (unités de chien) 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 de charge et les limites à 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. Vous pouvez ainsi fournir des contraintes complexes à prendre en compte lors de l'optimisation des itinéraires de votre flotte.