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

Route Optimization 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 زمانی درست است که یک بازدید یک پیکاپ باشد و نادرست است زمانی که یک بازدید یک تحویل باشد. پاسخ‌های REST وقتی مقدار نادرست باشد، این ویژگی را حذف می‌کنند.
  • 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 Loads نوع بار را به مقدار بار حمل شده توسط وسیله نقلیه در طول این انتقال نقشه می‌کشد.

یک مثال Transition به نظر می رسد:

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

رابطه بین vists و transitions در بهینه سازی سفارش توقف تحویل و تحویل ، و همچنین در مستندات مرجع ShipmentRoute ( REST ، gRPC ) توضیح داده شده است.

ویژگی های متریک

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

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

معیارهای اضافی به‌عنوان پیام‌های AggregatedMetrics گزارش می‌شوند ( REST ، gRPC ). نوع پیام AggregatedMetrics برای ویژگی Metrics.aggregatedRouteMetrics و ShipmentRoute ویژگی ShipmentRoute.metrics استفاده OptimizeToursResponse Metrics.aggregatedRouteMetrics هر ویژگی 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
    }
  }
}

مثال کامل

یک نمونه کامل پاسخ برای درخواست ساخت یک درخواست به این صورت است:

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