Paramètres du modèle de coût

Le message OptimizeToursRequest (REST, gRPC) contient un certain nombre de propriétés liées à coûts. Ensemble, ces paramètres de coût représentent le modèle de coûts. Le modèle de coût capture de nombreux aspects généraux de la requête des objectifs d'optimisation, tels que:

  • Privilégier les itinéraires Vehicle plus rapides sur les itinéraires plus courts ou dans l'autre sens environ
  • Déterminer si le coût de diffusion d'un Shipment vaut la valeur de la Progression de Shipment
  • Effectuer des retraits et des livraisons dans les créneaux horaires uniquement si cela est rentable

Voir un exemple de requête avec des coûts

{
  "model": {
    "globalStartTime": "2023-01-13T16:00:00-08:00",
    "globalEndTime": "2023-01-14T16:00:00-08:00",
    "shipments": [
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789456,
              "longitude": -122.390192
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 100.0
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789116,
              "longitude": -122.395080
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 5.0
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.795242,
              "longitude": -122.399347
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 50.0
      }
    ],
    "vehicles": [
      {
        "endLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "startLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "costPerHour": 40.0,
        "costPerKilometer": 10.0
      }
    ]
  }
}
    

Vehicle propriétés de coût

Le message Vehicle (REST, gRPC) comporte plusieurs propriétés de coût:

  • Vehicle.cost_per_hour: représente le coût d'utilisation d'un véhicule par heure. (y compris les temps de transport, d'attente, de visite et de pause).
  • Vehicle.cost_per_kilometer: représente le coût par kilomètre parcouru par le véhicule.
  • Vehicle.cost_per_traveled_hour: représente le coût d'utilisation d'un véhicule. uniquement pendant le transport, à l'exception des temps d'attente, de visite et de pause.

Ces paramètres de coût permettent à l'optimiseur de faire le lien entre le temps et la distance parcourue les compromis. Les coûts engendrés par l'itinéraire optimisé apparaissent dans la réponse. message en tant que metrics.costs:

À mesure que costPerHour augmente, l'optimiseur tente de trouver des routes plus rapides qui ne correspondent peut-être pas aux itinéraires les plus courts. Dans cet exemple, l'itinéraire le plus rapide est la plus courte. Par conséquent, les modifications apportées aux paramètres de coût ont peu d'effet.

Shipment propriétés de coût

Le message Shipment (REST, gRPC) a également plusieurs coûts paramètres:

  • Shipment.penalty_cost représente le coût engendré en ignorant la valeur livraison.
  • Shipment.VisitRequest.cost représente le coût d'un retrait spécifique la livraison, utilisée principalement pour permettre des compromis en termes de coûts entre plusieurs retraits pour un même envoi.

Shipment paramètres de coût utilisent les mêmes unités sans dimension que le coût Vehicle. paramètres. Le coût facturé pour Shipment dépasse le coût de sa pénalité, le Shipment n'est pas inclus sur l'itinéraire d'aucun Vehicle et apparaît à la place dans le skipped_shipments dans le message de réponse.

ShipmentModel propriétés de coût

Le message ShipmentModel (REST, gRPC) inclut un seul coût de projet, globalDurationCostPerHour. Ces frais sont basés sur le montant total de temps nécessaire pour que tous les véhicules terminent leurs ShipmentRoute. En hausse globalDurationCostPerHour donne la priorité aux livraisons anticipées.

Propriétés de coût de la réponse d'optimisation des routes

Le message OptimizeToursResponse (REST, gRPC) comporte des propriétés de coût. qui représentent les coûts encourus lors du processus d'exécution des ShipmentRoute. Les propriétés metrics.costs et metrics.totalCost représentent le nombre de d'unités de coûts pour toutes les routes de la réponse. Chaque entrée routes a routeCosts et routeTotalCosts établissements, ce qui représente les coûts correspondants route spécifique.

Afficher une réponse à l'exemple de requête avec des coûts

{
  "routes": [
    {
      "vehicleStartTime": "2023-01-14T00:00:00Z",
      "vehicleEndTime": "2023-01-14T00:28:22Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2023-01-14T00:00:00Z",
          "detour": "0s"
        },
        {
          "shipmentIndex": 2,
          "isPickup": true,
          "startTime": "2023-01-14T00:02:30Z",
          "detour": "150s"
        },
        {
          "startTime": "2023-01-14T00:08:55Z",
          "detour": "150s"
        },
        {
          "shipmentIndex": 2,
          "startTime": "2023-01-14T00:21:21Z",
          "detour": "572s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-14T00:00:00Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-14T00:02:30Z"
        },
        {
          "travelDuration": "235s",
          "travelDistanceMeters": 795,
          "waitDuration": "0s",
          "totalDuration": "235s",
          "startTime": "2023-01-14T00:05:00Z"
        },
        {
          "travelDuration": "496s",
          "travelDistanceMeters": 1893,
          "waitDuration": "0s",
          "totalDuration": "496s",
          "startTime": "2023-01-14T00:13:05Z"
        },
        {
          "travelDuration": "171s",
          "travelDistanceMeters": 665,
          "waitDuration": "0s",
          "totalDuration": "171s",
          "startTime": "2023-01-14T00:25:31Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 2,
        "travelDuration": "902s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "800s",
        "totalDuration": "1702s",
        "travelDistanceMeters": 3353
      },
      "routeCosts": {
        "model.vehicles.cost_per_kilometer": 33.53,
        "model.vehicles.cost_per_hour": 18.911111111111111
      },
      "routeTotalCost": 52.441111111111113
    }
  ],
  "skippedShipments": [
    {
      "index": 1
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 2,
      "travelDuration": "902s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "800s",
      "totalDuration": "1702s",
      "travelDistanceMeters": 3353
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2023-01-14T00:00:00Z",
    "latestVehicleEndTime": "2023-01-14T00:28:22Z",
    "totalCost": 57.441111111111113,
    "costs": {
      "model.vehicles.cost_per_kilometer": 33.53,
      "model.vehicles.cost_per_hour": 18.911111111111111,
      "model.shipments.penalty_cost": 5
    }
  }
}
    

Dans l'exemple de réponse, les metrics.costs de premier niveau sont les suivants:

{
  "metrics": {
    ...
    "costs": {
      "model.vehicles.cost_per_hour": 18.911111111111111,
      "model.vehicles.cost_per_kilometer": 33.53,
      "model.shipments.penalty_cost": 5
    }
  }
}

La valeur model.shipments.penalty_cost représente le coût dû à livraisons ignorées. La propriété skippedShipments indique les livraisons ignorée.

Dans cet exemple, seul model.shipments[1] est ignoré dans l'exemple de requête. model.shipments[1] a un coût de pénalité de 5 unités, ce qui correspond au total model.shipments.penalty_cost dans l'exemple de réponse. La livraison est presque terminée penaltyCost par rapport aux 40,0 costPerHour et 10,0 de Vehicle costPerKilometer, il est plus rentable de sauter la livraison que de le compléter.

Sujet avancé: coûts et contraintes souples

Plusieurs propriétés de message OptimizeToursRequest (REST, gRPC) représentent des contraintes souples, qui entraînent des frais lorsqu'elles ne peut pas être satisfaite.

Par exemple, les contraintes LoadLimit du véhicule (REST, gRPC) ont softMaxLoad et costPerUnitAboveSoftMax. Ensemble, ils entraînent une un coût proportionnel aux unités de charge qui dépassent softMaxLoad, ce qui permet ne peut être dépassée que si cela est pertinent du point de vue des coûts.

De même, les contraintes TimeWindow (REST, gRPC) ont soft_start_time et soft_end_time, avec les propriétés correspondantes cost_per_hour_before_soft_start_time et cost_per_hour_after_soft_end_time qui sont engagés en fonction de l'avance ou du retard de l'événement de contrainte par rapport à TimeWindow.

Comme pour tous les paramètres de modèle de coût, les coûts associés à une contrainte souple sont exprimés dans le les mêmes unités sans dimension que les autres paramètres de coût.

Les contraintes LoadLimit sont traitées en détail dans Demandes et limites de chargement : Les contraintes TimeWindow sont traitées en détail dans la section Contraintes liées aux périodes de retrait et de livraison.