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

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