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

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