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

تحتوي رسالة 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 التكلفة المتكبّدة بسبب تخطّي الشحن.
  • تمثّل السمة Shipment.VisitRequest.cost تكلفة عملية استلام أو تسليم معيّنة، وتُستخدَم في المقام الأول للسماح بإجراء مفاضلات في التكلفة بين خيارات متعددة للاستلام أو التسليم لشحنة واحدة.

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

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

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

سمات تكلفة استجابة ميزة "تحسين المسار"

تحتوي رسالة 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 يتم تناول القيود بالتفصيل في قيود فترة استلام وتسليم الطلبات.