Method: projects.optimizeTours

یک OptimizeToursRequest حاوی ShipmentModel ارسال می کند و OptimizeToursResponse حاوی ShipmentRoute را برمی گرداند، که مجموعه ای از مسیرها هستند که باید توسط وسایل نقلیه انجام شود و هزینه کلی را به حداقل می رساند.

یک مدل ShipmentModel عمدتاً شامل Shipment هایی است که باید انجام شوند و Vehicle که می توانند برای حمل و نقل Shipment ها استفاده شوند. ShipmentRoute Shipment s را به Vehicle s اختصاص می دهد. به طور خاص، آنها یک سری از Visit را به هر وسیله نقلیه اختصاص می دهند، که در آن یک Visit مربوط به VisitRequest است، که یک تحویل یا تحویل برای یک Shipment است.

هدف این است که تخصیصی از ShipmentRoute به Vehicle ارائه شود که هزینه کل را در جایی که هزینه دارای اجزای زیادی است که در ShipmentModel تعریف شده است، به حداقل می رساند.

درخواست HTTP

POST https://routeoptimization.googleapis.com/v1/{parent=projects/*}:optimizeTours

URL از دستور GRPC Transcoding استفاده می کند.

پارامترهای مسیر

پارامترها
parent

string

مورد نیاز. پروژه یا مکان را برای برقراری تماس هدف قرار دهید.

قالب: * projects/{project-id} * projects/{project-id}/locations/{location-id}

اگر مکانی مشخص نشده باشد، یک منطقه به طور خودکار انتخاب می شود.

درخواست بدن

بدنه درخواست حاوی داده هایی با ساختار زیر است:

نمایندگی JSON
{
  "timeout": string,
  "model": {
    object (ShipmentModel)
  },
  "solvingMode": enum (SolvingMode),
  "searchMode": enum (SearchMode),
  "injectedFirstSolutionRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "injectedSolutionConstraint": {
    object (InjectedSolutionConstraint)
  },
  "refreshDetailsRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "interpretInjectedSolutionsUsingLabels": boolean,
  "considerRoadTraffic": boolean,
  "populatePolylines": boolean,
  "populateTransitionPolylines": boolean,
  "allowLargeDeadlineDespiteInterruptionRisk": boolean,
  "useGeodesicDistances": boolean,
  "label": string,
  "geodesicMetersPerSecond": number,
  "maxValidationErrors": integer
}
فیلدها
timeout

string ( Duration format)

اگر این مهلت تنظیم شود، سرور قبل از سپری شدن مدت زمان یا رسیدن به مهلت سرور برای درخواست‌های همزمان، هرکدام زودتر، پاسخی را برمی‌گرداند.

برای درخواست های ناهمزمان، سرور یک راه حل (در صورت امکان) را قبل از سپری شدن مهلت ایجاد می کند.

مدت زمان در ثانیه با حداکثر نه رقم کسری که با ' s ' ختم می شود. مثال: "3.5s" .

model

object ( ShipmentModel )

مدل حمل و نقل برای حل.

solvingMode

enum ( SolvingMode )

به طور پیش فرض، حالت حل DEFAULT_SOLVE (0) است.

searchMode

enum ( SearchMode )

حالت جستجو برای حل درخواست استفاده می شود.

injectedFirstSolutionRoutes[]

object ( ShipmentRoute )

الگوریتم بهینه سازی را در یافتن راه حل اول که مشابه راه حل قبلی است، راهنمایی کنید.

وقتی اولین راه حل ساخته می شود، مدل محدود می شود. هر محموله ای که در یک مسیر انجام نشده باشد به طور ضمنی در راه حل اول نادیده گرفته می شود، اما ممکن است در راه حل های متوالی انجام شود.

