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

تحتوي رسالة 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] فقط في نموذج الطلب. تم تطبيق تكلفة عقوبة على 5 وحدات في model.shipments[1]، ما يتطابق مع إجمالي مفتاح model.shipments.penalty_cost في نموذج الإجابة. انخفاض الشحنة penaltyCost مقارنةً بالقيمتين 40.0 costPerHour و10.0 costPerKilometer في Vehicle، يجعل تخطّي الشحنة أكثر فعالية من حيث التكلفة بدلاً من إكمالها.

موضوع متقدم: التكاليف والقيود البسيطة

هناك عدة سمات لرسائل 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 بالتفصيل في القيود المفروضة على فترة الاستلام والتسليم.