Les demandes et les 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 livraison 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 les 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 colis ;
- privilégier l'association de véhicules lourds à des livraisons de charges lourdes.
Les demandes et les limites de charge sont spécifiées dans les propriétés suivantes :
loadDemandsspécifie la quantité de capacité requise par une livraison particulière.loadLimitsspécifie la capacité maximale d'un véhicule donné.
Structure
Comme le montre le diagramme, les demandes et les limites de charge sont structurées comme suit :
loadDemandsest une propriété deShipment. AShipmentpeut avoir plusieurs demandes de charge.loadLimitsest une propriété deVehicle. UnVehiclepeut avoir plusieurs limites de charge.
Check-list des points 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.
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 et les limites de charge.
LoadetLoadLimit: propriétés uniques présentes respectivement dans les demandes et les limites de charge.
Type de charge
Un type de charge est une clé de chaîne que vous appliquez de manière égale aux livraisons et aux véhicules. Un seul type de charge s'applique à la demande de charge d'une livraison 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 permettant de
définir les exigences de capacité pour les livraisons 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 la livraison 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 demandes et des limites de charge propriétés.
- Exemple de scénario montrant une façon d'utiliser les demandes et les 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 livraison représente un arrêt où vous récupérez un certain nombre de chiens. Dans cet exemple, chaque livraison a un lieu de collecte différent, qui est le domicile des chiens dont vous vous occupez, et toutes les livraisons 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 la livraison. Cet exemple utilise dogUnit, où chaque dogUnit représente un chien. |
loadDemands |
amount |
Nombre | 1re livraison : 12e livraison : 3 |
Spécifie la quantité du type de charge défini. Dans cet exemple, vous définissez deux livraisons : 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 la livraison 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 livraison et la façon dont chaque livraison utilise les limites de charge du véhicule :

Dans cet exemple, les demandes de charge de chaque livraison 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 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.
Le fait d'avoir une limite de charge de six
dogUnitsur 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 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 livraison 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 souples
Vous pouvez définir des limites de charge comme des contraintes souples 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 souple. 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 |
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 souple de loadLimits :
{ "loadLimits": { "LOAD_TYPE": { "softMaxLoad": "LOAD_AMOUNT", "costPerUnitAboveSoftMax": COST_PER_UNIT } } }