Method: projects.locations.optimizeTours
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
یک OptimizeToursRequest حاوی یک ShipmentModel ارسال میکند و یک OptimizeToursResponse حاوی ShipmentRoute ها برمیگرداند، که مجموعهای از مسیرها هستند که باید توسط وسایل نقلیه انجام شوند و هزینه کلی را به حداقل برسانند.
یک مدل ShipmentModel عمدتاً شامل Shipment هایی است که باید انجام شوند و Vehicle هایی که میتوانند برای حمل Shipment ها استفاده شوند. ShipmentRoute ها، Shipment ها را به Vehicle ها اختصاص میدهند. به طور خاصتر، آنها مجموعهای از Visit ها را به هر وسیله نقلیه اختصاص میدهند، که در آن Visit معادل VisitRequest است که به معنای دریافت یا تحویل Shipment است.
هدف، ارائه تخصیصی از ShipmentRoute ها به Vehicle ها است که در مواردی که cost دارای اجزای زیادی است که در ShipmentModel تعریف شدهاند، هزینه کل را به حداقل برساند.
درخواست HTTP
POST https://routeoptimization.googleapis.com/v1/{parent=projects/*/locations/*}:optimizeTours
این URL از سینتکس Transcoding در gRPC استفاده میکند.
پارامترهای مسیر
| پارامترها |
|---|
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 ) اگر خالی نباشد، مسیرهای داده شده بدون تغییر توالی بازدیدها یا زمانهای سفر مربوطه، بهروزرسانی میشوند: فقط سایر جزئیات بهروزرسانی میشوند. این کار مدل را حل نمیکند. از تاریخ ۲۰۲۰/۱۱، این فقط خطوط چندخطی مسیرهای غیرخالی را پر میکند و مستلزم آن است که populatePolylines برابر با true باشد. فیلدهای routePolyline مسیرهای ارسالی ممکن است با transitions ناسازگار باشند. این فیلد نباید همراه با injectedFirstSolutionRoutes یا injectedSolutionConstraint استفاده شود. Shipment.ignore و Vehicle.ignore هیچ تاثیری بر رفتار ندارند. خطوط چندخطی همچنان بین تمام بازدیدها در تمام مسیرهای غیر خالی، صرف نظر از اینکه محمولهها یا وسایل نقلیه مرتبط نادیده گرفته شوند یا خیر، پر میشوند. |
interpretInjectedSolutionsUsingLabels | boolean اگر درست باشد: این تفسیر در مورد فیلدهای injectedFirstSolutionRoutes ، injectedSolutionConstraint و refreshDetailsRoutes اعمال میشود. این تفسیر میتواند زمانی استفاده شود که شاخصهای حمل و نقل یا وسیله نقلیه در درخواست از زمان ایجاد راهحل تغییر کرده باشند، شاید به این دلیل که محمولهها یا وسایل نقلیه از درخواست حذف یا به آن اضافه شدهاند. اگر درست باشد، برچسبهای موجود در دستههای زیر باید حداکثر یک بار در دسته خود ظاهر شوند: اگر یک vehicleLabel در راهحل تزریقشده با یک وسیله نقلیه درخواست مطابقت نداشته باشد، مسیر مربوطه به همراه بازدیدهای آن از راهحل حذف میشود. اگر یک shipmentLabel در راهحل تزریقشده با یک محموله درخواست مطابقت نداشته باشد، بازدید مربوطه از راهحل حذف میشود. اگر یک SkippedShipment.label در راهحل تزریقشده با یک محموله درخواست مطابقت نداشته باشد، SkippedShipment از راهحل حذف میشود. حذف بازدیدهای مسیر یا کل مسیرها از یک راهحل تزریقشده ممکن است بر محدودیتهای ضمنی تأثیر بگذارد، که ممکن است منجر به تغییر در راهحل، خطاهای اعتبارسنجی یا عدم امکانسنجی شود. نکته: فراخواننده باید اطمینان حاصل کند که هر Vehicle.label (به نام Shipment.label ) به طور منحصر به فرد یک موجودیت vehicle (به نام shipping) را که در دو درخواست مربوطه استفاده میشود، شناسایی میکند: درخواست قبلی که OptimizeToursResponse مورد استفاده در راهحل تزریق شده را تولید کرده است و درخواست فعلی که شامل راهحل تزریق شده است. بررسیهای منحصر به فرد بودن که در بالا توضیح داده شد، برای تضمین این الزام کافی نیستند. |
considerRoadTraffic | boolean تخمین ترافیک را در محاسبه فیلدهای Transition.travel_duration ، Visit.start_time و vehicleEndTime در ShipmentRoute در تنظیم فیلد ShipmentRoute.has_traffic_infeasibilities و در محاسبه فیلد OptimizeToursResponse.total_cost در نظر بگیرید. |
populatePolylines | boolean اگر درست باشد، چندخطیها در ShipmentRoute های پاسخ قرار میگیرند. |
populateTransitionPolylines | boolean اگر درست باشد، چندخطیها و توکنهای مسیر در پاسخ ShipmentRoute.transitions قرار داده میشوند. |
allowLargeDeadlineDespiteInterruptionRisk | boolean اگر این تنظیم شده باشد، درخواست میتواند مهلتی (به https://grpc.io/blog/deadlines مراجعه کنید) تا ۶۰ دقیقه داشته باشد. در غیر این صورت، حداکثر مهلت فقط ۳۰ دقیقه است. توجه داشته باشید که درخواستهای طولانی مدت، خطر وقفه بسیار بیشتری (اما همچنان کم) دارند. |
useGeodesicDistances | boolean اگر درست باشد، مسافتهای سفر به جای مسافتهای نقشههای گوگل، با استفاده از مسافتهای ژئودزیک محاسبه میشوند و زمانهای سفر با استفاده از مسافتهای ژئودزیک با سرعتی که توسط geodesicMetersPerSecond تعریف میشود، محاسبه میشوند. |
label | string برچسبی که ممکن است برای شناسایی این درخواست استفاده شود، در OptimizeToursResponse.request_label گزارش شده است. |
geodesicMetersPerSecond | number وقتی useGeodesicDistances برابر با true باشد، این فیلد باید تنظیم شود و سرعت اعمال شده برای محاسبه زمان سفر را تعریف کند. مقدار آن باید حداقل ۱.۰ متر بر ثانیه باشد. |
maxValidationErrors | integer تعداد خطاهای اعتبارسنجی برگشتی را کوتاه میکند. این خطاها معمولاً به عنوان جزئیات خطای BadRequest ( https://cloud.google.com/apis/design/errors#error_details ) به یک payload خطای INVALID_ARGUMENT پیوست میشوند، مگر اینکه solvingMode=VALIDATE_ONLY باشد: به فیلد OptimizeToursResponse.validation_errors مراجعه کنید. این مقدار به طور پیشفرض ۱۰۰ است و حداکثر ۱۰۰۰۰ است. |
بدنه پاسخ
در صورت موفقیت، بدنه پاسخ شامل نمونهای از OptimizeToursResponse است.
دامنههای مجوز
به محدوده OAuth زیر نیاز دارد:
-
https://www.googleapis.com/auth/cloud-platform
مجوزهای IAM
به مجوز IAM زیر در منبع parent نیاز دارد:
-
routeoptimization.locations.use
برای اطلاعات بیشتر، به مستندات IAM مراجعه کنید.
جز در مواردی که غیر از این ذکر شده باشد،محتوای این صفحه تحت مجوز Creative Commons Attribution 4.0 License است. نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده Oracle و/یا شرکتهای وابسته به آن است.
تاریخ آخرین بهروزرسانی 2025-11-10 بهوقت ساعت هماهنگ جهانی.
[null,null,["تاریخ آخرین بهروزرسانی 2025-11-10 بهوقت ساعت هماهنگ جهانی."],[],["This content describes the `OptimizeTours` API, which optimizes routes for shipments using vehicles. A `POST` request is sent to `https://routeoptimization.googleapis.com/v1/{parent=projects/*/locations/*}:optimizeTours`. The request body includes a `ShipmentModel` specifying shipments and vehicles. The API then generates an `OptimizeToursResponse` with `ShipmentRoute`s, assigning `Visit`s (pickups/deliveries) to each vehicle to minimize total cost. Optional parameters allow traffic consideration, polyline population, and injected solution constraints. Authorization requires cloud platform scope and IAM permissions.\n"]]