ShipmentModel

مدل ارسال شامل مجموعه‌ای از ارسال‌ها است که باید توسط مجموعه‌ای از وسایل نقلیه انجام شود، درحالی‌که هزینه کلی که مجموع موارد زیر است به حداقل می‌رسد:

  • هزینه مسیریابی وسایل نقلیه (مجموع هزینه به‌ازای کل زمان، هزینه به‌ازای مدت سفر، و هزینه ثابت برای همه وسایل نقلیه).
  • جریمه‌های ارسال انجام‌نشده.
  • هزینه مدت زمان جهانی ارسال‌ها
نمایش JSON
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "objectives": [
    {
      object (Objective)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
فیلدها
shipments[]

object (Shipment)

مجموعه محموله‌هایی که باید در مدل انجام شود.

vehicles[]

object (Vehicle)

مجموعه وسایل نقلیه‌ای که می‌توانند برای انجام بازدیدها استفاده شوند.

objectives[]

object (Objective)

مجموعه اهداف این مدل که آن‌ها را به هزینه تبدیل خواهیم کرد. اگر خالی نباشد، مدل ورودی باید بدون هزینه باشد. برای دریافت درخواست اصلاح‌شده، لطفاً از solvingMode = TRANSFORM_AND_RETURN_REQUEST استفاده کنید. توجه داشته باشید که در این مورد، درخواست حل‌وفصل نخواهد شد. اسناد مربوطه را ببینید.

آزمایشی: برای جزئیات بیشتر، https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request را ببینید.

globalStartTime

string (Timestamp format)

زمان شروع و پایان جهانی مدل: هیچ زمانی خارج از این محدوده معتبر درنظر گرفته نمی‌شود.

بازه زمانی مدل باید کمتر از یک سال باشد، یعنی globalEndTime و globalStartTime باید در فاصله ۳۱۵۳۶۰۰۰ ثانیه از یکدیگر باشند.

هنگام استفاده از فیلدهای cost_per_*hour، شاید بخواهید این پنجره را روی فاصله زمانی کوچک‌تری تنظیم کنید تا عملکرد افزایش یابد (مثلاً اگر یک روز را مدل‌سازی می‌کنید، باید محدودیت‌های زمانی سراسری را روی آن روز تنظیم کنید). اگر تنظیم نشده باشد، 00:00:00 UTC،‏ ۱ ژانویه ۱۹۷۰ (یعنی ثانیه: 0، نانو: 0) به‌عنوان پیش‌فرض استفاده می‌شود.

از RFC 3339 استفاده می‌کند، که در آن خروجی تولیدشده همیشه Z-نرمال‌سازی می‌شود و از ۰، ۳، ۶، یا ۹ رقم اعشاری استفاده می‌کند. انحراف‌های غیراز «Z» نیز پذیرفته می‌شود. مثال‌ها: "2014-10-02T15:01:23Z"، "2014-10-02T15:01:23.045123456Z"، یا "2014-10-02T15:01:23+05:30".

globalEndTime

string (Timestamp format)

اگر تنظیم نشده باشد، ۰۰:۰۰:۰۰ ساعت هماهنگ جهانی، ۱ ژانویه ۱۹۷۱ (یعنی ثانیه: ۳۱۵۳۶۰۰۰، نانو: ۰) به‌عنوان پیش‌فرض استفاده می‌شود.

از RFC 3339 استفاده می‌کند، که در آن خروجی تولیدشده همیشه Z-نرمال‌سازی می‌شود و از ۰، ۳، ۶، یا ۹ رقم اعشاری استفاده می‌کند. انحراف‌های غیراز «Z» نیز پذیرفته می‌شود. مثال‌ها: "2014-10-02T15:01:23Z"، "2014-10-02T15:01:23.045123456Z"، یا "2014-10-02T15:01:23+05:30".

globalDurationCostPerHour

number

«مدت زمان جهانی» طرح کلی عبارت است از تفاوت بین زودترین زمان شروع مؤثر و دیرترین زمان پایان مؤثر همه وسایل نقلیه. کاربران می‌توانند برای مثال، برای آن مقدار، هزینه ساعتی تعیین کنند تا برای تکمیل زودهنگام کار بهینه‌سازی کنند. این هزینه باید در همان واحد Shipment.penalty_cost باشد.

durationDistanceMatrices[]

object (DurationDistanceMatrix)

ماتریس‌های مدت و فاصله مورداستفاده در مدل را مشخص می‌کند. اگر این فیلد خالی باشد، بسته به مقدار فیلد useGeodesicDistances، به‌جای آن از Google Maps یا فاصله‌های ژئودزیک استفاده خواهد شد. اگر خالی نباشد، useGeodesicDistances نمی‌تواند درست باشد و نه durationDistanceMatrixSrcTags و نه durationDistanceMatrixDstTags نمی‌توانند خالی باشند.

نمونه‌هایی از کاربرد:

  • دو مکان وجود دارد: locA و locB.
  • ۱ خودرو که مسیرش را از locA شروع می‌کند و در locA به پایان می‌رساند.
  • ‫۱ درخواست بازدید تحویل در locB.
model {
  vehicles { startTags: "locA"  endTags: "locA" }
  shipments { pickups { tags: "locB" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixDstTags: "locA"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • سه مکان وجود دارد: locA،‏ locB، و locC.
  • ‫۱ خودرو که مسیرش را از locA شروع می‌کند و در locB به‌پایان می‌رساند، بااستفاده از ماتریس «fast».
  • ۱ وسیله نقلیه که مسیرش را در locB شروع می‌کند و در locB به‌پایان می‌رساند، بااستفاده از ماتریس «slow».
  • ۱ وسیله نقلیه که مسیرش را از locB شروع می‌کند و در locB به‌پایان می‌رساند، بااستفاده از ماتریس «سریع».
  • ‫۱ درخواست بازدید برای تحویل در locC.
model {
  vehicles { startTags: "locA" endTags: "locB" startTags: "fast" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "slow" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "fast" }
  shipments { pickups { tags: "locC" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixSrcTags: "locC"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrixDstTags: "locC"
  durationDistanceMatrices {
    vehicleStartTag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  durationDistanceMatrices {
    vehicleStartTag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
durationDistanceMatrixSrcTags[]

string

برچسب‌هایی که منابع ماتریس‌های مدت و فاصله را تعریف می‌کنند؛ durationDistanceMatrices(i).rows(j) مدت‌ها و فاصله‌ها را از بازدیدهای دارای برچسب durationDistanceMatrixSrcTags(j) تا بازدیدهای دیگر در ماتریس i تعریف می‌کند.

برچسب‌ها با VisitRequest.tags یا Vehicle.start_tags مطابقت دارد. VisitRequest یا Vehicle داده‌شده باید دقیقاً با یک برچسب در این فیلد مطابقت داشته باشد. توجه داشته باشید که برچسب‌های منبع، مقصد، و ماتریس Vehicle ممکن است یکسان باشند؛ به‌طور مشابه، برچسب‌های منبع و مقصد VisitRequest ممکن است یکسان باشند. همه برچسب‌ها باید متفاوت باشند و نمی‌توانند رشته‌های خالی باشند. اگر این فیلد خالی نباشد، durationDistanceMatrices نباید خالی باشد.

durationDistanceMatrixDstTags[]

string

برچسب‌هایی که مقصد ماتریس‌های مدت و فاصله را تعریف می‌کنند؛ durationDistanceMatrices(i).rows(j).durations(k) (به‌ترتیب durationDistanceMatrices(i).rows(j).meters(k)) مدت (یا مسافت) سفر از بازدیدهای دارای برچسب durationDistanceMatrixSrcTags(j) به بازدیدهای دارای برچسب durationDistanceMatrixDstTags(k) را در ماتریس i تعریف می‌کند.

برچسب‌ها با VisitRequest.tags یا Vehicle.start_tags مطابقت دارد. VisitRequest یا Vehicle داده‌شده باید دقیقاً با یک برچسب در این فیلد مطابقت داشته باشد. توجه داشته باشید که برچسب‌های منبع، مقصد، و ماتریس Vehicle ممکن است یکسان باشند؛ به‌طور مشابه، برچسب‌های منبع و مقصد VisitRequest ممکن است یکسان باشند. همه برچسب‌ها باید متفاوت باشند و نمی‌توانند رشته‌های خالی باشند. اگر این فیلد خالی نباشد، durationDistanceMatrices نباید خالی باشد.

transitionAttributes[]

object (TransitionAttributes)

مشخصه‌های انتقال به مدل اضافه شد.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

مجموعه‌های shipment_types ناسازگار (ShipmentTypeIncompatibility را ببینید).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

مجموعه‌هایی از شرایط لازم shipmentType (ShipmentTypeRequirement را ببینید).

precedenceRules[]

object (PrecedenceRule)

مجموعه قوانین تقدم که باید در مدل اعمال شود.

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

maxActiveVehicles

integer

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

ارسال کالا

ارسال یک کالا، از یکی از نقاط تحویل گرفتن آن به یکی از نقاط تحویل دادن آن. برای اینکه محموله به‌عنوان انجام‌شده درنظر گرفته شود، یک وسیله نقلیه منحصربه‌فرد باید از یکی از مکان‌های تحویل گرفتن آن بازدید کند (و ظرفیت‌های اضافی خود را به‌طور متناسب کاهش دهد)، سپس بعداً از یکی از مکان‌های تحویل آن بازدید کند (و بنابراین ظرفیت‌های اضافی خود را به‌طور متناسب دوباره افزایش دهد).

نمایش JSON
{
  "displayName": string,
  "pickups": [
    {
      object (VisitRequest)
    }
  ],
  "deliveries": [
    {
      object (VisitRequest)
    }
  ],
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "allowedVehicleIndices": [
    integer
  ],
  "costsPerVehicle": [
    number
  ],
  "costsPerVehicleIndices": [
    integer
  ],
  "pickupToDeliveryAbsoluteDetourLimit": string,
  "pickupToDeliveryTimeLimit": string,
  "shipmentType": string,
  "label": string,
  "ignore": boolean,
  "penaltyCost": number,
  "pickupToDeliveryRelativeDetourLimit": number
}
فیلدها
displayName

string

نام نمایشی محموله که کاربر تعریف کرده است. طول آن می‌تواند تا ۶۳ نویسه باشد و ممکن است از نویسه‌های UTF-8 استفاده کند.

pickups[]

object (VisitRequest)

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

deliveries[]

object (VisitRequest)

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

loadDemands

map (key: string, value: object (Load))

الزامات بارگیری محموله (برای مثال وزن، حجم، تعداد پالت‌ها، و غیره). کلیدهای موجود در نقشه باید شناسه‌هایی باشند که نوع بار مربوطه را توصیف می‌کنند، و در حالت ایده‌آل باید شامل واحدها نیز باشند. برای مثال: «weight_kg»،‏ «volume_gallons»،‏ «pallet_count»، و غیره. اگر کلید داده‌شده در نقشه نشان داده نشود، بار مربوطه تهی درنظر گرفته می‌شود.

allowedVehicleIndices[]

integer

مجموعه خودروهایی که ممکن است این محموله را انجام دهند. اگر خالی باشد، همه خودروها می‌توانند آن را انجام دهند. خودروها براساس نمایه‌شان در فهرست vehicles ShipmentModel ارائه می‌شوند.

costsPerVehicle[]

number

هزینه‌ای را که هنگام تحویل این محموله توسط هر خودرو متحمل می‌شود مشخص می‌کند. درصورت مشخص کردن، باید یکی‌از این دو مورد را داشته باشد:

  • تعداد عناصر مشابه costsPerVehicleIndices. costsPerVehicle[i] با خودرو costsPerVehicleIndices[i] مدل مطابقت دارد.
  • تعداد عناصر با تعداد خودروها در مدل برابر است. عنصر i-ام با خودرو شماره i مدل مطابقت دارد.

این هزینه‌ها باید در همان واحد penaltyCost باشد و نباید منفی باشد. اگر چنین هزینه‌هایی وجود ندارد، این فیلد را خالی بگذارید.

costsPerVehicleIndices[]

integer

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

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

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

برای مثال، فرض کنید t کوتاه‌ترین زمان لازم برای رفتن از جایگزین سوار کردن انتخاب‌شده مستقیماً به جایگزین تحویل انتخاب‌شده باشد. سپس تنظیم pickupToDeliveryAbsoluteDetourLimit موارد زیر را اعمال می‌کند:

startTime(delivery) - startTime(pickup) <=
t + pickupToDeliveryAbsoluteDetourLimit

اگر هر دو حد نسبی و مطلق برای یک محموله مشخص شده باشد، از حد محدودکننده‌تر برای هر جفت ممکن تحویل گرفتن/ رساندن استفاده می‌شود. از ۲۰۱۷/۱۰، مسیرهای انحرافی فقط زمانی پشتیبانی می‌شوند که مدت سفر به خودروها بستگی نداشته باشد.

pickupToDeliveryTimeLimit

string (Duration format)

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

shipmentType

string

رشته غیرخالی که «نوع» این محموله را مشخص می‌کند. از این ویژگی می‌توان برای تعریف ناسازگاری‌ها یا الزامات بین shipment_types استفاده کرد (shipmentTypeIncompatibilities و shipmentTypeRequirements را در ShipmentModel ببینید).

با visitTypes که برای یک بازدید مشخص شده است تفاوت دارد: همه تحویل گرفتن‌ها/تحویل دادن‌های متعلق به یک محموله دارای shipmentType یکسانی هستند.

label

string

برچسبی برای این محموله مشخص می‌کند. این برچسب در پاسخ در shipmentLabel مربوط به ShipmentRoute.Visit گزارش می‌شود.

ignore

boolean

اگر درست است، این ارسال را رد کنید، اما penaltyCost را اعمال نکنید.

اگر shipmentTypeRequirements در مدل وجود داشته باشد، نادیده گرفتن محموله منجر به خطای اعتبارسنجی می‌شود.

نادیده گرفتن محموله‌ای که در injectedFirstSolutionRoutes یا injectedSolutionConstraint انجام می‌شود مجاز است؛ حل‌کننده بازدیدهای تحویل/دریافت مربوطه را از مسیر انجام حذف می‌کند. precedenceRules که به ارسال‌های نادیده‌گرفته‌شده ارجاع می‌دهند نیز نادیده گرفته خواهند شد.

penaltyCost

number

اگر محموله تکمیل نشود، این جریمه به هزینه کلی مسیرها اضافه می‌شود. اگر یکی از جایگزین‌های تحویل گرفتن و تحویل دادن مرسوله بازدید شود، مرسوله تکمیل‌شده درنظر گرفته می‌شود. هزینه ممکن است با همان واحدی بیان شود که برای همه فیلدهای دیگر مربوط به هزینه در مدل استفاده می‌شود و باید مثبت باشد.

مهم: اگر این جریمه مشخص نشده باشد، نامحدود درنظر گرفته می‌شود، یعنی ارسال باید تکمیل شود.

pickupToDeliveryRelativeDetourLimit

number

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

برای مثال، فرض کنید t کوتاه‌ترین زمان لازم برای رفتن از جایگزین سوار کردن انتخاب‌شده مستقیماً به جایگزین تحویل انتخاب‌شده باشد. سپس تنظیم pickupToDeliveryRelativeDetourLimit موارد زیر را اعمال می‌کند:

startTime(delivery) - startTime(pickup) <=
std::ceil(t * (1.0 + pickupToDeliveryRelativeDetourLimit))

اگر هر دو حد نسبی و مطلق برای یک محموله مشخص شده باشد، از حد محدودکننده‌تر برای هر جفت ممکن تحویل گرفتن/ رساندن استفاده می‌شود. از ۲۰۱۷/۱۰، مسیرهای انحرافی فقط زمانی پشتیبانی می‌شوند که مدت سفر به خودروها بستگی نداشته باشد.

VisitRequest

درخواست بازدید که می‌تواند توسط خودرو انجام شود: دارای موقعیت جغرافیایی (یا دو موقعیت، به زیر مراجعه کنید)، زمان‌های باز و بسته شدن که با پنجره‌های زمانی نشان داده می‌شود، و مدت‌زمان سرویس (زمانی که خودرو پس‌از رسیدن برای تحویل گرفتن یا تحویل دادن کالا صرف می‌کند).

نمایش JSON
{
  "arrivalLocation": {
    object (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string,
  "avoidUTurns": boolean
}
فیلدها
arrivalLocation

object (LatLng)

موقعیت جغرافیایی که خودرو هنگام انجام این VisitRequest به آن می‌رسد. اگر مدل ارسال دارای ماتریس‌های فاصله مدت‌زمان باشد، arrivalLocation نباید مشخص شود.

arrivalWaypoint

object (Waypoint)

نقطه‌مسیری که خودرو هنگام انجام این VisitRequest به آن می‌رسد. اگر مدل ارسال دارای ماتریس‌های فاصله مدت‌زمان باشد، arrivalWaypoint نباید مشخص شود.

departureLocation

object (LatLng)

موقعیت جغرافیایی که خودرو پس‌از تکمیل این VisitRequest از آنجا حرکت می‌کند. اگر با arrivalLocation یکسان باشد، می‌توان آن را حذف کرد. اگر مدل ارسال دارای ماتریس‌های فاصله مدت‌زمان باشد، departureLocation نباید مشخص شود.

departureWaypoint

object (Waypoint)

نقطه‌مسیری که خودرو پس‌از تکمیل این VisitRequest از آنجا حرکت می‌کند. اگر با arrivalWaypoint یکسان باشد، می‌توان آن را حذف کرد. اگر مدل ارسال دارای ماتریس‌های فاصله مدت‌زمان باشد، departureWaypoint نباید مشخص شود.

tags[]

string

برچسب‌های پیوست‌شده به درخواست بازدید را مشخص می‌کند. رشته‌های خالی یا تکراری مجاز نیست.

timeWindows[]

object (TimeWindow)

پنجره‌های زمانی که زمان ورود به بازدید را محدود می‌کنند. توجه داشته باشید که خودرو ممکن است خارج از پنجره زمانی ورود حرکت کند، یعنی زمان ورود + مدت‌زمان لازم نیست داخل پنجره زمانی باشد. اگر خودرو قبل‌از TimeWindow.start_time برسد، ممکن است زمان انتظار ایجاد شود.

نبود TimeWindow به این معنی است که خودرو می‌تواند این بازدید را در هر زمانی انجام دهد.

پنجره‌های زمانی باید مجزا باشند، یعنی هیچ پنجره زمانی نباید با پنجره زمانی دیگری هم‌پوشانی داشته باشد یا در مجاورت آن باشد، و باید به‌ترتیب صعودی باشند.

costPerHourAfterSoftEndTime و softEndTime فقط درصورتی می‌توانند تنظیم شوند که یک پنجره زمانی وجود داشته باشد.

duration

string (Duration format)

مدت بازدید، یعنی زمانی که وسیله نقلیه بین ورود و خروج صرف می‌کند (به زمان انتظار احتمالی اضافه می‌شود؛ timeWindows را ببینید).

cost

number

هزینه ارائه خدمات به این درخواست بازدید در مسیر خودرو. از این ویژگی می‌توان برای پرداخت هزینه‌های مختلف برای هر تحویل یا دریافت جایگزین محموله استفاده کرد. این هزینه باید در همان واحد Shipment.penalty_cost باشد و نباید منفی باشد.

loadDemands

map (key: string, value: object (Load))

بار کردن درخواست‌های این درخواست بازدید. این درست مانند فیلد Shipment.load_demands است، با این تفاوت که فقط برای این VisitRequest اعمال می‌شود، نه کل Shipment. مطالبات فهرست‌شده در اینجا به مطالبات فهرست‌شده در Shipment.load_demands اضافه می‌شود.

visitTypes[]

string

نوع بازدید را مشخص می‌کند. این ممکن است برای اختصاص دادن زمان اضافی موردنیاز برای تکمیل این بازدید توسط وسیله نقلیه استفاده شود (Vehicle.extra_visit_duration_for_visit_type را ببینید).

هر نوع فقط یک‌بار می‌تواند ظاهر شود.

label

string

برچسبی برای این VisitRequest مشخص می‌کند. این برچسب در پاسخ به‌عنوان visitLabel در ShipmentRoute.Visit مربوطه گزارش شده است.

avoidUTurns

boolean

مشخص می‌کند که آیا باید از دوربرگردان‌ها در مسیرهای رانندگی در این مکان اجتناب شود یا نه. اجتناب از دوربرگردان در بهترین حالت انجام می‌شود و اجتناب کامل تضمین نمی‌شود. این ویژگی آزمایشی است و ممکن است عملکرد آن تغییر کند.

آزمایشی: برای جزئیات بیشتر، https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request را ببینید.

LatLng

شیئی که نشان‌دهنده جفت طول/عرض جغرافیایی است. این مقدار به‌صورت جفت عدد اعشاری با دقت مضاعف بیان می‌شود تا درجه عرض جغرافیایی و درجه طول جغرافیایی را نشان دهد. مگر اینکه خلاف آن مشخص شده باشد، این شیء باید با استاندارد WGS84 مطابقت داشته باشد. مقادیر باید در محدوده‌های نرمال‌شده باشد.

نمایش JSON
{
  "latitude": number,
  "longitude": number
}
فیلدها
latitude

number

عرض جغرافیایی به درجه. باید در محدوده [-90.0, +90.0] باشد.

longitude

number

طول جغرافیایی به درجه. باید در محدوده [-180.0, +180.0] باشد.

نقطه مسیر

یک نقطه‌مسیر را کپسوله‌سازی می‌کند. نقطه‌مسیرها مکان‌های ورود و خروج VisitRequests و مکان‌های شروع و پایان Vehicles را علامت‌گذاری می‌کنند.

نمایش JSON
{
  "sideOfRoad": boolean,
  "vehicleStopover": boolean,

  // The following is a list of mutually exclusive fields. At most one of the
  // fields will be set in a response:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of mutually exclusive fields.
}
فیلدها
sideOfRoad

boolean

اختیاری. نشان می‌دهد که مکان این نقطه‌مسیر به‌معنای داشتن اولویت برای توقف خودرو در سمت خاصی از جاده است. وقتی این مقدار را تنظیم می‌کنید، مسیر از مکان عبور می‌کند تا خودرو بتواند در سمتی از جاده که مکان نسبت‌به مرکز جاده به آن متمایل است توقف کند. این گزینه برای حالت سفر «پیاده‌روی» کار نمی‌کند.

vehicleStopover

boolean

نشان می‌دهد که نقطه‌مسیر برای توقف وسایل نقلیه درنظر گرفته شده است، جایی که هدف سوار کردن یا پیاده کردن است. این گزینه فقط برای حالت سفر «رانندگی» و زمانی که «locationType» از نوع «location» باشد کار می‌کند.

آزمایشی: رفتار یا وجود این فیلد ممکن است در آینده تغییر کند.

روش‌های مختلف برای نمایش مکان. در زیر فهرستی از فیلدهای متقابلاً انحصاری آمده است. حداکثر یکی از فیلدها در پاسخ تنظیم خواهد شد:
location

object (Location)

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

placeId

string

شناسه جای نقطه موردعلاقه مرتبط با نقطه‌مسیر.

هنگام استفاده از شناسه مکان برای مشخص کردن مکان ورود یا خروج VisitRequest، از شناسه مکانی استفاده کنید که به‌اندازه کافی دقیق باشد تا بتواند مکان LatLng را برای پیمایش به آن مکان تعیین کند. برای مثال، شناسه مکانی که نشان‌دهنده ساختمان باشد مناسب است، اما شناسه مکانی که نشان‌دهنده جاده باشد توصیه نمی‌شود.

پایان فیلدهای متقابلاً انحصاری.

مکان

مکان (نقطه جغرافیایی و عنوان اختیاری) را کپسوله می‌کند.

نمایش JSON
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
فیلدها
latLng

object (LatLng)

مختصات جغرافیایی نقطه‌مسیر.

heading

integer

جهت قطب‌نما مربوط به جهت جریان ترافیک. این مقدار برای مشخص کردن سمتی از جاده که باید برای سوار و پیاده کردن استفاده شود به‌کار می‌رود. مقادیر جهت می‌تواند از ۰ تا ۳۶۰ باشد، که ۰ جهت شمال واقعی، ۹۰ جهت شرق واقعی، و غیره را مشخص می‌کند.

TimeWindow

پنجره‌های زمانی زمان رویداد را محدود می‌کنند، مانند زمان رسیدن به بازدید، یا زمان شروع و پایان خودرو.

محدوده‌های پنجره زمانی سخت، startTime و endTime، زودترین و دیرترین زمان رویداد را اعمال می‌کنند، به‌طوری‌که startTime <= event_time <= endTime. حد پایین پنجره زمانی نرم، softStartTime، ترجیح برای وقوع رویداد در softStartTime یا پس‌از آن را با تحمیل هزینه‌ای متناسب با مدت زمان وقوع رویداد قبل‌از softStartTime بیان می‌کند. حد بالای پنجره زمانی نرم، softEndTime، ترجیح برای وقوع رویداد در softEndTime یا قبل‌از آن را با تحمیل هزینه‌ای متناسب با مدت زمان وقوع رویداد پس‌از softEndTime بیان می‌کند. ‫startTime، endTime، softStartTime، و softEndTime باید در محدوده زمانی جهانی باشند (ShipmentModel.global_start_time و ShipmentModel.global_end_time را ببینید) و باید از موارد زیر پیروی کنند:

  0 <= `startTime` <= `endTime` and
  0 <= `startTime` <= `softStartTime` and
  0 <= `softEndTime` <= `endTime`.
نمایش JSON
{
  "startTime": string,
  "endTime": string,
  "softStartTime": string,
  "softEndTime": string,
  "costPerHourBeforeSoftStartTime": number,
  "costPerHourAfterSoftEndTime": number
}
فیلدها
startTime

string (Timestamp format)

زمان شروع بازه زمانی سخت. اگر مشخص نشده باشد، روی ShipmentModel.global_start_time تنظیم می‌شود.

از RFC 3339 استفاده می‌کند، که در آن خروجی تولیدشده همیشه Z-نرمال‌سازی می‌شود و از ۰، ۳، ۶، یا ۹ رقم اعشاری استفاده می‌کند. انحراف‌های غیراز «Z» نیز پذیرفته می‌شود. مثال‌ها: "2014-10-02T15:01:23Z"، "2014-10-02T15:01:23.045123456Z"، یا "2014-10-02T15:01:23+05:30".

endTime

string (Timestamp format)

زمان پایان بازه زمانی سخت. اگر مشخص نشده باشد، روی ShipmentModel.global_end_time تنظیم می‌شود.

از RFC 3339 استفاده می‌کند، که در آن خروجی تولیدشده همیشه Z-نرمال‌سازی می‌شود و از ۰، ۳، ۶، یا ۹ رقم اعشاری استفاده می‌کند. انحراف‌های غیراز «Z» نیز پذیرفته می‌شود. مثال‌ها: "2014-10-02T15:01:23Z"، "2014-10-02T15:01:23.045123456Z"، یا "2014-10-02T15:01:23+05:30".

softStartTime

string (Timestamp format)

زمان شروع نرم بازه زمانی.

از RFC 3339 استفاده می‌کند، که در آن خروجی تولیدشده همیشه Z-نرمال‌سازی می‌شود و از ۰، ۳، ۶، یا ۹ رقم اعشاری استفاده می‌کند. انحراف‌های غیراز «Z» نیز پذیرفته می‌شود. مثال‌ها: "2014-10-02T15:01:23Z"، "2014-10-02T15:01:23.045123456Z"، یا "2014-10-02T15:01:23+05:30".

softEndTime

string (Timestamp format)

زمان پایان نرم بازه زمانی.

از RFC 3339 استفاده می‌کند، که در آن خروجی تولیدشده همیشه Z-نرمال‌سازی می‌شود و از ۰، ۳، ۶، یا ۹ رقم اعشاری استفاده می‌کند. انحراف‌های غیراز «Z» نیز پذیرفته می‌شود. مثال‌ها: "2014-10-02T15:01:23Z"، "2014-10-02T15:01:23.045123456Z"، یا "2014-10-02T15:01:23+05:30".

costPerHourBeforeSoftStartTime

number

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

   max(0, softStartTime - t.seconds)
                          * costPerHourBeforeSoftStartTime / 3600,
t being the time of the event.

این هزینه باید مثبت باشد و این فیلد فقط درصورتی می‌تواند تنظیم شود که softStartTime تنظیم شده باشد.

costPerHourAfterSoftEndTime

number

اگر رویداد بعداز softEndTime رخ دهد، هزینه هر ساعت به هزینه‌های دیگر در مدل اضافه می‌شود و به‌صورت زیر محاسبه می‌شود:

   max(0, t.seconds - softEndTime.seconds)
                    * costPerHourAfterSoftEndTime / 3600,
t being the time of the event.

این هزینه باید مثبت باشد و این فیلد فقط درصورتی می‌تواند تنظیم شود که softEndTime تنظیم شده باشد.

خودرو

مدل‌سازی خودرو در مشکل ارسال. حل کردن مشکل ارسال، مسیری را برای این خودرو ایجاد می‌کند که از startLocation شروع می‌شود و در endLocation پایان می‌یابد. مسیر عبارت است از توالی بازدیدها (ShipmentRoute را ببینید).

نمایش JSON
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "routeModifiers": {
    object (RouteModifiers)
  },
  "startLocation": {
    object (LatLng)
  },
  "startWaypoint": {
    object (Waypoint)
  },
  "endLocation": {
    object (LatLng)
  },
  "endWaypoint": {
    object (Waypoint)
  },
  "startTags": [
    string
  ],
  "endTags": [
    string
  ],
  "startTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "endTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "unloadingPolicy": enum (UnloadingPolicy),
  "loadLimits": {
    string: {
      object (LoadLimit)
    },
    ...
  },
  "costPerHour": number,
  "costPerTraveledHour": number,
  "costPerKilometer": number,
  "fixedCost": number,
  "usedIfRouteIsEmpty": boolean,
  "routeDurationLimit": {
    object (DurationLimit)
  },
  "travelDurationLimit": {
    object (DurationLimit)
  },
  "routeDistanceLimit": {
    object (DistanceLimit)
  },
  "extraVisitDurationForVisitType": {
    string: string,
    ...
  },
  "breakRule": {
    object (BreakRule)
  },
  "label": string,
  "ignore": boolean,
  "travelDurationMultiple": number
}
فیلدها
displayName

string

نام نمایشی خودرو که کاربر تعریف کرده است. طول آن می‌تواند تا ۶۳ نویسه باشد و ممکن است از نویسه‌های UTF-8 استفاده کند.

travelMode

enum (TravelMode)

حالت سفر که بر جاده‌های قابل‌استفاده توسط وسیله نقلیه و سرعت آن تأثیر می‌گذارد. travelDurationMultiple را نیز ببینید.

routeModifiers

object (RouteModifiers)

مجموعه‌ای از شرایط که باید برآورده شوند و بر نحوه محاسبه مسیرها برای وسیله نقلیه موردنظر تأثیر می‌گذارند.

startLocation

object (LatLng)

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

startWaypoint

object (Waypoint)

نقطه‌مسیر نشان‌دهنده مکان جغرافیایی است که خودرو قبل‌از سوار کردن هر محموله‌ای از آنجا شروع می‌کند. اگر نه startWaypoint و نه startLocation مشخص نشده باشد، خودرو از اولین سوار کردن شروع می‌کند. اگر مدل ارسال دارای ماتریس‌های مدت و فاصله باشد، startWaypoint نباید مشخص شود.

endLocation

object (LatLng)

مکان جغرافیایی که خودرو پس‌از تکمیل آخرین VisitRequest خود در آنجا متوقف می‌شود. اگر مشخص نشده باشد، ShipmentRoute خودرو بلافاصله پس‌از تکمیل آخرین VisitRequest آن به‌پایان می‌رسد. اگر مدل ارسال دارای ماتریس‌های مدت و فاصله باشد، endLocation نباید مشخص شود.

endWaypoint

object (Waypoint)

نقطه‌مسیر نشان‌دهنده مکان جغرافیایی که خودرو پس‌از تکمیل آخرین VisitRequest خود در آنجا متوقف می‌شود. اگر نه endWaypoint و نه endLocation مشخص نشده باشد، ShipmentRoute خودرو بلافاصله پس‌از تکمیل آخرین VisitRequest آن به‌پایان می‌رسد. اگر مدل ارسال دارای ماتریس‌های مدت و فاصله باشد، endWaypoint نباید مشخص شود.

startTags[]

string

برچسب‌های پیوست‌شده به شروع مسیر خودرو را مشخص می‌کند.

رشته‌های خالی یا تکراری مجاز نیست.

endTags[]

string

برچسب‌های پیوست‌شده به انتهای مسیر خودرو را مشخص می‌کند.

رشته‌های خالی یا تکراری مجاز نیست.

startTimeWindows[]

object (TimeWindow)

بازه زمانی‌ای که خودرو می‌تواند از مکان شروع حرکت کند. باید در محدوده زمانی سراسری باشد (فیلدهای ShipmentModel.global_* را ببینید). اگر مشخص نشده باشد، هیچ محدودیتی به‌جز محدودیت‌های زمانی سراسری وجود ندارد.

پنجره‌های زمانی متعلق به یک فیلد تکراری باید مجزا باشند، یعنی هیچ پنجره زمانی نمی‌تواند با پنجره زمانی دیگری هم‌پوشانی داشته باشد یا در مجاورت آن باشد، و باید به‌ترتیب زمانی باشند.

costPerHourAfterSoftEndTime و softEndTime فقط درصورتی می‌توانند تنظیم شوند که یک پنجره زمانی وجود داشته باشد.

endTimeWindows[]

object (TimeWindow)

بازه زمانی‌ای که خودرو ممکن است به مکان پایانی برسد. باید در محدوده زمانی سراسری باشد (فیلدهای ShipmentModel.global_* را ببینید). اگر مشخص نشده باشد، هیچ محدودیتی به‌جز محدودیت‌های زمانی سراسری وجود ندارد.

پنجره‌های زمانی متعلق به یک فیلد تکراری باید مجزا باشند، یعنی هیچ پنجره زمانی نمی‌تواند با پنجره زمانی دیگری هم‌پوشانی داشته باشد یا در مجاورت آن باشد، و باید به‌ترتیب زمانی باشند.

costPerHourAfterSoftEndTime و softEndTime فقط درصورتی می‌توانند تنظیم شوند که یک پنجره زمانی وجود داشته باشد.

unloadingPolicy

enum (UnloadingPolicy)

خط‌مشی تخلیه بار بر خودرو اعمال شد.

loadLimits

map (key: string, value: object (LoadLimit))

ظرفیت‌های وسیله نقلیه (برای مثال، وزن، حجم، تعداد پالت). کلیدهای موجود در نقشه، شناسه‌های نوع بار هستند که با کلیدهای فیلد Shipment.load_demands مطابقت دارند. اگر کلید خاصی در این نقشه وجود نداشته باشد، ظرفیت مربوطه نامحدود درنظر گرفته می‌شود.

costPerHour

number

هزینه‌های خودرو: همه هزینه‌ها جمع می‌شوند و باید در واحد یکسانی با Shipment.penalty_cost باشند.

هزینه به‌ازای هر ساعت از مسیر وسیله نقلیه. این هزینه برای کل زمان صرف‌شده در مسیر اعمال می‌شود و شامل زمان سفر، زمان انتظار، و زمان بازدید است. استفاده از costPerHour به‌جای costPerTraveledHour ممکن است باعث تأخیر بیشتر شود.

costPerTraveledHour

number

هزینه به‌ازای هر ساعت طی‌شده در مسیر خودرو. این هزینه فقط برای مدت سفر طی‌شده در مسیر (یعنی آنچه در ShipmentRoute.transitions گزارش شده است) اعمال می‌شود و زمان انتظار و زمان بازدید را شامل نمی‌شود.

costPerKilometer

number

هزینه هر کیلومتر از مسیر خودرو. این هزینه برای مسافت گزارش‌شده در ShipmentRoute.transitions اعمال می‌شود و برای مسافت طی‌شده ضمنی از arrivalLocation تا departureLocation یک VisitRequest اعمال نمی‌شود.

fixedCost

number

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

usedIfRouteIsEmpty

boolean

این فیلد فقط برای خودروهایی اعمال می‌شود که مسیر آن‌ها هیچ محموله‌ای را ارائه نمی‌دهد. نشان می‌دهد که آیا خودرو باید در این مورد به‌عنوان دست‌دوم درنظر گرفته شود یا نه.

اگر درست باشد، خودرو از مکان شروع به مکان پایان می‌رود حتی اگر هیچ محموله‌ای را تحویل ندهد، و هزینه‌های زمان و مسافت ناشی از سفر شروع --> پایان آن درنظر گرفته می‌شود.

درغیراین‌صورت، از مکان شروع به مکان پایان نمی‌رود و هیچ breakRule یا تأخیری (از TransitionAttributes) برای این وسیله نقلیه زمان‌بندی نشده است. در این حالت، ShipmentRoute خودرو هیچ اطلاعاتی به‌جز نمایه و برچسب خودرو ندارد.

routeDurationLimit

object (DurationLimit)

محدودیت اعمال‌شده بر کل مدت مسیر خودرو. در یک OptimizeToursResponse مشخص، مدت‌زمان مسیر وسیله نقلیه تفاوت بین vehicleEndTime و vehicleStartTime آن است.

travelDurationLimit

object (DurationLimit)

محدودیت اعمال‌شده بر مدت سفر مسیر خودرو. در یک OptimizeToursResponse مشخص، مدت سفر مسیر مجموع همه transitions.travel_duration آن است.

routeDistanceLimit

object (DistanceLimit)

محدودیت بر کل مسافت مسیر خودرو اعمال شد. در یک OptimizeToursResponse معین، مسافت مسیر مجموع همه transitions.travel_distance_meters آن است.

extraVisitDurationForVisitType

map (key: string, value: string (Duration format))

نقشه‌ای از رشته‌های visitTypes به مدت‌ها را مشخص می‌کند. مدت زمان علاوه‌بر VisitRequest.duration است که باید در بازدیدها با visitTypes مشخص‌شده درنظر گرفته شود. اگر costPerHour مشخص شده باشد، این مدت بازدید اضافی هزینه را افزایش می‌دهد. کلیدها (یعنی visitTypes) نمی‌توانند رشته‌های خالی باشند.

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

breakRule

object (BreakRule)

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

label

string

برچسبی برای این خودرو مشخص می‌کند. این برچسب در پاسخ به‌عنوان vehicleLabel مربوط به ShipmentRoute گزارش می‌شود.

ignore

boolean

اگر درست باشد، usedIfRouteIsEmpty باید نادرست باشد و این خودرو بدون استفاده باقی خواهد ماند.

اگر محموله‌ای توسط خودرو نادیده‌گرفته‌شده در injectedFirstSolutionRoutes انجام شود، در راه‌حل اول از آن رد می‌شود اما در پاسخ آزاد است که انجام شود.

اگر ارسال توسط خودرو نادیده‌گرفته‌شده در injectedSolutionConstraint انجام شود و هرگونه تحویل/دریافت مرتبط محدود به ماندن در خودرو باشد (یعنی به سطح RELAX_ALL_AFTER_THRESHOLD کاهش نیابد)، در پاسخ نادیده گرفته می‌شود. اگر محموله‌ای فیلد allowedVehicleIndices غیرخالی داشته باشد و همه خودروهای مجاز نادیده گرفته شوند، در پاسخ از آن صرف‌نظر می‌شود.

travelDurationMultiple

number

عامل ضربی را مشخص می‌کند که می‌تواند برای افزایش یا کاهش زمان سفر این وسیله نقلیه استفاده شود. برای مثال، تنظیم این مقدار روی ۲٫۰ به این معنی است که این وسیله نقلیه کندتر است و مدت سفر آن دو برابر مدت سفر وسایل نقلیه استاندارد است. این ضریب بر مدت بازدید تأثیری ندارد. اگر costPerHour یا costPerTraveledHour مشخص شده باشد، بر هزینه تأثیر می‌گذارد. این مقدار باید در محدوده [۰٫۰۰۱، ۱۰۰۰٫۰] باشد. اگر تنظیم نشده باشد، وسیله نقلیه استاندارد است و این ضریب ۱٫۰ درنظر گرفته می‌شود.

هشدار: زمان‌های سفر پس‌از اعمال این ضریب اما قبل‌از انجام هرگونه عملیات عددی به نزدیک‌ترین ثانیه گرد می‌شوند، بنابراین، ضریب کوچک ممکن است منجر به ازدست رفتن دقت شود.

همچنین extraVisitDurationForVisitType را در زیر ببینید.

TravelMode

حالت‌های سفر که خودروها می‌توانند استفاده کنند.

این‌ها باید زیرمجموعه‌ای از حالت‌های سفر Google Maps Platform Routes API باشند، به این نشانی مراجعه کنید: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode

توجه: مسیرهای WALKING در نسخه بتا هستند و ممکن است گاهی پیاده‌روها یا مسیرهای عابر پیاده را به‌طور واضح نشان ندهند. باید این هشدار را برای همه مسیرهای پیاده‌روی که در برنامه‌تان نمایش می‌دهید به کاربر نشان دهید.

شمارشی‌ها
TRAVEL_MODE_UNSPECIFIED حالت سفر نامشخص، معادل DRIVING.
DRIVING حالت سفر مربوط به مسیرهای رانندگی (خودرو، ...).
WALKING حالت سفر مربوط به مسیرهای پیاده‌روی.
TWO_WHEELER وسیله نقلیه موتوری دوچرخ. برای مثال، موتورسیکلت. توجه داشته باشید که این حالت با حالت سفر «دوچرخه‌سواری» که حالت‌های با نیروی انسانی را پوشش می‌دهد متفاوت است. این حالت سفر فقط در کشورهایی که در کشورها و مناطق پشتیبانی‌شده برای وسایل نقلیه دوچرخ فهرست شده‌اند پشتیبانی می‌شود.

RouteModifiers

مجموعه‌ای از شرایط اختیاری را که باید هنگام محاسبه مسیرهای خودرو برآورده شوند دربرمی‌گیرد. این شبیه به RouteModifiers در Google Maps Platform Routes Preferred API است؛ به https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers مراجعه کنید.

نمایش JSON
{
  "avoidTolls": boolean,
  "avoidHighways": boolean,
  "avoidFerries": boolean,
  "avoidIndoor": boolean
}
فیلدها
avoidTolls

boolean

مشخص می‌کند که آیا درصورت امکان از جاده‌های عوارضی اجتناب شود یا نه. اولویت با مسیرهایی است که جاده عوارضی ندارند. فقط برای حالت‌های سفر موتوری اعمال می‌شود.

avoidHighways

boolean

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

avoidFerries

boolean

مشخص می‌کند که آیا درصورت امکان از کشتی اجتناب شود یا نه. اولویت با مسیرهایی است که شامل سفر با کشتی نیستند. فقط برای حالت‌های سفر موتوری اعمال می‌شود.

avoidIndoor

boolean

اختیاری. مشخص می‌کند که آیا درصورت امکان از پیمایش در فضای بسته اجتناب شود یا نه. اولویت با مسیرهایی است که ناوبری داخلی ندارند. فقط برای حالت سفر WALKING اعمال می‌شود.

UnloadingPolicy

خط‌مشی مربوط به نحوه تخلیه بار خودرو. فقط برای محموله‌هایی اعمال می‌شود که هم تحویل و هم ارسال دارند.

سایر محموله‌ها می‌توانند در هرجایی از مسیر مستقل از unloadingPolicy انجام شوند.

شمارشی‌ها
UNLOADING_POLICY_UNSPECIFIED خط‌مشی تخلیه بار نامشخص؛ تحویل‌ها باید فقط پس‌از تحویل گرفتن‌های مربوطه انجام شوند.
LAST_IN_FIRST_OUT تحویل‌ها باید به‌ترتیب معکوس تحویل گرفتن‌ها انجام شود
FIRST_IN_FIRST_OUT تحویل‌ها باید به همان ترتیبی که تحویل گرفته شده‌اند انجام شوند

LoadLimit

محدودیت بار اعمال‌شده بر وسیله نقلیه را تعریف می‌کند، مثلاً «این کامیون فقط می‌تواند تا ۳۵۰۰ کیلوگرم بار حمل کند». loadLimits را ببینید.

نمایش JSON
{
  "softMaxLoad": string,
  "costPerUnitAboveSoftMax": number,
  "startLoadInterval": {
    object (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string,
  "costPerKilometer": {
    object (LoadCost)
  },
  "costPerTraveledHour": {
    object (LoadCost)
  }
}
فیلدها
softMaxLoad

string (int64 format)

حد نرم بار. costPerUnitAboveSoftMax را ببینید.

costPerUnitAboveSoftMax

number

اگر بار درطول مسیر این وسیله نقلیه از softMaxLoad فراتر رود، جریمه هزینه زیر اعمال می‌شود (فقط یک‌بار برای هر وسیله نقلیه): (بار - softMaxLoad) * costPerUnitAboveSoftMax. همه هزینه‌ها جمع می‌شوند و باید در همان واحد Shipment.penalty_cost باشند. محدودیت‌های نرم فقط برای انواعی تعریف می‌شوند که در سراسر مدل فقط برای تحویل گرفتن یا فقط برای تحویل دادن اعمال می‌شوند.

startLoadInterval

object (Interval)

بازه بار قابل‌قبول خودرو در شروع مسیر.

endLoadInterval

object (Interval)

بازه بار قابل‌قبول خودرو در انتهای مسیر.

maxLoad

string (int64 format)

حداکثر مقدار قابل‌قبول بار.

costPerKilometer

object (LoadCost)

هزینه جابه‌جایی یک واحد بار در یک کیلومتر برای این خودرو. این می‌تواند به‌عنوان پراکسی برای مصرف سوخت استفاده شود: اگر بار وزنی (به نیوتن) باشد، بار*کیلومتر دارای بعد انرژی است.

آزمایشی: برای جزئیات بیشتر، https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request را ببینید.

costPerTraveledHour

object (LoadCost)

هزینه سفر با یک واحد بار درطول یک ساعت برای این خودرو.

آزمایشی: برای جزئیات بیشتر، https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request را ببینید.

فاصله

فاصله زمانی مقادیر بار قابل‌قبول.

نمایش JSON
{
  "min": string,
  "max": string
}
فیلدها
min

string (int64 format)

حداقل بار قابل‌قبول. باید ≥ ۰ باشد. اگر هر دو مشخص شده باشند، min باید ≤ max باشد.

max

string (int64 format)

حداکثر بار قابل‌قبول. باید ≥ ۰ باشد. اگر مشخص نشده باشد، حداکثر بار توسط این پیام محدود نمی‌شود. اگر هر دو مشخص شده باشند، min باید ≤ max باشد.

LoadCost

هزینه جابه‌جایی یک واحد بار درطول Transition. برای یک بار مشخص، هزینه مجموع دو بخش است:

  • min(load, loadThreshold) * costPerUnitBelowThreshold
  • max(0, load - loadThreshold) * costPerUnitAboveThreshold

با این هزینه، راه‌حل‌ها ترجیح می‌دهند ابتدا تقاضاهای بالا را تحویل دهند، یا به‌طور معادل، تقاضاهای بالا را در آخر تحویل بگیرند. برای مثال، اگر خودرویی

load_limit {
  key: "weight"
  value {
    costPerKilometer {
      loadThreshold: 15
      costPerUnitBelowThreshold: 2.0
      costPerUnitAboveThreshold: 10.0
    }
  }
}

و مسیر آن شروع، تحویل، تحویل، ارسال، ارسال، پایان با انتقال‌های زیر است:

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

سپس هزینه متحمل‌شده توسط این LoadCost برابر است با (cost_below * load_below * kilometers + cost_above * load_above * kms)

  • transition 0: 0.0
  • گذار ۱: ۲٫۰ * ۱۰ * ۱٫۰ + ۱۰٫۰ * ۰ * ۱٫۰ = ۲۰٫۰
  • گذار ۲: ۲٫۰ * ۱۵ * ۱٫۰ + ۱۰٫۰ * (۲۰ - ۱۵) * ۱٫۰ = ۸۰٫۰
  • گذار ۳: ۲.۰ * ۱۰ * ۱.۰ + ۱۰.۰ * ۰ * ۱.۰ = ۲۰.۰
  • گذار ۴: ۰.۰

بنابراین LoadCost درطول مسیر ۱۲۰.۰ است.

اما اگر مسیر شروع، تحویل گرفتن، ارسال، تحویل گرفتن، ارسال، پایان با انتقال‌ها باشد:

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

در این صورت، هزینه ایجادشده توسط این LoadCost عبارت است از

  • transition 0: 0.0
  • گذار ۱: ۲٫۰ * ۱۰ * ۱٫۰ + ۱۰٫۰ * ۰ * ۱٫۰ = ۲۰٫۰
  • گذار ۲: ۰.۰
  • گذار ۳: ۲.۰ * ۱۰ * ۱.۰ + ۱۰.۰ * ۰ * ۱.۰ = ۲۰.۰
  • گذار ۴: ۰.۰

در اینجا LoadCost درطول مسیر ۴۰٫۰ است.

LoadCost راه‌حل‌های دارای انتقال‌های سنگین را گران‌تر می‌کند.

آزمایشی: برای جزئیات بیشتر، https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request را ببینید.

نمایش JSON
{
  "loadThreshold": string,
  "costPerUnitBelowThreshold": number,
  "costPerUnitAboveThreshold": number
}
فیلدها
loadThreshold

string (int64 format)

مقدار باری که بالاتر از آن، هزینه جابه‌جایی یک واحد بار از costPerUnitBelowThreshold به costPerUnitAboveThreshold تغییر می‌کند. باید >= ۰ باشد.

costPerUnitBelowThreshold

number

هزینه جابه‌جایی یک واحد بار، برای هر واحد بین ۰ و آستانه. باید مقداری محدود و بزرگ‌تر یا مساوی ۰ باشد.

costPerUnitAboveThreshold

number

هزینه جابه‌جایی یک واحد بار، برای هر واحد بالاتر از آستانه. در مورد خاص آستانه = ۰، این هزینه ثابت به‌ازای هر واحد است. باید مقداری محدود و بزرگ‌تر یا مساوی ۰ باشد.

DurationLimit

محدودیتی که حداکثر مدت مسیر خودرو را تعریف می‌کند. می‌تواند سخت یا نرم باشد.

وقتی فیلد حد نرم تعریف می‌شود، هم آستانه حداکثر نرم و هم هزینه مرتبط با آن باید باهم تعریف شوند.

نمایش JSON
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
فیلدها
maxDuration

string (Duration format)

محدودیت سختی که مدت را به حداکثر maxDuration محدود می‌کند.

softMaxDuration

string (Duration format)

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

اگر تعریف شده باشد، softMaxDuration باید غیرمنفی باشد. اگر maxDuration نیز تعریف شده باشد، softMaxDuration باید کمتر از maxDuration باشد.

quadraticSoftMaxDuration

string (Duration format)

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

اگر quadraticSoftMaxDuration تنظیم شده باشد، شرایط زیر باید برآورده شود:

  • باید غیرمنفی باشد.
  • ‫maxDuration باید تعریف شود.
  • quadraticSoftMaxDuration باید کمتر از maxDuration باشد.
  • تفاوت نباید بیشتر از یک روز باشد: maxDuration - quadraticSoftMaxDuration <= 86400 seconds
costPerHourAfterSoftMax

number

هزینه به‌ازای هر ساعت درصورت نقض آستانه softMaxDuration. اگر مدت‌زمان کمتر از آستانه باشد، هزینه اضافی ۰ است، درغیراین‌صورت هزینه به مدت‌زمان بستگی دارد و به‌صورت زیر است:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

هزینه باید غیرمنفی باشد.

costPerSquareHourAfterQuadraticSoftMax

number

هزینه به‌ازای ساعت مربع درصورت نقض آستانه quadraticSoftMaxDuration.

اگر مدت‌زمان کمتر از آستانه باشد، هزینه اضافی ۰ است، درغیراین‌صورت هزینه به مدت‌زمان بستگی دارد و به‌صورت زیر است:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

هزینه باید غیرمنفی باشد.

DistanceLimit

محدودیتی که حداکثر مسافتی را که می‌توان طی کرد تعریف می‌کند. می‌تواند سخت یا نرم باشد.

اگر حد نرم تعریف شده باشد، هم softMaxMeters و هم costPerKilometerAboveSoftMax باید تعریف شده و غیرمنفی باشند.

نمایش JSON
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerBelowSoftMax": number,
  "costPerKilometerAboveSoftMax": number
}
فیلدها
maxMeters

string (int64 format)

محدودیت سختی که فاصله را حداکثر به maxMeters محدود می‌کند. حد پاسخ باید غیرمنفی باشد.

softMaxMeters

string (int64 format)

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

اگر softMaxMeters تعریف شده باشد، باید کمتر از maxMeters و غیرمنفی باشد.

costPerKilometerBelowSoftMax

number

هزینه هر کیلومتر طی‌شده، افزایش تا softMaxMeters، با فرمول:

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

این هزینه در routeDistanceLimit پشتیبانی نمی‌شود.

costPerKilometerAboveSoftMax

number

هزینه هر کیلومتر درصورتی‌که مسافت بیشتر از حد مجاز softMaxMeters باشد. اگر فاصله کمتر از حد باشد، هزینه اضافی ۰ است، درغیراین‌صورت فرمول مورداستفاده برای محاسبه هزینه به‌صورت زیر است:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

هزینه باید غیرمنفی باشد.

BreakRule

قوانین تولید وقت استراحت برای خودرو (مثلاً وقت ناهار). استراحت یک دوره زمانی پیوسته است که درطول آن خودرو در موقعیت فعلی خود بی‌کار می‌ماند و نمی‌تواند هیچ بازدیدی انجام دهد. ممکن است وقفه در شرایط زیر رخ دهد:

  • درطول سفر بین دو بازدید (که شامل زمان درست قبل یا درست بعداز بازدید می‌شود، اما نه در اواسط بازدید)، که در این صورت زمان حمل‌ونقل مربوطه بین بازدیدها را تمدید می‌کند،
  • یا قبل‌از شروع حرکت خودرو (ممکن است خودرو در اواسط استراحت شروع به حرکت نکند)، که در این صورت بر زمان شروع حرکت خودرو تأثیری ندارد.
  • یا بعداز پایان خودرو (همانند بالا، با زمان پایان خودرو).
نمایش JSON
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
فیلدها
breakRequests[]

object (BreakRequest)

توالی وقت‌های استراحت. پیام BreakRequest را ببینید.

frequencyConstraints[]

object (FrequencyConstraint)

ممکن است چند FrequencyConstraint اعمال شود. همه آن‌ها باید توسط BreakRequestهای این BreakRule برآورده شوند. FrequencyConstraint را ببینید.

BreakRequest

توالی وقفه‌ها (یعنی تعداد و ترتیب آن‌ها) که برای هر وسیله نقلیه اعمال می‌شود باید ازقبل مشخص باشد. BreakRequestهای تکراری آن توالی را به‌ترتیبی که باید رخ دهند تعریف می‌کنند. پنجره‌های زمانی آن‌ها (earliestStartTime / latestStartTime) ممکن است هم‌پوشانی داشته باشند، اما باید با سفارش سازگار باشند (این مورد بررسی می‌شود).

نمایش JSON
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
فیلدها
earliestStartTime

string (Timestamp format)

الزامی. کران پایین (شامل) در شروع وقفه.

از RFC 3339 استفاده می‌کند، که در آن خروجی تولیدشده همیشه Z-نرمال‌سازی می‌شود و از ۰، ۳، ۶، یا ۹ رقم اعشاری استفاده می‌کند. انحراف‌های غیراز «Z» نیز پذیرفته می‌شود. مثال‌ها: "2014-10-02T15:01:23Z"، "2014-10-02T15:01:23.045123456Z"، یا "2014-10-02T15:01:23+05:30".

latestStartTime

string (Timestamp format)

الزامی. کران بالا (شامل) در شروع وقفه.

از RFC 3339 استفاده می‌کند، که در آن خروجی تولیدشده همیشه Z-نرمال‌سازی می‌شود و از ۰، ۳، ۶، یا ۹ رقم اعشاری استفاده می‌کند. انحراف‌های غیراز «Z» نیز پذیرفته می‌شود. مثال‌ها: "2014-10-02T15:01:23Z"، "2014-10-02T15:01:23.045123456Z"، یا "2014-10-02T15:01:23+05:30".

minDuration

string (Duration format)

الزامی. حداقل مدت وقفه. باید مثبت باشد.

FrequencyConstraint

ممکن است با اعمال حداقل بسامد استراحت، مانند «باید حداقل ۱ ساعت استراحت در هر ۱۲ ساعت وجود داشته باشد»، بسامد و مدت استراحت‌های مشخص‌شده در بالا را بیشتر محدود کند. با فرض اینکه این را بتوان به‌صورت «در هر پنجره زمانی لغزشی ۱۲ ساعته، باید حداقل یک استراحت حداقل یک ساعته وجود داشته باشد» تفسیر کرد، آن مثال به FrequencyConstraint زیر ترجمه می‌شود:

{
   minBreakDuration { seconds: 3600 }         # 1 hour.
   maxInterBreakDuration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

زمان‌بندی و مدت زمان وقفه‌ها در راه‌حل، علاوه‌بر پنجره‌های زمانی و حداقل مدت زمان‌های مشخص‌شده در BreakRequest، از همه این محدودیت‌ها پیروی خواهد کرد.

FrequencyConstraint ممکن است در عمل برای وقفه‌های غیرمتوالی اعمال شود. برای مثال، زمان‌بندی زیر از مثال «۱ ساعت هر ۱۲ ساعت» پیروی می‌کند:

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
نمایش JSON
{
  "minBreakDuration": string,
  "maxInterBreakDuration": string
}
فیلدها
minBreakDuration

string (Duration format)

الزامی. حداقل مدت وقفه برای این محدودیت. غیرمنفی. شرح FrequencyConstraint را ببینید.

maxInterBreakDuration

string (Duration format)

الزامی. حداکثر بازه مجاز برای هر فاصله زمانی در مسیر که حداقل بخشی‌از استراحت duration >= minBreakDuration را شامل نمی‌شود. باید مثبت باشد.

هدف اصلی

اهداف به‌طور کامل جایگزین مدل هزینه می‌شوند و بنابراین با هزینه‌های ازپیش موجود ناسازگار هستند. هر هدف به تعدادی هزینه ازپیش تعریف‌شده برای مثال، وسایل نقلیه، محموله‌ها، یا ویژگی‌های انتقال نگاشت می‌شود.

آزمایشی: برای جزئیات بیشتر، https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request را ببینید.

نمایش JSON
{
  "type": enum (Type),
  "weight": number
}
فیلدها
type

enum (Type)

نوع هدف.

weight

number

این هدف چقدر باید نسبت‌به اهداف دیگر اهمیت داشته باشد. این مقدار می‌تواند هر عدد غیرمنفی باشد، مجموع وزن‌ها نباید ۱ باشد. وزن‌ها به‌طور پیش‌فرض ۱٫۰ است.

نوع

نوع هدفی که به مجموعه‌ای از هزینه‌ها نگاشت خواهد شد.

شمارشی‌ها
DEFAULT برای اطمینان از راه‌حل منطقی، از مجموعه پیش‌فرضی از هزینه‌ها استفاده خواهد شد. توجه: این هدف می‌تواند به‌تنهایی استفاده شود، اما همیشه با وزن ۱٫۰ به‌عنوان خط مبنا به اهداف مشخص‌شده توسط کاربر اضافه می‌شود، اگر قبلاً وجود نداشته باشد.
MIN_DISTANCE اهداف «MIN». کل مسافت طی‌شده را به حداقل برسانید.
MIN_WORKING_TIME به‌حداقل رساندن کل زمان کار، جمع‌شده برای همه وسایل نقلیه.
MIN_TRAVEL_TIME همانند بالا اما فقط با تمرکز بر مدت سفر.
MIN_NUM_VEHICLES تعداد خودروهای مورداستفاده را به‌حداقل برسانید.

DurationDistanceMatrix

ماتریس مدت و فاصله را از مکان‌های شروع بازدید و خودرو تا مکان‌های پایان بازدید و خودرو مشخص می‌کند.

نمایش JSON
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
فیلدها
rows[]

object (Row)

ردیف‌های ماتریس مدت و فاصله را مشخص می‌کند. باید به تعداد ShipmentModel.duration_distance_matrix_src_tags عنصر داشته باشد.

vehicleStartTag

string

برچسبی که مشخص می‌کند این ماتریس مدت و مسافت برای کدام خودروها اعمال می‌شود. اگر خالی باشد، این مورد برای همه خودروها اعمال می‌شود و فقط یک ماتریس می‌تواند وجود داشته باشد.

هر شروع خودرو باید دقیقاً با یک ماتریس مطابقت داشته باشد، یعنی دقیقاً یکی از فیلدهای startTags آن‌ها باید با vehicleStartTag یک ماتریس (و فقط همان ماتریس) مطابقت داشته باشد.

همه ماتریس‌ها باید vehicleStartTag متفاوتی داشته باشند.

ردیف

ردیفی از ماتریس مدت و فاصله را مشخص می‌کند.

نمایش JSON
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
فیلدها
durations[]

string (Duration format)

مقادیر مدت زمان برای ردیف داده‌شده. باید به تعداد ShipmentModel.duration_distance_matrix_dst_tags عنصر داشته باشد.

meters[]

number

مقادیر فاصله برای ردیف مشخص. اگر هیچ هزینه یا محدودیتی به فاصله‌ها در مدل اشاره نکند، این فیلد می‌تواند خالی بماند؛ درغیراین‌صورت، باید به تعداد durations عنصر داشته باشد.

TransitionAttributes

مشخصه‌های انتقال بین دو بازدید متوالی در یک مسیر را مشخص می‌کند. ممکن است چند TransitionAttributes برای یک انتقال اعمال شود: در این صورت، همه هزینه‌های اضافی جمع می‌شوند و سخت‌گیرانه‌ترین محدودیت یا حد اعمال می‌شود (به‌دنبال معناشناسی طبیعی «AND»).

نمایش JSON
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
فیلدها
srcTag

string

برچسب‌هایی که مجموعه انتقال‌های (src->dst) را که این مشخصه‌ها برای آن‌ها اعمال می‌شود تعریف می‌کنند.

بازدید از منبع یا شروع حرکت خودرو درصورتی مطابقت دارد که VisitRequest.tags یا Vehicle.start_tags آن حاوی srcTag باشد یا حاوی excludedSrcTag نباشد (بسته به اینکه کدام‌یک از این دو فیلد خالی نباشد).

excludedSrcTag

string

srcTag را ببینید. دقیقاً یکی از srcTag و excludedSrcTag باید غیرخالی باشد.

dstTag

string

بازدید مقصد یا پایان خودرو فقط درصورتی مطابقت دارد که VisitRequest.tags یا Vehicle.end_tags آن حاوی dstTag باشد یا حاوی excludedDstTag نباشد (بسته به اینکه کدام‌یک از این دو فیلد خالی نباشد).

excludedDstTag

string

dstTag را ببینید. دقیقاً یکی از dstTag و excludedDstTag باید غیرخالی باشد.

cost

number

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

costPerKilometer

number

هزینه هر کیلومتر را که بر مسافت طی‌شده درطول این انتقال اعمال می‌شود مشخص می‌کند. این مقدار به هر Vehicle.cost_per_kilometer مشخص‌شده در خودروها اضافه می‌شود.

distanceLimit

object (DistanceLimit)

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

از تاریخ ۲۰۲۱/۰۶، فقط محدودیت‌های نرم پشتیبانی می‌شود.

delay

string (Duration format)

تأخیر ایجادشده هنگام اجرای این انتقال را مشخص می‌کند.

این تأخیر همیشه پس‌از پایان بازدید مبدأ و پیش‌از شروع بازدید مقصد رخ می‌دهد.

ShipmentTypeIncompatibility

ناسازگاری‌های بین محموله‌ها را براساس shipmentType آن‌ها مشخص می‌کند. ظاهر شدن محموله‌های ناسازگار در یک مسیر براساس حالت ناسازگاری محدود می‌شود.

نمایش JSON
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
فیلدها
types[]

string

فهرست انواع ناسازگار. دو محموله که shipment_types متفاوتی در بین موارد فهرست‌شده دارند «ناسازگار» هستند.

incompatibilityMode

enum (IncompatibilityMode)

حالت اعمال‌شده برای ناسازگاری.

IncompatibilityMode

حالت‌هایی که نحوه محدود شدن ظاهر محموله‌های ناسازگار را در همان مسیر تعریف می‌کنند.

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

در این حالت، دو محموله با انواع ناسازگار هرگز نمی‌توانند هم‌زمان در یک خودرو باشند:

  • فقط درصورتی می‌توانند از یک خودرو استفاده کنند که یکی‌از آن‌ها قبل‌از سوار شدن دیگری به مقصد برسد.
  • وقتی هر دو محموله فقط برای تحویل گرفتن (بدون تحویل دادن) یا فقط برای تحویل دادن (بدون تحویل گرفتن) باشند، اصلاً نمی‌توانند از یک وسیله نقلیه استفاده کنند.

ShipmentTypeRequirement

الزامات بین محموله‌ها را براساس shipmentType آن‌ها مشخص می‌کند. جزئیات الزام توسط حالت الزام تعریف می‌شود.

نمایش JSON
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
فیلدها
requiredShipmentTypeAlternatives[]

string

فهرست انواع ارسال جایگزین که dependentShipmentTypes لازم دارد.

dependentShipmentTypes[]

string

همه محموله‌هایی که نوعی در فیلد dependentShipmentTypes دارند باید حداقل یک محموله از نوع requiredShipmentTypeAlternatives داشته باشند تا در همان مسیر بازدید شوند.

توجه: زنجیره‌های الزامات به‌گونه‌ای که shipmentType به خودش وابسته باشد مجاز نیست.

requirementMode

enum (RequirementMode)

حالت روی شرط اعمال شد.

RequirementMode

حالت‌هایی که ظاهر محموله‌های وابسته را در مسیر تعریف می‌کنند.

شمارشی‌ها
REQUIREMENT_MODE_UNSPECIFIED حالت الزامی نامشخص. این مقدار هرگز نباید استفاده شود.
PERFORMED_BY_SAME_VEHICLE در این حالت، همه محموله‌های «وابسته» باید با حداقل یکی از محموله‌های «موردنیاز» خود در یک وسیله نقلیه قرار بگیرند.
IN_SAME_VEHICLE_AT_PICKUP_TIME

با حالت IN_SAME_VEHICLE_AT_PICKUP_TIME، همه محموله‌های «وابسته» باید حداقل یک محموله «موردنیاز» در زمان تحویل در وسیله نقلیه خود داشته باشند.

بنابراین، تحویل محموله «وابسته» باید یکی از موارد زیر را داشته باشد:

  • محموله «الزامی» فقط ارسال که بعداز آن در مسیر تحویل داده شده است، یا
  • محموله «موردنیاز» قبل‌از آن در مسیر تحویل گرفته شده باشد و اگر محموله «موردنیاز» تحویل داشته باشد، این تحویل باید بعداز تحویل گرفتن محموله «وابسته» انجام شود.
IN_SAME_VEHICLE_AT_DELIVERY_TIME مانند قبل، با این تفاوت که محموله‌های «وابسته» باید در زمان تحویل، محموله «موردنیاز» را در وسیله نقلیه خود داشته باشند.

PrecedenceRule

قانون تقدم بین دو رویداد (هر رویداد عبارت است از تحویل گرفتن یا تحویل دادن محموله): رویداد «دوم» باید حداقل offsetDuration پس‌از شروع رویداد «اول» شروع شود.

چندین تقدم می‌توانند به رویدادهای یکسان (یا مرتبط) اشاره کنند، برای مثال، «سوار کردن B پس‌از تحویل A اتفاق می‌افتد» و «سوار کردن C پس‌از سوار کردن B اتفاق می‌افتد».

علاوه‌براین، تقدم‌ها فقط زمانی اعمال می‌شوند که هر دو ارسال انجام شده باشند و درغیراین‌صورت نادیده گرفته می‌شوند.

نمایش JSON
{
  "firstIsDelivery": boolean,
  "secondIsDelivery": boolean,
  "offsetDuration": string,
  "firstIndex": integer,
  "secondIndex": integer
}
فیلدها
firstIsDelivery

boolean

نشان می‌دهد که آیا رویداد «اول» تحویل است یا نه.

secondIsDelivery

boolean

نشان می‌دهد که آیا رویداد «دوم» تحویل است یا نه.

offsetDuration

string (Duration format)

فاصله زمانی بین رویداد «اول» و «دوم». می‌تواند منفی باشد.

firstIndex

integer

نمایه ارسال «اولین» رویداد. این فیلد باید مشخص شود.

secondIndex

integer

شاخص ارسال رویداد «دوم». این فیلد باید مشخص شود.