Objectifs

Les propriétés d'objectif incluent "objectives" dans "ShipmentModel", ainsi que "type" et "weight" dans "objectives".

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 :
  • DEFAULT : utilise un ensemble de coûts par défaut pour garantir une solution de référence, ce qui signifie qu'elle empêche la solution d'utiliser des valeurs extrêmes pour atteindre un objectif. DEFAULT est ajouté automatiquement aux requêtes qui contiennent un objectif, avec une weight de 1.0. Si vous incluez activement cet objectif dans votre demande, la solution utilise le weight que vous spécifiez.
  • MIN_DISTANCE : minimise la distance totale parcourue.
  • MIN_WORKING_TIME : minimise le temps de travail total, cumulé pour tous les véhicules.
  • MIN_TRAVEL_TIME : minimise le temps de trajet total, cumulé pour tous les véhicules.
  • MIN_NUM_VEHICLES : minimise le nombre de véhicules utilisés.
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"
  }
}