راه حل باید برخی از مفروضات اعتبار پایه را برآورده کند:

  • برای همه مسیرها، vehicleIndex باید در محدوده باشد و تکراری نباشد.
  • برای همه بازدیدها، shipmentIndex و visitRequestIndex باید در محدوده باشند.
  • یک محموله ممکن است فقط در یک مسیر ارجاع داده شود.
  • تحویل محموله وانت باید قبل از تحویل انجام شود.
  • بیش از یک بار جایگزین یا جایگزین تحویل یک محموله را نمی توان انجام داد.
  • برای همه مسیرها، زمان در حال افزایش است (به عنوان مثال، vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime ).
  • حمل و نقل فقط با وسیله نقلیه مجاز انجام می شود. اگر Shipment.allowed_vehicle_indices خالی باشد یا vehicleIndex آن در Shipment.allowed_vehicle_indices گنجانده شده باشد، خودرو مجاز است.

اگر راه حل تزریق شده امکان پذیر نباشد، یک خطای اعتبار سنجی لزوما برگردانده نمی شود و ممکن است به جای آن خطای نشان دهنده غیرممکن بودن برگردانده شود.

injectedSolutionConstraint

object ( InjectedSolutionConstraint )

الگوریتم بهینه سازی را برای یافتن راه حل نهایی که مشابه راه حل قبلی است محدود کنید. به عنوان مثال، این ممکن است برای مسدود کردن بخش‌هایی از مسیرهایی که قبلاً تکمیل شده‌اند یا باید تکمیل شوند اما نباید اصلاح شوند استفاده شود.

اگر راه حل تزریق شده امکان پذیر نباشد، یک خطای اعتبار سنجی لزوما برگردانده نمی شود و ممکن است به جای آن خطای نشان دهنده غیرممکن بودن برگردانده شود.

refreshDetailsRoutes[]

object ( ShipmentRoute )

در صورت خالی نبودن، مسیرهای داده شده بدون تغییر توالی بازدیدها یا زمان سفر، به روز می شوند: فقط سایر جزئیات به روز می شوند. این مدل را حل نمی کند.

از سال 2020/11، این فقط چند خطوط مسیرهای غیر خالی را پر می کند و مستلزم آن است که populatePolylines درست باشد.

فیلدهای routePolyline مسیرهای تصویب شده ممکن است با transitions مسیر ناسازگار باشد.

این فیلد نباید همراه با injectedFirstSolutionRoutes یا injectedSolutionConstraint استفاده شود.

Shipment.ignore و Vehicle.ignore هیچ تاثیری بر رفتار ندارند. خطوط چندگانه همچنان بین همه بازدیدها در همه مسیرهای غیر خالی بدون توجه به محموله ها یا وسایل نقلیه مربوطه پر شده است.

interpretInjectedSolutionsUsingLabels

boolean

اگر درست باشد:

  • از ShipmentRoute.vehicle_label به جای vehicleIndex برای مطابقت مسیرها در محلول تزریق شده با وسایل نقلیه در درخواست استفاده می کند. از نگاشت ShipmentRoute.vehicle_index اصلی به ShipmentRoute.vehicle_index جدید برای به روز رسانی ConstraintRelaxation.vehicle_indices در صورت خالی نبودن استفاده می کند، اما نگاشت باید بدون ابهام باشد (به عنوان مثال، چندین ShipmentRoute نباید یک vehicleIndex اصلی را به اشتراک بگذارند).
  • از ShipmentRoute.Visit.shipment_label به جای shipmentIndex برای تطبیق بازدیدها در یک راه حل تزریقی با محموله های موجود در درخواست استفاده می کند.
  • از SkippedShipment.label به جای SkippedShipment.index برای تطبیق محموله های نادیده گرفته شده در محلول تزریق شده با محموله های درخواستی استفاده می کند.

این تفسیر برای فیلدهای injectedFirstSolutionRoutes ، injectedSolutionConstraint و refreshDetailsRoutes اعمال می شود. می توان از آن زمانی استفاده کرد که شاخص های حمل و نقل یا وسیله نقلیه در درخواست از زمان ایجاد راه حل تغییر کرده است، شاید به این دلیل که محموله ها یا وسایل نقلیه از درخواست حذف شده یا به آن اضافه شده اند.

اگر درست باشد، برچسب‌های دسته‌های زیر باید حداکثر یک بار در دسته خود ظاهر شوند:

