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 :
loadDemands
est une propriété deShipment
. UnShipment
peut avoir plusieurs demandes de charge.loadLimits
est une propriété deVehicle
. UnVehicle
peut avoir plusieurs limites de charge.
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
etLoadLimit
: 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 :
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 } } }