Parámetros del modelo de costo

El mensaje OptimizeToursRequest (REST, gRPC) contiene una serie de propiedades relacionadas costos. Juntos, estos parámetros de costo representan modelo de costos. El modelo de costos captura muchas de las solicitudes de optimización, como

  • Priorización de rutas Vehicle más rápidas sobre rutas más cortas o viceversa alrededor
  • Decidir si el costo de entregar un Shipment vale el valor de la Avance de Shipment
  • Realizar retiros y entregas dentro de los períodos solo cuando hacerlo es rentable

Consulta un ejemplo de solicitud con costos

{
  "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
      }
    ]
  }
}
    

Propiedades de costo de Vehicle

El mensaje Vehicle (REST, gRPC) tiene varias propiedades de costo:

  • Vehicle.cost_per_hour: Representa el costo de operar un vehículo por hora. incluidos los horarios de transporte, espera, visita y descanso.
  • Vehicle.cost_per_kilometer: Representa el costo por kilómetro recorrido del vehículo.
  • Vehicle.cost_per_traveled_hour: Representa el costo de operar un vehículo. solo mientras están en tránsito, sin incluir los tiempos de espera, visita ni descanso.

Estos parámetros de costo permiten que el optimizador realice compensaciones entre el tiempo y la distancia recorrida. Los costos generados por la ruta optimizada aparecen en la respuesta mensaje como metrics.costs:

A medida que aumenta costPerHour, el optimizador intenta encontrar rutas más rápidas que quizás no sean las rutas más cortas. En este ejemplo, la ruta más rápida resulta ser la más corta, por lo que los cambios en los parámetros de costo tienen poco efecto.

Shipment propiedades de costo

El mensaje Shipment (REST, gRPC) también tiene varios costos parámetros:

  • Shipment.penalty_cost representa el costo incurrido por la omisión de la envíos.
  • Shipment.VisitRequest.cost representa el costo de un retiro o entrega a domicilio, que se usan principalmente para compensar los costos entre varios retiros o opciones de entrega para un solo envío.

Los parámetros de costo de Shipment usan las mismas unidades sin dimensiones que el costo de Vehicle parámetros. El costo incurrido por completar Shipment supera el costo de la penalización, Shipment no se incluye en ninguna ruta de Vehicle y, en su lugar, aparece en el skipped_shipments en el mensaje de respuesta.

ShipmentModel propiedades de costo

El mensaje ShipmentModel (REST, gRPC) incluye un costo único propiedad, globalDurationCostPerHour. Este costo se genera en función del total el tiempo necesario para que todos los vehículos completen sus ShipmentRoute. En aumento globalDurationCostPerHour prioriza la finalización anticipada de todos los envíos.

Propiedades del costo de respuesta de la optimización de rutas

El mensaje OptimizeToursResponse (REST, gRPC) tiene propiedades de costo que representan los costos incurridos en el proceso de completar ShipmentRoute. Las propiedades metrics.costs y metrics.totalCost representan la cantidad de las unidades de costo que se generan en todas las rutas de la respuesta. Cada entrada routes tiene Propiedades routeCosts y routeTotalCosts que representan los costos ruta específica.

Ver una respuesta a la solicitud de ejemplo con costos

{
  "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
    }
  }
}
    

En la respuesta de ejemplo, las metrics.costs de nivel superior son las siguientes:

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

El valor model.shipments.penalty_cost representa el costo incurrido debido a envíos omitidos. La propiedad skippedShipments indica qué envíos se realizaron se omitió.

En este ejemplo, solo se omite model.shipments[1] en la solicitud de ejemplo. model.shipments[1] tiene un costo de penalización de 5 unidades, que coincide con el total. Clave model.shipments.penalty_cost en la respuesta de ejemplo. El envío está bajo penaltyCost en comparación con los 40.0 costPerHour y 10.0 de Vehicle costPerKilometer hacen que sea más rentable omitir el envío que a completarlo.

Tema avanzado: costos y limitaciones leves

Varias propiedades de mensaje OptimizeToursRequest (REST, gRPC) representan restricciones suaves, que son aquellas que generan un costo cuando no se puede satisfacer.

Por ejemplo, las restricciones LoadLimit (REST, gRPC) del vehículo tienen las propiedades softMaxLoad y costPerUnitAboveSoftMax. En conjunto, generan un proporcional a las unidades de carga que exceden softMaxLoad, lo que permite que el límite solo se debe superar si tiene sentido hacerlo desde el punto de vista del costo.

Del mismo modo, las restricciones TimeWindow (REST, gRPC) tienen las propiedades soft_start_time y soft_end_time, con las que cost_per_hour_before_soft_start_time y cost_per_hour_after_soft_end_time que se contraen en función de qué tan temprano o tarde ocurre el evento limitado con con respecto a TimeWindow.

Al igual que con todos los parámetros de los modelos de costos, los costos de las restricciones flexibles se expresan en el las mismas unidades sin dimensiones que otros parámetros de costos.

Las restricciones LoadLimit se abordan en detalle en Las exigencias y los límites de carga. Las restricciones TimeWindow se abordan en detalle. en Restricciones de los períodos de retiro y entrega.