مثال: نموذج التكلفة

يوضّح هذا المثال كيفية استخدام مَعلمات التكلفة للحصول على مسار فعّال من حيث التكلفة.

للحصول على نظرة عامة كاملة حول المفهوم، يمكنك الاطّلاع على مستند المفهوم الأساسي لنموذج التكلفة.

مثال على الطلب

يوضّح المثال التالي سيناريو يجب فيه أن تنقل مركبة واحدة ثلاث شحنات. تتضمّن المركبة تكاليف مرتبطة بالوقت والمسافة، ويتضمّن كل شحن penaltyCost يتم تكبّده في حال تخطّي الشحن.

يتضمّن طلب المثال هذا المَعلمات التالية المتعلّقة بالتكلفة:

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

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

مثال على إجابة

يوضّح الردّ أنّ أداة التحسين تنشئ مسارًا ينفّذ شحنتَين من الشحنات الثلاث. تم تخطّي الشحنة الثالثة لأنّ penaltyCost أقل من تكاليف السيارة المحسوبة للاستلام والتسليم.

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

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

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

  • تعرض routeCosts تفاصيل التكاليف التشغيلية لمسار معيّن، وهي في هذه الحالة:
    • model.vehicles.cost_per_kilometer: 33.53.
    • model.vehicles.cost_per_hour: 18.91.
  • إنّ routeTotalCost (52.44) هو مجموع التكاليف المدرَجة في routeCosts.
  • على مستوى الاستجابة الأعلى، يلخّص العنصر costs كل التكاليف المتكبّدة في الحلّ. ويشمل ذلك التكاليف التشغيلية من جميع مسارات المركبات بالإضافة إلى أي غرامات، مثل model.shipments.penalty_cost (5.0) للشحنة التي تم تخطّيها.
  • يمثّل الرقم النهائي totalCost (57.44) الإجمالي العام للحل، وهو مجموع routeTotalCost من جميع المركبات وجميع تكاليف الغرامات. في هذه الحالة، تكون القيمة 52.44 + 5.0.