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 گنجانده شده باشد، خودرو مجاز است. - در صورتی که
avoidUTurns روی true تنظیم شود، injectedSolutionLocationToken باید برای بازدیدهای مربوطه تنظیم شود
اگر راه حل تزریق شده امکان پذیر نباشد، یک خطای اعتبار سنجی لزوما برگردانده نمی شود و ممکن است به جای آن خطای نشان دهنده غیرممکن بودن برگردانده شود. |
injectedSolutionConstraint | object ( InjectedSolutionConstraint ) الگوریتم بهینه سازی را برای یافتن راه حل نهایی که مشابه راه حل قبلی است محدود کنید. به عنوان مثال، این ممکن است برای مسدود کردن بخشهایی از مسیرهایی که قبلاً تکمیل شدهاند یا باید تکمیل شوند اما نباید اصلاح شوند استفاده شود. اگر راه حل تزریق شده امکان پذیر نباشد، یک خطای اعتبار سنجی لزوما برگردانده نمی شود و ممکن است به جای آن خطای نشان دهنده غیرممکن بودن برگردانده شود. |
refreshDetailsRoutes[] | object ( ShipmentRoute ) در صورت خالی نبودن، مسیرهای داده شده بدون تغییر توالی بازدیدها یا زمان سفر، به روز می شوند: فقط سایر جزئیات به روز می شوند. این مدل را حل نمی کند. از سال 2020/11، این فقط چند خطوط مسیرهای غیر خالی را پر می کند و مستلزم آن است که populatePolylines درست باشد. فیلدهای routePolyline مسیرهای تصویب شده ممکن است با transitions مسیر ناسازگار باشد. این فیلد نباید همراه با injectedFirstSolutionRoutes یا injectedSolutionConstraint استفاده شود. Shipment.ignore و Vehicle.ignore هیچ تاثیری بر رفتار ندارند. خطوط چندگانه همچنان بین همه بازدیدها در همه مسیرهای غیر خالی بدون توجه به محموله ها یا وسایل نقلیه مربوطه پر شده است. |
interpretInjectedSolutionsUsingLabels | boolean اگر درست باشد: این تفسیر برای فیلدهای 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 مراجعه کنید.
جز در مواردی که غیر از این ذکر شده باشد،محتوای این صفحه تحت مجوز Creative Commons Attribution 4.0 License است. نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده Oracle و/یا شرکتهای وابسته به آن است.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[[["This API optimizes delivery routes by sending an `OptimizeToursRequest` with a `ShipmentModel`, and it returns an `OptimizeToursResponse` that includes `ShipmentRoute`s, which outline the routes for vehicles to minimize cost."],["The `ShipmentModel` includes `Shipment`s that require transport and `Vehicle`s available for use, with the goal being to assign `ShipmentRoute`s to `Vehicle`s efficiently to reduce overall cost."],["The HTTP request uses a `POST` method to the `https://routeoptimization.googleapis.com/v1/{parent=projects/*}:optimizeTours` endpoint, utilizing gRPC Transcoding syntax, and requiring the `parent` parameter to specify the project or location."],["The request body includes fields such as `timeout`, `model`, `solvingMode`, and `searchMode`, allowing for customization of the optimization process, and other parameters related to route details, and injected solutions."],["The API requires the `https://www.googleapis.com/auth/cloud-platform` OAuth scope and the `routeoptimization.locations.use` IAM permission on the parent resource for authorization."]]],[]]