Method: projects.locations.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/*/locations/*}: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 ( Durationformat)  اگر این مهلت تنظیم شود، سرور قبل از سپری شدن مدت زمان یا رسیدن به مهلت سرور برای درخواستهای همزمان، هرکدام زودتر، پاسخی را برمیگرداند.  برای درخواست های ناهمزمان، سرور یک راه حل (در صورت امکان) را قبل از سپری شدن مهلت ایجاد می کند.  مدت زمان در ثانیه با حداکثر نه رقم کسری که با ' 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  اگر درست باشد:  این تفسیر برای فیلدهای injectedFirstSolutionRoutes،injectedSolutionConstraintوrefreshDetailsRoutesاعمال می شود. می توان از آن زمانی استفاده کرد که شاخص های حمل و نقل یا وسیله نقلیه در درخواست از زمان ایجاد راه حل تغییر کرده است، شاید به این دلیل که محموله ها یا وسایل نقلیه از درخواست حذف شده یا به آن اضافه شده اند.  اگر درست باشد، برچسبهای دستههای زیر باید حداکثر یک بار در دسته خود ظاهر شوند:  اگر vehicleLabelدر محلول تزریق شده با وسیله نقلیه درخواستی مطابقت نداشته باشد، مسیر مربوطه به همراه بازدیدهای آن از محلول حذف می شود. اگر یکshipmentLabelدر محلول تزریق شده با یک ارسال درخواست مطابقت نداشته باشد، بازدید مربوطه از محلول حذف می شود. اگر یکSkippedShipment.labelدر محلول تزریق شده با یک ارسال درخواست مطابقت نداشته باشد،SkippedShipmentاز محلول حذف می شود.  حذف بازدیدهای مسیر یا کل مسیرها از یک راه حل تزریقی ممکن است بر محدودیت های ضمنی تأثیر بگذارد، که ممکن است منجر به تغییر در راه حل، خطاهای اعتبارسنجی یا غیرممکن شود.  توجه: تماس گیرنده باید اطمینان حاصل کند که هر Vehicle.label(مثلاًShipment.label) به طور منحصر به فرد یک وسیله نقلیه (resp. shipment) مورد استفاده در دو درخواست مربوطه را شناسایی می کند: درخواست قبلی کهOptimizeToursResponseاستفاده شده در محلول تزریق شده را تولید کرده است و درخواست فعلی. درخواستی که شامل محلول تزریق شده است. بررسی های منحصر به فرد توضیح داده شده در بالا برای تضمین این نیاز کافی نیست. | 
| considerRoadTraffic |  boolean  در محاسبه فیلدهای ShipmentRouteTransition.travel_duration،Visit.start_time، وvehicleEndTime، تخمین ترافیک را در نظر بگیرید. در تنظیم فیلدShipmentRoute.has_traffic_infeasibilitiesو در محاسبه فیلدOptimizeToursResponse.total_cost. | 
| populatePolylines |  boolean  اگر درست باشد، چند خطوط در پاسخ ShipmentRoutes پر می شوند. | 
| 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-08-29 بهوقت ساعت هماهنگ جهانی.
  
  
  
    
      [null,null,["تاریخ آخرین بهروزرسانی 2025-08-29 بهوقت ساعت هماهنگ جهانی."],[],["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"]]