پاسخ را تفسیر کنید

توسعه‌دهندگان منطقه اقتصادی اروپا (EEA)

API بهینه‌سازی مسیر، مسیرهای مربوط به وسایل نقلیه را در درخواست مربوطه برمی‌گرداند. محموله‌ها به وسایل نقلیه اختصاص داده می‌شوند یا بسته به ویژگی‌های درخواست، ممکن است از آنها صرف نظر شود.

یک پیام OptimizeToursResponse ( REST ، gRPC ) دارای دو ویژگی اصلی سطح بالا است:

  • routes[] مسیرهایی برای هر وسیله نقلیه با محموله‌های اختصاص داده شده به آن هستند. هر Route شامل معیارهایی است که ویژگی‌های آن مسیر خاص را منعکس می‌کند.
  • metrics معیارهای تجمیعی برای کل پاسخ، در بین تمام وسایل نقلیه و برنامه‌های مسیر هستند. معیارهای سطح بالا شامل همان ویژگی‌های معیارهای هر مسیر هستند، با مقادیر تجمیعی در تمام مسیرها.

بسته به نتایج بهینه‌سازی، ممکن است برخی از ویژگی‌ها همیشه پر نشوند:

  1. skippedShipments[] محموله‌هایی را فهرست می‌کند که توسط هیچ وسیله نقلیه‌ای انجام نمی‌شوند. اگر نتوان یک محموله را در محدودیت‌های مشخص‌شده انجام داد یا اگر هزینه انجام آن از هزینه جریمه‌اش بیشتر شود، می‌توان از آن صرف‌نظر کرد. به عنوان مثال، اگر بارگیری یا تحویل یک محموله دارای timeWindow بسیار محدودی باشد، ممکن است انجام بازدید توسط یک وسیله نقلیه در بازه زمانی مورد نیاز امکان‌پذیر یا مقرون به صرفه نباشد.
  2. validationErrors[] خطاهایی را مشخص می‌کند که باعث می‌شوند درخواست نامعتبر یا حل آن غیرممکن شود، زمانی که solvingMode درخواست روی VALIDATE_ONLY تنظیم شده باشد. در حالت عادی DEFAULT_SOLVE ، خطاهای اعتبارسنجی به جای بدنه پاسخ، در یک پیام خطا ظاهر می‌شوند. توجه داشته باشید که حالت حل VALIDATE_ONLY می‌تواند چندین خطا را به طور همزمان گزارش کند، که برای اشکال‌زدایی سریع درخواست‌ها مفید است.

ویژگی‌های مسیر

هر ورودی routes[] یک پیام ShipmentRoute ( REST ، gRPC ) است. هر ShipmentRoute نشان‌دهنده‌ی تخصیص مسیر برای یک وسیله نقلیه خاص از درخواست است. ویژگی‌های مهم ShipmentRoute مربوط به Vehicle مربوطه عبارتند از:

  • vehicleIndex اندیس مبتنی بر صفرِ Vehicle در پیام درخواست مربوطه است. پاسخ‌های REST وقتی مقدار صفر باشد، این ویژگی را حذف می‌کنند.
  • vehicleStartTime زمانی است که وسیله نقلیه باید مسیر خود را آغاز کند.
  • vehicleEndTime زمانی است که انتظار می‌رود وسیله نقلیه مسیر خود را به پایان برساند.

در پاسخ، routes به شکل زیر خواهند بود:

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        ...
      ],
      "transitions": [
        ...
      ],
      "metrics": {
        ...
      },
      ...
    }
  ],
  ...
}

