Les objectifs sont des paramètres que vous pouvez utiliser pour spécifier des objectifs d'optimisation de haut niveau au lieu de fournir des paramètres de coût spécifiques à partir du modèle de coût.
Vous pouvez utiliser plusieurs objectifs dans une même requête et attribuer à chacun une pondération relative pour contrôler son influence sur l'optimisation globale. Les objectifs affectent l'ensemble de votre demande, en influençant tous vos véhicules et vos expéditions. Enfin, vous pouvez également utiliser des objectifs pour commencer à développer votre propre modèle de coût, comme décrit dans Générer un modèle de coût.
Vous pouvez utiliser des objectifs pour contrôler les impacts suivants sur votre plan de route :
- Durée ou distance totale de vos trajets.
- Temps de travail total pour tous les véhicules.
- Nombre total de véhicules utilisés.
Propriétés
La propriété objectives est un tableau de types de messages Objective dans ShipmentModel. Chaque Objective définit un objectif d'optimisation spécifique et contient les champs listés dans le tableau suivant :
| Champ | Type | Description |
|---|---|---|
type |
Énumération |
Spécifie la cible d'optimisation prédéfinie. Les valeurs acceptées sont les suivantes :
|
weight |
Double |
Définit l'importance relative de cet objectif. Lorsque vous utilisez plusieurs objectifs, la valeur weight contrôle l'influence de cet objectif spécifique sur l'optimisation globale de l'itinéraire par rapport aux autres. Il peut s'agir de n'importe quel nombre non négatif et il n'est pas nécessaire que la somme soit égale à 1. La valeur par défaut est 1.0.
|
Exemples
Cette section aborde deux types d'exemples :
- Exemple de code illustrant la structure du tableau
objectives. - Exemple de requête incluant le tableau
objectives.
Exemples de code
L'exemple suivant montre la structure de objectives :
"objectives": [
{
"type": "OBJECTIVE_TYPE",
"weight": WEIGHT
}
]
Exemple de requête
L'exemple suivant montre la structure d'une requête optimizeTours de base intégrant plusieurs objectifs, où MIN_TRAVEL_TIME est trois fois plus important que MIN_WORKING_TIME.
{ "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.42506261000996, "longitude": -122.09535511930135 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.42421503206021, "longitude": -122.09526063135228 } } ] } ], "vehicles": [ { "travelMode": "DRIVING" } ], "objectives": [ { "type": "MIN_TRAVEL_TIME", "weight": 3.0 }, { "type": "MIN_WORKING_TIME" } ] } }
Générer un modèle de coûts
Les objectifs sont un moyen rapide de définir des cibles d'optimisation, mais dans certains cas, ils peuvent ne pas être assez spécifiques. Pour atteindre vos objectifs de routage exacts, vous aurez peut-être besoin du contrôle précis disponible uniquement via les paramètres du modèle de coût.
Vous pouvez commencer à développer votre propre modèle de coûts en ajoutant des objectifs à votre requête, puis en convertissant les objectifs de votre requête en paramètres de modèle de coûts à l'aide du mode de résolution TRANSFORM_AND_RETURN_REQUEST.
Lorsque vous envoyez une requête à l'aide de ce mode de résolution, voici ce qui se passe :
- L'API convertit vos objectifs en paramètres de modèle de coûts et les renvoie dans un
processedRequest. Vous pouvez ensuite ajuster les paramètres du modèle de coûts selon vos besoins pour affiner votre plan de tournée. - Lorsque vous utilisez plusieurs objectifs, l'API combine les coûts de tous vos objectifs et les met à l'échelle en fonction de leurs pondérations respectives.
- Aucun frais ne vous sera facturé pour cette requête, car l'API ne vous fournit pas d'itinéraire optimisé. Elle ne fait que convertir les objectifs en paramètres de modèle de coût.
Exemple de requête
L'exemple suivant montre une requête utilisant l'objectif MIN_TRAVEL_TIME et le mode de résolution TRANSFORM_AND_RETURN_REQUEST :
{ "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.42506261000996, "longitude": -122.09535511930135 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.42421503206021, "longitude": -122.09526063135228 } } ] } ], "vehicles": [ { "travelMode": "DRIVING" } ], "objectives": [ { "type": "MIN_TRAVEL_TIME" } ] }, "solvingMode": "TRANSFORM_AND_RETURN_REQUEST" }
Exemple de réponse
Voici la réponse correspondant à la requête précédente. Cette réponse inclut à la fois les paramètres du modèle de coûts générés et l'objectif d'origine pour référence.
{ "processedRequest": { "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.425062610009959, "longitude": -122.09535511930135 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.424215032060211, "longitude": -122.09526063135228 } } ] } ], "vehicles": [ { "travelMode": "DRIVING", "costPerHour": 30, "costPerTraveledHour": 330, "costPerKilometer": 0.2 } ], "objectives": [ { "type": "MIN_TRAVEL_TIME" } ] }, "solvingMode": "TRANSFORM_AND_RETURN_REQUEST" } }