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

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

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 نوع بار را به مقدار بار حمل‌شده توسط خودرو درطول این انتقال نگاشت می‌کند.

مثالی از 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، به چندخطی‌های انتقال و توکن‌های مسیر مراجعه کنید.

خصوصیات سنجه‌ها

پیام 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
    }
  }
}

نمونه کامل

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

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