هر ShipmentRoute شامل یک لیست مرتب از visits است که وسیله نقلیه انجام خواهد داد. هر Visit ( REST ، gRPC ) نشان دهنده یک VisitRequest ( REST ، gRPC ) از درخواست مربوطه است. ویژگی‌های مهم Visit عبارتند از:

  • shipmentIndex شاخص مبتنی بر صفر حمل و نقلی است که این بازدید در درخواست مربوطه به آن تعلق دارد.
  • isPickup وقتی بازدید، برداشت محصول باشد، مقدار true و وقتی بازدید، تحویل محصول باشد، مقدار false دارد. پاسخ‌های REST وقتی مقدار false باشد، این ویژگی را حذف می‌کنند.
  • visitRequestIndex شاخص مبتنی بر صفر VisitRequest از Shipment.pickups یا Shipment.deliveries در درخواست مربوطه است که Visit نشان دهنده آن است. پاسخ‌های REST وقتی مقدار صفر باشد، این ویژگی را حذف می‌کنند.
  • startTime ، زمانی است که انتظار می‌رود بازدید شروع شود.
  • تابع loadDemands نوع بار را به مقدار بار مورد نیاز برای تکمیل Visit نگاشت می‌کند. مقادیر بار برای بازدیدهای تحویل منفی هستند که نشان دهنده بار برداشته شده از وسیله نقلیه است.

یک نمونه Visit به این شکل است:

{
  "routes": [
    {
      ...
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        ...
      ],
    },
    ...
  ],
  ...
}

هر ShipmentRoute شامل یک لیست مرتب از transitions است که نشان‌دهنده سفر بین visits برای یک وسیله نقلیه معین است. ویژگی‌های مهم پیام Transition ( REST ، gRPC ) عبارتند از:

  • startTime ، زمانی است که وسیله نقلیه شروع به انجام انتقال می‌کند.
  • travelDuration مدت زمانی است که وسیله نقلیه باید برای تکمیل انتقال طی کند.
  • travelDistanceMeters مسافتی است که وسیله نقلیه باید برای تکمیل انتقال طی کند (برحسب متر).
  • trafficInfoUnavailable نشان می‌دهد که آیا داده‌های ترافیکی برای انتقال در دسترس هستند یا خیر.
  • waitDuration نشان دهنده زمان بیکاری است که وسیله نقلیه قبل از شروع Visit بعدی خود صرف می‌کند. این ممکن است به دلیل start_time Visit بعدی ایجاد شود.
  • totalDuration کل مدت زمان انتقال، شامل زمان‌های سفر، انتظار، استراحت و تأخیر است.
  • vehicleLoads نوع بار را به مقدار بار حمل شده توسط وسیله نقلیه در طول این انتقال نگاشت می‌کند.

یک مثال از Transition به شکل زیر است:

{
  "routes": [
    {
      ...
      "transitions": [
        ...
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        ...
      ],
      ...
    }
  ],
  ...
}

برای اطلاعات بیشتر در مورد رابطه بین vists و transitions ، به بهینه‌سازی سفارش توقف برداشت و تحویل و مستندات مرجع ShipmentRoute ( REST ، gRPC ) مراجعه کنید. برای اطلاعات بیشتر در مورد ویژگی‌های routePolyline و routeToken یک پیام Transition ، به Transition Polylines و Route Tokens مراجعه کنید.

ویژگی‌های معیارها

پیام Metrics ( REST ، gRPC ) کل راهکار را خلاصه می‌کند. برخی از ویژگی‌های مهم Metrics عبارتند از:

  • totalCost کل هزینه‌ای است که برای تکمیل مسیرها متحمل شده‌ایم. برای اطلاعات بیشتر در مورد هزینه‌ها به پارامترهای مدل هزینه مراجعه کنید.
  • usedVehicleCount تعداد کل وسایل نقلیه استفاده شده در راه‌حل است. وسایل نقلیه ممکن است مسیرهای خالی داشته باشند، زمانی که بهینه‌ساز تشخیص دهد که استفاده از آنها غیرضروری است.
  • skippedMandatoryShipmentCount تعداد محموله‌های نادیده گرفته شده‌ای است که "اجباری" هستند. یک محموله اجباری، penaltyCost که در صورت نادیده گرفتن محموله متحمل می‌شود، مشخص نمی‌کند. اگر عملکرد محموله‌های اجباری تحت محدودیت‌های مشخص شده امکان‌پذیر نباشد، همچنان می‌توان از آنها صرف نظر کرد. برای اطلاعات بیشتر در مورد هزینه‌ها به پارامترهای مدل هزینه مراجعه کنید.