اگر vehicleLabel در محلول تزریق شده با وسیله نقلیه درخواستی مطابقت نداشته باشد، مسیر مربوطه به همراه بازدیدهای آن از محلول حذف می شود. اگر یک shipmentLabel در محلول تزریق شده با یک ارسال درخواست مطابقت نداشته باشد، بازدید مربوطه از محلول حذف می شود. اگر یک SkippedShipment.label در محلول تزریق شده با یک ارسال درخواست مطابقت نداشته باشد، SkippedShipment از محلول حذف می شود.

حذف بازدیدهای مسیر یا کل مسیرها از یک راه حل تزریقی ممکن است بر محدودیت های ضمنی تأثیر بگذارد، که ممکن است منجر به تغییر در راه حل، خطاهای اعتبارسنجی یا غیرممکن شود.

توجه: تماس گیرنده باید اطمینان حاصل کند که هر Vehicle.label (مثلاً Shipment.label ) به طور منحصر به فرد یک وسیله نقلیه (resp. shipment) مورد استفاده در دو درخواست مربوطه را شناسایی می کند: درخواست قبلی که OptimizeToursResponse استفاده شده در محلول تزریق شده را تولید کرده است و درخواست فعلی. درخواستی که شامل محلول تزریق شده است. بررسی های منحصر به فرد توضیح داده شده در بالا برای تضمین این نیاز کافی نیست.

considerRoadTraffic

boolean

در محاسبه فیلدهای ShipmentRoute Transition.travel_duration ، Visit.start_time ، و vehicleEndTime ، تخمین ترافیک را در نظر بگیرید. در تنظیم فیلد ShipmentRoute.has_traffic_infeasibilities و در محاسبه فیلد OptimizeToursResponse.total_cost .

populatePolylines

boolean

اگر درست باشد، چند خطوط در پاسخ ShipmentRoute s پر می شوند.

populateTransitionPolylines

boolean

اگر درست باشد، چند خطوط و نشانه‌های مسیر در پاسخ ShipmentRoute.transitions پر می‌شوند.

allowLargeDeadlineDespiteInterruptionRisk

boolean

اگر این تنظیم شده باشد، درخواست می تواند حداکثر 60 دقیقه مهلت داشته باشد (به https://grpc.io/blog/deadlines مراجعه کنید). در غیر این صورت حداکثر مهلت فقط 30 دقیقه است. توجه داشته باشید که درخواست های طولانی مدت خطر وقفه به طور قابل توجهی بزرگتر (اما هنوز کوچک) دارند.

useGeodesicDistances

boolean

اگر درست باشد، مسافت‌های سفر با استفاده از فواصل ژئودزیکی به جای فواصل Google Maps و زمان سفر با استفاده از فواصل ژئودزیکی با سرعتی که توسط geodesicMetersPerSecond تعریف شده است، محاسبه می‌شود.

label

string

برچسبی که ممکن است برای شناسایی این درخواست استفاده شود، در OptimizeToursResponse.request_label گزارش شده است.

geodesicMetersPerSecond

number

وقتی useGeodesicDistances درست است، این فیلد باید تنظیم شود و سرعت اعمال شده برای محاسبه زمان سفر را مشخص کند. مقدار آن باید حداقل 1.0 متر در ثانیه باشد.

maxValidationErrors

integer

تعداد خطاهای اعتبارسنجی برگشتی را کوتاه می کند. این خطاها معمولاً به یک بار خطای INVALID_ARGUMENT به عنوان جزئیات خطای BadRequest ( https://cloud.google.com/apis/design/errors#error_details) متصل می شوند، مگر اینکه solvingMode=VALIDATE_ONLY: به قسمت OptimizeToursResponse.validation_errors مراجعه کنید. این به طور پیش فرض روی 100 است و روی 10000 محدود شده است.

بدن پاسخگو

در صورت موفقیت آمیز بودن، بدنه پاسخ حاوی نمونه ای از OptimizeToursResponse است.

محدوده مجوز

به محدوده OAuth زیر نیاز دارد:

  • https://www.googleapis.com/auth/cloud-platform

مجوزهای IAM

به مجوز IAM زیر در منبع parent نیاز دارد:

  • routeoptimization.locations.use

برای اطلاعات بیشتر، به مستندات IAM مراجعه کنید.