مَعلمات نموذج التكلفة

المطوّرون في المنطقة الاقتصادية الأوروبية

تحتوي الرسالة OptimizeToursRequest (REST، gRPC) على عدد من الخصائص المتعلقة بالتكاليف. تمثّل مَعلمات التكلفة هذه معًا نموذج التكلفة للطلب. يشتمل نموذج التكلفة على العديد من أهداف التحسين العالية المستوى للطلب، مثل:

  • تحديد أولوية Vehicle للمسارات الأسرع على المسارات الأقصر أو العكس
  • تحديد ما إذا كانت تكلفة تسليم Shipment تستحق قيمة إكمال Shipment
  • إجراء عمليات الاستلام والتسليم خلال فترات زمنية محدّدة فقط عندما يكون ذلك فعّالاً من حيث التكلفة

الاطّلاع على مثال على طلب يتضمّن التكاليف

{
  "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 خصائص التكلفة

تحتوي رسالة Vehicle (REST وgRPC) على عدة سمات للتكلفة:

  • Vehicle.cost_per_hour: تمثّل تكلفة تشغيل مركبة في الساعة، بما في ذلك أوقات النقل والانتظار والزيارة والاستراحة.
  • Vehicle.cost_per_kilometer: تمثّل التكلفة لكل كيلومتر تقطعه المركبة.
  • Vehicle.cost_per_traveled_hour: تمثّل تكلفة تشغيل مركبة أثناء النقل فقط، باستثناء أوقات الانتظار والزيارة والاستراحة.

تسمح مَعلمات التكلفة هذه لأداة التحسين بإجراء مقايضة بين الوقت والمسافة المقطوعة. تظهر التكاليف التي تتكبّدها المسارات المحسَّنة في رسالة الرد على النحو التالي: metrics.costs

كلما زادت قيمة costPerHour، يحاول المحسِّن العثور على مسارات أسرع قد لا تكون الأقصر. في هذا المثال، تبيّن أنّ أسرع مسار هو الأقصر، لذا فإنّ التغييرات في مَعلمات التكلفة ليس لها تأثير كبير.

Shipment خصائص التكلفة

تحتوي رسالة Shipment (REST، gRPC) أيضًا على عدة مَعلمات متعلقة بالتكلفة:

  • تمثّل Shipment.penalty_cost التكلفة التي يتم تكبّدها عند تخطّي الشحنة. يؤدي عدم ضبط المَعلمة penalty_cost لشحنة إلى جعل الشحنة إلزامية، ما يعني أنّه لن يتم تخطّي الشحنة إلا إذا تعذّر إكمالها بسبب القيود المحدّدة.
  • تمثّل السمة Shipment.VisitRequest.cost تكلفة عملية استلام أو توصيل محدّدة، وتُستخدَم بشكل أساسي لإتاحة المقارنة بين تكاليف خيارات استلام أو توصيل متعدّدة لشحنة واحدة.

تستخدِم معلَمات التكلفة Shipment وحدات بلا أبعاد مماثلة لمعلَمات التكلفة Vehicle. إذا كانت التكلفة المتكبّدة لإكمال Shipment تتجاوز تكلفة العقوبة، لن يتم تضمين Shipment في أي مسار Vehicle، بل سيظهر في قائمة skipped_shipments في رسالة الرد.

ShipmentModel خصائص التكلفة

تتضمّن رسالة ShipmentModel (REST وgRPC) سمة تكلفة واحدة، وهي globalDurationCostPerHour. يتم تكبّد هذه التكلفة استنادًا إلى إجمالي الوقت المطلوب من جميع المركبات لإكمال ShipmentRoute. تؤدي زيادة globalDurationCostPerHour إلى إعطاء الأولوية لإكمال جميع الشحنات في وقت أقرب.

خصائص تكلفة استجابة Route Optimization

تحتوي رسالة OptimizeToursResponse (REST وgRPC) على خصائص التكلفة التي تمثّل التكاليف المتكبّدة في عملية إكمال ShipmentRoute. تمثّل الخاصيتان metrics.costs وmetrics.totalCost عدد وحدات التكلفة التي تم تكبّدها على مستوى جميع المسارات في الاستجابة. يتضمّن كل إدخال routes السمتَين routeCosts وrouteTotalCosts اللتين تمثّلان تكاليف هذا المسار المحدّد.

الاطّلاع على ردّ على طلب المثال مع التكاليف

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

في مثال الردّ، تكون metrics.costs ذات المستوى الأعلى هي:

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

تمثّل القيمة model.shipments.penalty_cost التكلفة المتكبّدة بسبب عمليات الشحن التي تم تخطّيها. تعرض السمة skippedShipments الشحنات التي تم تخطّيها.

في هذا المثال، يتم تخطّي model.shipments[1] فقط في طلب المثال. تبلغ تكلفة المخالفة في model.shipments[1] 5 وحدات، وهو ما يتطابق مع المفتاح model.shipments.penalty_cost في نموذج الردّ. إنّ قيمة الشحنة المنخفضة penaltyCost مقارنةً بقيمة Vehicle البالغة 40.0 costPerHour و10.0 costPerKilometer تجعل تخطّي الشحنة أكثر فعالية من حيث التكلفة من إكمالها.

موضوع متقدّم: التكاليف والقيود المرنة

تمثّل العديد من خصائص رسائل OptimizeToursRequest (REST وgRPC) قيودًا مرنة، وهي قيود تتكبّد تكلفة عند عدم استيفائها.

على سبيل المثال، تتضمّن قيود المركبة LoadLimit (REST، gRPC) السمتَين softMaxLoad وcostPerUnitAboveSoftMax. ويؤدي ذلك إلى تكلفة تتناسب مع وحدات التحميل التي تتجاوز softMaxLoad، ما يسمح بتجاوز الحدّ فقط إذا كان ذلك منطقيًا من ناحية التكلفة.

وبالمثل، تحتوي قيود TimeWindow (REST وgRPC) على السمتَين soft_start_time وsoft_end_time، مع السمتَين cost_per_hour_before_soft_start_time وcost_per_hour_after_soft_end_time المقابلتَين اللتين يتم تحمّلهما استنادًا إلى مدى حدوث الحدث المقيد مبكرًا أو متأخرًا مقارنةً بـ TimeWindow.

كما هو الحال مع جميع مَعلمات نموذج التكلفة، يتم التعبير عن تكاليف القيود المرنة بوحدات غير بعدية مماثلة لمَعلمات التكلفة الأخرى.

يتم تناول قيود LoadLimit بالتفصيل في مقالة متطلبات التحميل والحدود. يتم تناول قيود TimeWindow بالتفصيل في قيود الفترة الزمنية للاستلام والتسليم.