معیارهای اضافی به عنوان پیام‌های AggregatedMetrics ( REST ، gRPC ) گزارش می‌شوند. نوع پیام AggregatedMetrics برای ویژگی Metrics.aggregatedRouteMetrics و برای ویژگی ShipmentRoute.metrics استفاده می‌شود. Metrics.aggregatedRouteMetrics شامل معیارهای تجمیع شده در تمام ShipmentRoute های موجود در OptimizeToursResponse است. هر ویژگی ShipmentRoute.metrics شامل معیارهایی برای آن ShipmentRoute خاص است.

ویژگی‌های مهم AggregatedMetrics عبارتند از:

  • performedShipmentCount تعداد محموله‌های انجام شده توسط وسایل نقلیه در کل مسیرهایشان است.
  • travelDuration ، کل زمانی است که وسایل نقلیه در حین طی کردن مسیرهای خود، در حال عبور هستند.
  • waitDuration ، کل زمانی است که وسایل نقلیه برای تکمیل مسیرهای خود منتظر می‌مانند.
  • delayDuration کل زمان تأخیر برای وسایل نقلیه است. این مقدار معمولاً صفر است مگر اینکه TransitionAttributes در درخواست استفاده شود.
  • breakDuration ، کل زمانی است که وسایل نقلیه هنگام تکمیل مسیرهای خود در استراحت می‌گذرانند.
  • مدت زمان visitDuration کل زمانی است که وسایل نقلیه صرف بازدیدها در حین تکمیل مسیرهای خود می‌کنند. این در واقع مجموع تمام مقادیر VisitRequest.duration برای VisitRequest های مربوط به Visit های اختصاص داده شده به وسیله نقلیه مربوطه است.
  • totalDuration کل مدت زمان مورد نیاز برای تکمیل مسیرهای وسایل نقلیه است.
  • travelDistanceMeters کل مسافت طی شده توسط وسایل نقلیه در حین تکمیل مسیرهایشان است.
  • تابع maxLoads انواع بار را به حداکثر میزان بار حمل شده توسط وسایل نقلیه در هر نقطه از مسیرشان نگاشت می‌کند.

یک نمونه پیام Metrics به شکل زیر است:

{
  "routes": [
    ...
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2322s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2322s",
      "travelDistanceMeters": 18603
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T00:00:00Z",
    "latestVehicleEndTime": "2024-02-13T00:38:42Z",
    "totalCost": 18.603,
    "costs": {
      "model.vehicles.cost_per_kilometer": 18.603
    }
  }
}

مثال کامل

یک نمونه پاسخ کامل برای درخواست از Construct a Request به شکل زیر است:

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        {
          "startTime": "2024-02-13T00:19:31Z",
          "detour": "0s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        {
          "travelDuration": "1151s",
          "travelDistanceMeters": 9599,
          "waitDuration": "0s",
          "totalDuration": "1151s",
          "startTime": "2024-02-13T00:19:31Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 1,
        "travelDuration": "2322s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "0s",
        "totalDuration": "2322s",
        "travelDistanceMeters": 18603
      },
      "routeCosts": {
        "model.vehicles.cost_per_kilometer": 18.603
      },
      "routeTotalCost": 18.603
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2322s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2322s",
      "travelDistanceMeters": 18603
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T00:00:00Z",
    "latestVehicleEndTime": "2024-02-13T00:38:42Z",
    "totalCost": 18.603,
    "costs": {
      "model.vehicles.cost_per_kilometer": 18.603
    }
  }
}