ShipmentModel

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

  • هزینه مسیریابی وسایل نقلیه (مجموع هزینه در کل زمان، هزینه در هر زمان سفر و هزینه ثابت برای همه وسایل نقلیه).
  • جریمه های حمل و نقل انجام نشده
  • هزینه مدت زمان جهانی محموله ها
نمایندگی JSON
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "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 )

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

globalStartTime

string ( Timestamp format)

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

بازه زمانی مدل باید کمتر از یک سال باشد، یعنی globalEndTime و globalStartTime باید در 31536000 ثانیه از یکدیگر باشند.

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

مهر زمانی در قالب RFC3339 UTC "Zulu"، با وضوح نانوثانیه و حداکثر نه رقم کسری. مثال‌ها: "2014-10-02T15:01:23Z" و "2014-10-02T15:01:23.045123456Z" .

globalEndTime

string ( Timestamp format)

اگر تنظیم نشود، 00:00:00 UTC، 1 ژانویه 1971 (یعنی ثانیه: 31536000، نانو: 0) به عنوان پیش فرض استفاده می شود.

مهر زمانی در قالب RFC3339 UTC "Zulu"، با وضوح نانوثانیه و حداکثر نه رقم کسری. مثال‌ها: "2014-10-02T15:01:23Z" و "2014-10-02T15:01:23.045123456Z" .

globalDurationCostPerHour

number

"مدت زمان جهانی" طرح کلی، تفاوت بین اولین زمان شروع موثر و آخرین زمان پایان موثر همه وسایل نقلیه است. به عنوان مثال، کاربران می توانند برای هر ساعت هزینه ای را به آن مقدار اختصاص دهند تا تلاش کنند و برای اولین کار تکمیل کنند. این هزینه باید برابر با Shipment.penalty_cost باشد.

durationDistanceMatrices[]

object ( DurationDistanceMatrix )

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

نمونه های استفاده:

  • دو مکان وجود دارد: locA و locB.
  • 1 وسیله نقلیه که مسیر خود را در locA شروع می کند و آن را در locA به پایان می رساند.
  • 1 درخواست بازدید از وانت در 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.
  • 1 وسیله نقلیه با استفاده از ماتریس "سریع" مسیر خود را در locA شروع و در locB پایان می دهد.
  • 1 وسیله نقلیه که مسیر خود را در locB شروع می کند و در locB پایان می دهد، با استفاده از ماتریس "slow".
  • 1 وسیله نقلیه که مسیر خود را در locB شروع می کند و آن را در locB پایان می دهد، با استفاده از ماتریس "سریع".
  • 1 درخواست بازدید از وانت در 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

نام نمایشی تعریف شده توسط کاربر برای محموله. می تواند حداکثر 63 کاراکتر باشد و ممکن است از نویسه های UTF-8 استفاده کند.

pickups[]

object ( VisitRequest )

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

deliveries[]

object ( VisitRequest )

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

loadDemands

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

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

یک شی حاوی لیستی از "key": value . مثال: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

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

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

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

pickupToDeliveryTimeLimit

string ( Duration format)

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

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

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
}
فیلدها
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 را ببینید).

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

cost

number

هزینه سرویس این درخواست بازدید در مسیر وسیله نقلیه. این می تواند برای پرداخت هزینه های مختلف برای هر بار تحویل یا تحویل یک محموله استفاده شود. این هزینه باید همان واحد Shipment.penalty_cost باشد و نباید منفی باشد.

loadDemands

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

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

یک شی حاوی لیستی از "key": value . مثال: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

visitTypes[]

string

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

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

label

string

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

LatLng

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

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

number

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

longitude

number

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

نقطه راه

یک نقطه بین راه را در بر می گیرد. نقاط راه، مکان ورود و خروج VisitRequests، و مکان شروع و پایان وسایل نقلیه را مشخص می کنند.

نمایندگی JSON
{
  "sideOfRoad": boolean,

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
فیلدها
sideOfRoad

boolean

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

location_type فیلد اتحادیه روش های مختلف برای نشان دادن یک مکان location_type تنها می تواند یکی از موارد زیر باشد:
location

object ( Location )

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

placeId

string

شناسه مکان POI مرتبط با ایستگاه بین راه.

مکان

یک مکان (نقطه جغرافیایی و عنوان اختیاری) را در بر می گیرد.

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

object ( LatLng )

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

heading

integer

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

پنجره زمانی

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

محدودیت‌های پنجره زمان سخت، 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 تنظیم می شود.

مهر زمانی در قالب RFC3339 UTC "Zulu"، با وضوح نانوثانیه و حداکثر نه رقم کسری. مثال‌ها: "2014-10-02T15:01:23Z" و "2014-10-02T15:01:23.045123456Z" .

endTime

string ( Timestamp format)

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

مهر زمانی در قالب RFC3339 UTC "Zulu"، با وضوح نانوثانیه و حداکثر نه رقم کسری. مثال‌ها: "2014-10-02T15:01:23Z" و "2014-10-02T15:01:23.045123456Z" .

softStartTime

string ( Timestamp format)

زمان شروع نرم پنجره زمان.

مهر زمانی در قالب RFC3339 UTC "Zulu"، با وضوح نانوثانیه و حداکثر نه رقم کسری. مثال‌ها: "2014-10-02T15:01:23Z" و "2014-10-02T15:01:23.045123456Z" .

softEndTime

string ( Timestamp format)

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

مهر زمانی در قالب RFC3339 UTC "Zulu"، با وضوح نانوثانیه و حداکثر نه رقم کسری. مثال‌ها: "2014-10-02T15:01:23Z" و "2014-10-02T15:01:23.045123456Z" .

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

نام نمایشی تعریف شده توسط کاربر برای وسیله نقلیه. می تواند حداکثر 63 کاراکتر باشد و ممکن است از نویسه های 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 مطابقت دارند. اگر یک کلید مشخص در این نقشه وجود نداشته باشد، ظرفیت مربوطه نامحدود در نظر گرفته می شود.

یک شی حاوی لیستی از "key": value . مثال: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

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 ) نمی توانند رشته های خالی باشند.

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

یک شی حاوی لیستی از "key": value . مثال: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

breakRule

object ( BreakRule )

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

label

string

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

ignore

boolean

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

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

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

travelDurationMultiple

number

یک عامل ضربی را مشخص می کند که می تواند برای افزایش یا کاهش زمان سفر این وسیله نقلیه استفاده شود. به عنوان مثال، تنظیم این مورد روی 2.0 به این معنی است که این وسیله نقلیه کندتر است و زمان سفر دو برابر بیشتر از خودروهای استاندارد است. این چند برابر بر مدت زمان بازدید تأثیری ندارد. اگر costPerHour یا costPerTraveledHour مشخص شده باشد، بر هزینه تأثیر می گذارد. این باید در محدوده [0.001، 1000.0] باشد. اگر تنظیم نشده باشد، خودرو استاندارد است و این مضرب 1.0 در نظر گرفته می شود.

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

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

حالت سفر

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

اینها باید زیرمجموعه ای از حالت های سفر API ترجیحی مسیرهای پلتفرم Google Maps باشند، به این آدرس مراجعه کنید: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode .

Enums
TRAVEL_MODE_UNSPECIFIED حالت سفر نامشخص، معادل DRIVING .
DRIVING حالت سفر مربوط به مسیرهای رانندگی (ماشین، ...).
WALKING حالت سفر مربوط به مسیرهای پیاده روی.

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 آزاد هستند.

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

LoadLimit

محدودیت بار را برای یک وسیله نقلیه تعریف می کند، به عنوان مثال "این کامیون فقط می تواند تا 3500 کیلوگرم را حمل کند". loadLimits ببینید.

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

string ( int64 format)

حد نرم از بار. به costPerUnitAboveSoftMax مراجعه کنید.

costPerUnitAboveSoftMax

number

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

startLoadInterval

object ( Interval )

فاصله بار قابل قبول وسیله نقلیه در شروع مسیر.

endLoadInterval

object ( Interval )

فاصله بار قابل قبول وسیله نقلیه در انتهای مسیر.

maxLoad

string ( int64 format)

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

فاصله

فاصله مقادیر بار قابل قبول

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

string ( int64 format)

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

max

string ( int64 format)

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

محدودیت مدت

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

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

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

string ( Duration format)

یک محدودیت سخت که مدت زمان را حداکثر حداکثر مدت زمان محدود می کند.

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

softMaxDuration

string ( Duration format)

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

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

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

quadraticSoftMaxDuration

string ( Duration format)

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

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

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

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

costPerHourAfterSoftMax

number

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

  costPerHourAfterSoftMax * (duration - softMaxDuration)

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

costPerSquareHourAfterQuadraticSoftMax

number

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

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

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

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

محدودیت فاصله

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

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

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

string ( int64 format)

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

softMaxMeters

string ( int64 format)

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

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

costPerKilometerBelowSoftMax

number

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

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

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

costPerKilometerAboveSoftMax

number

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

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

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

BreakRule

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

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

object ( BreakRequest )

توالی وقفه ها پیام BreakRequest را ببینید.

frequencyConstraints[]

object ( FrequencyConstraint )

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

Break Request

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

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

string ( Timestamp format)

مورد نیاز. کران پایین (شامل) در شروع استراحت.

مهر زمانی در قالب RFC3339 UTC "Zulu"، با وضوح نانوثانیه و حداکثر نه رقم کسری. مثال‌ها: "2014-10-02T15:01:23Z" و "2014-10-02T15:01:23.045123456Z" .

latestStartTime

string ( Timestamp format)

مورد نیاز. کران بالا (شامل) در شروع استراحت.

مهر زمانی در قالب RFC3339 UTC "Zulu"، با وضوح نانوثانیه و حداکثر نه رقم کسری. مثال: "2014-10-02T15:01:23Z" و "2014-10-02T15:01:23.045123456Z" .

minDuration

string ( Duration format)

مورد نیاز. حداقل مدت زمان استراحت. باید مثبت باشد

مدت زمان در ثانیه با حداکثر نه رقم کسری ، که با " s " پایان می یابد. مثال: "3.5s" .

بازتولت

ممکن است فرد با اجرای حداقل فرکانس استراحت ، فرکانس و مدت زمان استراحت های مشخص شده در بالا را محدود کند ، مانند "باید حداقل 1 ساعت در هر 12 ساعت استراحت داشته باشد". با فرض اینکه این امر را می توان به عنوان "در هر پنجره زمان کشویی 12 ساعت تعبیر کرد ، باید حداقل یک ساعت حداقل یک ساعت وجود داشته باشد" ، این مثال به FrequencyConstraint زیر ترجمه می شود:

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

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

یک FrequencyConstraint ممکن است در عمل در مورد استراحت های غیر متوالی اعمال شود. به عنوان مثال ، برنامه زیر به عنوان مثال "1H هر 12 ساعت" افتخار می کند:

  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 مراجعه کنید.

مدت زمان در ثانیه با حداکثر نه رقم کسری ، که با " s " پایان می یابد. مثال: "3.5s" .

maxInterBreakDuration

string ( Duration format)

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

مدت زمان در ثانیه با حداکثر نه رقم کسری ، که با " s " پایان می یابد. مثال: "3.5s" .

مدت زمان بندی

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

نمایندگی 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 داشته باشد.

مدت زمان در ثانیه با حداکثر نه رقم کسری ، که با " s " پایان می یابد. مثال: "3.5s" .

meters[]

number

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

انتقال

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

نمایندگی 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

بازدید از مقصد یا پایان Vehicle.end_tags در صورتی dstTag که VisitRequest.tags از آن را انجام excludedDstTag دهد.

excludedDstTag

string

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

cost

number

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

costPerKilometer

number

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

distanceLimit

object ( DistanceLimit )

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

از سال 2021/06 ، فقط از محدودیت های نرم پشتیبانی می شود.

delay

string ( Duration format)

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

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

مدت زمان در ثانیه با حداکثر نه رقم کسری ، که با " s " پایان می یابد. مثال: "3.5s" .

قابلیت سازگاری حمل و نقل

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

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

string

لیست انواع ناسازگار. دو محموله دارای shipment_types مختلف در میان موارد ذکر شده "ناسازگار" هستند.

incompatibilityMode

enum ( IncompatibilityMode )

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

نامطلوب

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

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

برای دو محموله با انواع ناسازگار با NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY به صورت ناسازگاری:

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

حمل و نقل

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

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

string

لیست انواع جایگزین حمل و نقل مورد نیاز توسط dependentShipmentTypes .

dependentShipmentTypes[]

string

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

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

requirementMode

enum ( RequirementMode )

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

روش

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

Enums
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 مانند گذشته ، به جز محموله های "وابسته" باید در زمان تحویل خود حمل و نقل "مورد نیاز" را بر روی وسیله نقلیه خود داشته باشند.

پیشگام

یک قانون تقدم بین دو رویداد (هر رویداد وانت یا تحویل حمل و نقل است): رویداد "دوم" باید offsetDuration پس از شروع "اول" شروع به کار کند.

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

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

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

boolean

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

secondIsDelivery

boolean

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

offsetDuration

string ( Duration format)

جبران بین رویداد "اول" و "دوم". می تواند منفی باشد.

مدت زمان در ثانیه با حداکثر نه رقم کسری ، که با " s " پایان می یابد. مثال: "3.5s" .

firstIndex

integer

شاخص حمل و نقل رویداد "اولین". این قسمت باید مشخص شود.

secondIndex

integer

شاخص حمل و نقل رویداد "دوم". این قسمت باید مشخص شود.

،

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

  • هزینه مسیریابی وسایل نقلیه (مبلغ هزینه در کل زمان ، هزینه در هر زمان سفر و هزینه ثابت در تمام وسایل نقلیه).
  • مجازات های حمل و نقل بدون عملکرد.
  • هزینه مدت جهانی محموله ها
نمایندگی JSON
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "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 )

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

globalStartTime

string ( Timestamp format)

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

مدت زمان مدل باید کمتر از یک سال باشد ، یعنی globalEndTime و globalStartTime باید در 31536000 ثانیه از یکدیگر باشد.

هنگام استفاده از زمینه های cost_per_*hour ، ممکن است بخواهید این پنجره را در یک بازه کوچکتر تنظیم کنید تا عملکرد افزایش یابد (به عنوان مثال اگر یک روز را مدل می کنید ، باید محدودیت های زمان جهانی را تا آن روز تعیین کنید). اگر UNET ، 00:00:00 UTC ، 1 ژانویه 1970 (یعنی ثانیه: 0 ، نانو: 0) به عنوان پیش فرض استفاده می شود.

Timestamp در قالب RFC3339 UTC "Zulu" ، با وضوح نانو ثانیه و حداکثر نه رقم کسری. مثال: "2014-10-02T15:01:23Z" و "2014-10-02T15:01:23.045123456Z" .

globalEndTime

string ( Timestamp format)

اگر UNET ، 00:00:00 UTC ، 1 ژانویه 1971 (یعنی ثانیه: 31536000 ، نانو: 0) به عنوان پیش فرض استفاده می شود.

Timestamp در قالب RFC3339 UTC "Zulu" ، با وضوح نانو ثانیه و حداکثر نه رقم کسری. مثال: "2014-10-02T15:01:23Z" و "2014-10-02T15:01:23.045123456Z" .

globalDurationCostPerHour

number

"مدت زمان جهانی" برنامه کلی ، تفاوت بین اولین زمان شروع موثر و آخرین زمان پایان مؤثر همه وسایل نقلیه است. به عنوان مثال کاربران می توانند در هر ساعت هزینه ای را به آن مقدار اختصاص دهند تا به عنوان مثال برای اتمام کار زودرس و بهینه سازی کنند. این هزینه باید در همان واحد Shipment.penalty_cost باشد. penalty_cost.

durationDistanceMatrices[]

object ( DurationDistanceMatrix )

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

نمونه های استفاده:

  • دو مکان وجود دارد: LOCA و LOCB.
  • 1 وسیله نقلیه که مسیر خود را در Loca شروع کرده و آن را در Loca پایان می دهد.
  • 1 درخواست وانت در 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.
  • 1 وسیله نقلیه با استفاده از ماتریس "Fast" مسیر خود را در Loca شروع کرده و آن را در LOCB پایان می دهد.
  • 1 وسیله نقلیه با استفاده از ماتریس "آهسته" مسیر خود را در LOCB شروع کرده و آن را در LOCB پایان می دهد.
  • 1 وسیله نقلیه با استفاده از ماتریس "سریع" مسیر خود را در LOCB شروع کرده و آن را در LOCB پایان می دهد.
  • 1 درخواست وانت در 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) مدت زمان و مسافت را از بازدیدها با TAG 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)) مدت زمان (فاصله) سفر را از بازدید با TAG durationDistanceMatrixSrcTags(j) TAG) تعریف می کند. durationDistanceMatrixSrcTags(j) برای بازدیدها با TAG durationDistanceMatrixDstTags(k) در ماتریس i.

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

transitionAttributes[]

object ( TransitionAttributes )

ویژگی های انتقال به مدل اضافه شده است.

shipmentTypeIncompatibilities[]

object ( ShipmentTypeIncompatibility )

مجموعه ای از حمل و نقل ناسازگار_تایپ (به حمل و 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

نام نمایشگر تعریف شده توسط کاربر. این می تواند تا 63 کاراکتر طول داشته باشد و ممکن است از شخصیت های UTF-8 استفاده کند.

pickups[]

object ( VisitRequest )

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

deliveries[]

object ( VisitRequest )

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

loadDemands

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

تقاضای بار حمل و نقل (به عنوان مثال وزن ، حجم ، تعداد پالت و غیره). کلیدهای موجود در نقشه باید شناسه هایی باشند که نوع بار مربوطه را توصیف می کنند ، از نظر ایده آل شامل واحدها نیز می شوند. به عنوان مثال: "Peight_kg" ، "Volume_gallons" ، "PALLET_COUNT" و غیره. اگر یک کلید داده شده در نقشه ظاهر نشود ، بار مربوطه به عنوان تهی در نظر گرفته می شود.

یک شیء حاوی لیستی از "key": value . مثال: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

allowedVehicleIndices[]

integer

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

costsPerVehicle[]

number

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

  • همان تعداد عناصر به عنوان costsPerVehicleIndices . costsPerVehicle[i] با costsPerVehicleIndices[i] مدل مطابقت دارد.
  • همان تعداد عناصر که وسایل نقلیه در مدل وجود دارد. عنصر I-Th با وسیله نقلیه #I مدل مطابقت دارد.

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

costsPerVehicleIndices[]

integer

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

pickupToDeliveryAbsoluteDetourLimit

string ( Duration format)

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

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

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

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

مدت زمان در ثانیه با حداکثر نه رقم کسری ، که با " s " پایان می یابد. مثال: "3.5s" .

pickupToDeliveryTimeLimit

string ( Duration format)

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

مدت زمان در ثانیه با حداکثر نه رقم کسری ، که با " s " پایان می یابد. مثال: "3.5s" .

shipmentType

string

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

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

label

string

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

ignore

boolean

اگر درست است ، از این محموله پرش کنید ، اما یک penaltyCost اعمال نکنید.

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

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

penaltyCost

number

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

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

pickupToDeliveryRelativeDetourLimit

number

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

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

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

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

بازدید از

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

نمایندگی 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
}
فیلدها
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 مراجعه کنید).

مدت زمان در ثانیه با حداکثر نه رقم کسری ، که با " s " پایان می یابد. مثال: "3.5s" .

cost

number

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

loadDemands

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

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

یک شیء حاوی لیستی از "key": value . مثال: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

visitTypes[]

string

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

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

label

string

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

لنگه

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

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

number

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

longitude

number

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

نقطه راه

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

نمایندگی JSON
{
  "sideOfRoad": boolean,

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
فیلدها
sideOfRoad

boolean

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

Union Field location_type . روش های مختلف برای نشان دادن یک مکان. location_type فقط می تواند یکی از موارد زیر باشد:
location

object ( Location )

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

placeId

string

شناسه Poi Place در ارتباط با نقطه راه.

مکان

یک مکان (یک نقطه جغرافیایی و عنوان اختیاری) را محاصره می کند.

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

object ( LatLng )

مختصات جغرافیایی Waypoint.

heading

integer

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

سیم تایم

Windows Time زمان یک رویداد را محدود می کند ، مانند زمان ورود در یک بازدید یا زمان شروع و پایان یک وسیله نقلیه.

مرزهای پنجره زمان سخت ، startTime و endTime ، اولین و آخرین زمان این رویداد را اجرا کنید ، به گونه ای که startTime <= event_time <= endTime . پنجره زمانی نرم ، پایین ، 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 تنظیم می شود.

Timestamp در قالب RFC3339 UTC "Zulu" ، با وضوح نانو ثانیه و حداکثر نه رقم کسری. مثال: "2014-10-02T15:01:23Z" و "2014-10-02T15:01:23.045123456Z" .

endTime

string ( Timestamp format)

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

Timestamp در قالب RFC3339 UTC "Zulu" ، با وضوح نانو ثانیه و حداکثر نه رقم کسری. مثال: "2014-10-02T15:01:23Z" و "2014-10-02T15:01:23.045123456Z" .

softStartTime

string ( Timestamp format)

زمان شروع نرم پنجره زمان.

Timestamp در قالب RFC3339 UTC "Zulu" ، با وضوح نانو ثانیه و حداکثر نه رقم کسری. مثال: "2014-10-02T15:01:23Z" و "2014-10-02T15:01:23.045123456Z" .

softEndTime

string ( Timestamp format)

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

Timestamp در قالب RFC3339 UTC "Zulu" ، با وضوح نانو ثانیه و حداکثر نه رقم کسری. مثال: "2014-10-02T15:01:23Z" و "2014-10-02T15:01:23.045123456Z" .

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

نام نمایشگر تعریف شده توسط کاربر. این می تواند تا 63 کاراکتر طول داشته باشد و ممکن است از شخصیت های UTF-8 استفاده کند.

travelMode

enum ( TravelMode )

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

routeModifiers

object ( RouteModifiers )

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

startLocation

object ( LatLng )

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

startWaypoint

object ( Waypoint )

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

endLocation

object ( LatLng )

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

endWaypoint

object ( Waypoint )

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 . bload_demands. اگر یک کلید معین از این نقشه غایب باشد ، ظرفیت مربوطه بی حد و حصر در نظر گرفته می شود.

یک شیء حاوی لیستی از "key": value . مثال: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

costPerHour

number

هزینه های وسیله نقلیه: تمام هزینه ها اضافه می شوند و باید در واحد Shipment.penalty_cost قرار داشته باشند. PENATTY_COST.

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

costPerTraveledHour

number

هزینه هر ساعت سفر از مسیر وسیله نقلیه. این هزینه فقط برای زمان سفر گرفته شده توسط مسیر (یعنی گزارش شده در حمل و نقل در ShipmentRoute.transitions ) اعمال می شود ، و زمان انتظار و زمان بازدید را حذف نمی کند.

costPerKilometer

number

هزینه هر کیلومتر مسیر وسیله نقلیه. این هزینه برای مسافت گزارش شده در حمل arrivalLocation نقل departureLocation ShipmentRoute.transitions VisitRequest می شود.

fixedCost

number

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

usedIfRouteIsEmpty

boolean

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

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

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

routeDurationLimit

object ( DurationLimit )

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

travelDurationLimit

object ( DurationLimit )

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

routeDistanceLimit

object ( DistanceLimit )

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

extraVisitDurationForVisitType

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

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

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

یک شیء حاوی لیستی از "key": value . مثال: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

breakRule

object ( BreakRule )

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

label

string

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

ignore

boolean

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

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

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

travelDurationMultiple

number

یک عامل چند برابر را مشخص می کند که می تواند برای افزایش یا کاهش زمان سفر این وسیله نقلیه استفاده شود. For example, setting this to 2.0 means that this vehicle is slower and has travel times that are twice what they are for standard vehicles. This multiple does not affect visit durations. It does affect cost if costPerHour or costPerTraveledHour are specified. This must be in the range [0.001, 1000.0]. If unset, the vehicle is standard, and this multiple is considered 1.0.

WARNING: Travel times will be rounded to the nearest second after this multiple is applied but before performing any numerical operations, thus, a small multiple may result in a loss of precision.

See also extraVisitDurationForVisitType below.

TravelMode

Travel modes which can be used by vehicles.

These should be a subset of the Google Maps Platform Routes Preferred API travel modes, see: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode .

Enums
TRAVEL_MODE_UNSPECIFIED Unspecified travel mode, equivalent to DRIVING .
DRIVING Travel mode corresponding to driving directions (car, ...).
WALKING Travel mode corresponding to walking directions.

RouteModifiers

Encapsulates a set of optional conditions to satisfy when calculating vehicle routes. This is similar to RouteModifiers in the Google Maps Platform Routes Preferred API; see: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers .

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

boolean

Specifies whether to avoid toll roads where reasonable. Preference will be given to routes not containing toll roads. Applies only to motorized travel modes.

avoidHighways

boolean

Specifies whether to avoid highways where reasonable. Preference will be given to routes not containing highways. Applies only to motorized travel modes.

avoidFerries

boolean

Specifies whether to avoid ferries where reasonable. Preference will be given to routes not containing travel by ferries. Applies only to motorized travel modes.

avoidIndoor

boolean

اختیاری. Specifies whether to avoid navigating indoors where reasonable. Preference will be given to routes not containing indoor navigation. Applies only to the WALKING travel mode.

UnloadingPolicy

Policy on how a vehicle can be unloaded. Applies only to shipments having both a pickup and a delivery.

Other shipments are free to occur anywhere on the route independent of unloadingPolicy .

Enums
UNLOADING_POLICY_UNSPECIFIED Unspecified unloading policy; deliveries must just occur after their corresponding pickups.
LAST_IN_FIRST_OUT Deliveries must occur in reverse order of pickups
FIRST_IN_FIRST_OUT Deliveries must occur in the same order as pickups

LoadLimit

Defines a load limit applying to a vehicle, eg "this truck may only carry up to 3500 kg". See loadLimits .

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

string ( int64 format)

A soft limit of the load. See costPerUnitAboveSoftMax .

costPerUnitAboveSoftMax

number

If the load ever exceeds softMaxLoad along this vehicle's route, the following cost penalty applies (only once per vehicle): (load - softMaxLoad ) * costPerUnitAboveSoftMax . All costs add up and must be in the same unit as Shipment.penalty_cost .

startLoadInterval

object ( Interval )

The acceptable load interval of the vehicle at the start of the route.

endLoadInterval

object ( Interval )

The acceptable load interval of the vehicle at the end of the route.

maxLoad

string ( int64 format)

The maximum acceptable amount of load.

فاصله

Interval of acceptable load amounts.

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

string ( int64 format)

A minimum acceptable load. Must be ≥ 0. If they're both specified, min must be ≤ max .

max

string ( int64 format)

A maximum acceptable load. Must be ≥ 0. If unspecified, the maximum load is unrestricted by this message. If they're both specified, min must be ≤ max .

DurationLimit

A limit defining a maximum duration of the route of a vehicle. It can be either hard or soft.

When a soft limit field is defined, both the soft max threshold and its associated cost must be defined together.

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

string ( Duration format)

A hard limit constraining the duration to be at most maxDuration.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

softMaxDuration

string ( Duration format)

A soft limit not enforcing a maximum duration limit, but when violated makes the route incur a cost. This cost adds up to other costs defined in the model, with the same unit.

If defined, softMaxDuration must be nonnegative. If maxDuration is also defined, softMaxDuration must be less than maxDuration.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

quadraticSoftMaxDuration

string ( Duration format)

A soft limit not enforcing a maximum duration limit, but when violated makes the route incur a cost, quadratic in the duration. This cost adds up to other costs defined in the model, with the same unit.

If defined, quadraticSoftMaxDuration must be nonnegative. If maxDuration is also defined, quadraticSoftMaxDuration must be less than maxDuration , and the difference must be no larger than one day:

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

costPerHourAfterSoftMax

number

Cost per hour incurred if the softMaxDuration threshold is violated. The additional cost is 0 if the duration is under the threshold, otherwise the cost depends on the duration as follows:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

The cost must be nonnegative.

costPerSquareHourAfterQuadraticSoftMax

number

Cost per square hour incurred if the quadraticSoftMaxDuration threshold is violated.

The additional cost is 0 if the duration is under the threshold, otherwise the cost depends on the duration as follows:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

The cost must be nonnegative.

DistanceLimit

A limit defining a maximum distance which can be traveled. It can be either hard or soft.

If a soft limit is defined, both softMaxMeters and costPerKilometerAboveSoftMax must be defined and be nonnegative.

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

string ( int64 format)

A hard limit constraining the distance to be at most maxMeters. The limit must be nonnegative.

softMaxMeters

string ( int64 format)

A soft limit not enforcing a maximum distance limit, but when violated results in a cost which adds up to other costs defined in the model, with the same unit.

If defined softMaxMeters must be less than maxMeters and must be nonnegative.

costPerKilometerBelowSoftMax

number

Cost per kilometer incurred, increasing up to softMaxMeters , with formula:

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

This cost is not supported in routeDistanceLimit .

costPerKilometerAboveSoftMax

number

Cost per kilometer incurred if distance is above softMaxMeters limit. The additional cost is 0 if the distance is under the limit, otherwise the formula used to compute the cost is the following:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

The cost must be nonnegative.

BreakRule

Rules to generate time breaks for a vehicle (eg lunch breaks). A break is a contiguous period of time during which the vehicle remains idle at its current position and cannot perform any visit. A break may occur:

  • during the travel between two visits (which includes the time right before or right after a visit, but not in the middle of a visit), in which case it extends the corresponding transit time between the visits,
  • or before the vehicle start (the vehicle may not start in the middle of a break), in which case it does not affect the vehicle start time.
  • or after the vehicle end (ditto, with the vehicle end time).
نمایندگی JSON
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
فیلدها
breakRequests[]

object ( BreakRequest )

Sequence of breaks. See the BreakRequest message.

frequencyConstraints[]

object ( FrequencyConstraint )

Several FrequencyConstraint may apply. They must all be satisfied by the BreakRequest s of this BreakRule . See FrequencyConstraint .

BreakRequest

The sequence of breaks (ie their number and order) that apply to each vehicle must be known beforehand. The repeated BreakRequest s define that sequence, in the order in which they must occur. Their time windows ( earliestStartTime / latestStartTime ) may overlap, but they must be compatible with the order (this is checked).

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

string ( Timestamp format)

مورد نیاز. Lower bound (inclusive) on the start of the break.

A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" .

latestStartTime

string ( Timestamp format)

مورد نیاز. Upper bound (inclusive) on the start of the break.

A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" .

minDuration

string ( Duration format)

مورد نیاز. Minimum duration of the break. Must be positive.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

FrequencyConstraint

One may further constrain the frequency and duration of the breaks specified above, by enforcing a minimum break frequency, such as "There must be a break of at least 1 hour every 12 hours". Assuming that this can be interpreted as "Within any sliding time window of 12h, there must be at least one break of at least one hour", that example would translate to the following FrequencyConstraint :

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

The timing and duration of the breaks in the solution will respect all such constraints, in addition to the time windows and minimum durations already specified in the BreakRequest .

A FrequencyConstraint may in practice apply to non-consecutive breaks. For example, the following schedule honors the "1h every 12h" example:

  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)

مورد نیاز. Minimum break duration for this constraint. Nonnegative. See description of FrequencyConstraint .

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

maxInterBreakDuration

string ( Duration format)

مورد نیاز. Maximum allowed span of any interval of time in the route that does not include at least partially a break of duration >= minBreakDuration . Must be positive.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

DurationDistanceMatrix

Specifies a duration and distance matrix from visit and vehicle start locations to visit and vehicle end locations.

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

object ( Row )

Specifies the rows of the duration and distance matrix. It must have as many elements as ShipmentModel.duration_distance_matrix_src_tags .

vehicleStartTag

string

Tag defining to which vehicles this duration and distance matrix applies. If empty, this applies to all vehicles, and there can only be a single matrix.

Each vehicle start must match exactly one matrix, ie exactly one of their startTags field must match the vehicleStartTag of a matrix (and of that matrix only).

All matrices must have a different vehicleStartTag .

ردیف

Specifies a row of the duration and distance matrix.

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

string ( Duration format)

Duration values for a given row. It must have as many elements as ShipmentModel.duration_distance_matrix_dst_tags .

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

meters[]

number

Distance values for a given row. If no costs or constraints refer to distances in the model, this can be left empty; otherwise it must have as many elements as durations .

TransitionAttributes

Specifies attributes of transitions between two consecutive visits on a route. Several TransitionAttributes may apply to the same transition: in that case, all extra costs add up and the strictest constraint or limit applies (following natural "AND" semantics).

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

string

Tags defining the set of (src->dst) transitions these attributes apply to.

A source visit or vehicle start matches iff its VisitRequest.tags or Vehicle.start_tags either contains srcTag or does not contain excludedSrcTag (depending on which of these two fields is non-empty).

excludedSrcTag

string

See srcTag . Exactly one of srcTag and excludedSrcTag must be non-empty.

dstTag

string

A destination visit or vehicle end matches iff its VisitRequest.tags or Vehicle.end_tags either contains dstTag or does not contain excludedDstTag (depending on which of these two fields is non-empty).

excludedDstTag

string

See dstTag . Exactly one of dstTag and excludedDstTag must be non-empty.

cost

number

Specifies a cost for performing this transition. This is in the same unit as all other costs in the model and must not be negative. It is applied on top of all other existing costs.

costPerKilometer

number

Specifies a cost per kilometer applied to the distance traveled while performing this transition. It adds up to any Vehicle.cost_per_kilometer specified on vehicles.

distanceLimit

object ( DistanceLimit )

Specifies a limit on the distance traveled while performing this transition.

As of 2021/06, only soft limits are supported.

delay

string ( Duration format)

Specifies a delay incurred when performing this transition.

This delay always occurs after finishing the source visit and before starting the destination visit.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

ShipmentTypeIncompatibility

Specifies incompatibilties between shipments depending on their shipmentType. The appearance of incompatible shipments on the same route is restricted based on the incompatibility mode.

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

string

List of incompatible types. Two shipments having different shipment_types among those listed are "incompatible".

incompatibilityMode

enum ( IncompatibilityMode )

Mode applied to the incompatibility.

IncompatibilityMode

Modes defining how the appearance of incompatible shipments are restricted on the same route.

Enums
INCOMPATIBILITY_MODE_UNSPECIFIED Unspecified incompatibility mode. This value should never be used.
NOT_PERFORMED_BY_SAME_VEHICLE In this mode, two shipments with incompatible types can never share the same vehicle.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

For two shipments with incompatible types with the NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY incompatibility mode:

  • If both are pickups only (no deliveries) or deliveries only (no pickups), they cannot share the same vehicle at all.
  • If one of the shipments has a delivery and the other a pickup, the two shipments can share the same vehicle iff the former shipment is delivered before the latter is picked up.

ShipmentTypeRequirement

Specifies requirements between shipments based on their shipmentType. The specifics of the requirement are defined by the requirement mode.

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

string

List of alternative shipment types required by the dependentShipmentTypes .

dependentShipmentTypes[]

string

All shipments with a type in the dependentShipmentTypes field require at least one shipment of type requiredShipmentTypeAlternatives to be visited on the same route.

NOTE: Chains of requirements such that a shipmentType depends on itself are not allowed.

requirementMode

enum ( RequirementMode )

Mode applied to the requirement.

RequirementMode

Modes defining the appearance of dependent shipments on a route.

Enums
REQUIREMENT_MODE_UNSPECIFIED Unspecified requirement mode. This value should never be used.
PERFORMED_BY_SAME_VEHICLE In this mode, all "dependent" shipments must share the same vehicle as at least one of their "required" shipments.
IN_SAME_VEHICLE_AT_PICKUP_TIME

With the IN_SAME_VEHICLE_AT_PICKUP_TIME mode, all "dependent" shipments need to have at least one "required" shipment on their vehicle at the time of their pickup.

A "dependent" shipment pickup must therefore have either:

  • A delivery-only "required" shipment delivered on the route after, or
  • A "required" shipment picked up on the route before it, and if the "required" shipment has a delivery, this delivery must be performed after the "dependent" shipment's pickup.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Same as before, except the "dependent" shipments need to have a "required" shipment on their vehicle at the time of their delivery .

PrecedenceRule

A precedence rule between two events (each event is the pickup or the delivery of a shipment): the "second" event has to start at least offsetDuration after "first" has started.

Several precedences can refer to the same (or related) events, eg, "pickup of B happens after delivery of A" and "pickup of C happens after pickup of B".

Furthermore, precedences only apply when both shipments are performed and are otherwise ignored.

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

boolean

Indicates if the "first" event is a delivery.

secondIsDelivery

boolean

Indicates if the "second" event is a delivery.

offsetDuration

string ( Duration format)

The offset between the "first" and "second" event. می تواند منفی باشد.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

firstIndex

integer

Shipment index of the "first" event. This field must be specified.

secondIndex

integer

Shipment index of the "second" event. This field must be specified.

،

A shipment model contains a set of shipments which must be performed by a set of vehicles, while minimizing the overall cost, which is the sum of:

  • the cost of routing the vehicles (sum of cost per total time, cost per travel time, and fixed cost over all vehicles).
  • the unperformed shipment penalties.
  • the cost of the global duration of the shipments
نمایندگی JSON
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "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 )

Set of shipments which must be performed in the model.

vehicles[]

object ( Vehicle )

Set of vehicles which can be used to perform visits.

globalStartTime

string ( Timestamp format)

Global start and end time of the model: no times outside of this range can be considered valid.

The model's time span must be less than a year, ie the globalEndTime and the globalStartTime must be within 31536000 seconds of each other.

When using cost_per_*hour fields, you might want to set this window to a smaller interval to increase performance (eg. if you model a single day, you should set the global time limits to that day). If unset, 00:00:00 UTC, January 1, 1970 (ie seconds: 0, nanos: 0) is used as default.

A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" .

globalEndTime

string ( Timestamp format)

If unset, 00:00:00 UTC, January 1, 1971 (ie seconds: 31536000, nanos: 0) is used as default.

A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" .

globalDurationCostPerHour

number

The "global duration" of the overall plan is the difference between the earliest effective start time and the latest effective end time of all vehicles. Users can assign a cost per hour to that quantity to try and optimize for earliest job completion, for example. This cost must be in the same unit as Shipment.penalty_cost .

durationDistanceMatrices[]

object ( DurationDistanceMatrix )

Specifies duration and distance matrices used in the model. If this field is empty, Google Maps or geodesic distances will be used instead, depending on the value of the useGeodesicDistances field. If it is not empty, useGeodesicDistances cannot be true and neither durationDistanceMatrixSrcTags nor durationDistanceMatrixDstTags can be empty.

نمونه های استفاده:

  • There are two locations: locA and locB.
  • 1 vehicle starting its route at locA and ending it at locA.
  • 1 pickup visit request at 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
    }
  }
}
  • There are three locations: locA, locB and locC.
  • 1 vehicle starting its route at locA and ending it at locB, using matrix "fast".
  • 1 vehicle starting its route at locB and ending it at locB, using matrix "slow".
  • 1 vehicle starting its route at locB and ending it at locB, using matrix "fast".
  • 1 pickup visit request at 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

Tags defining the sources of the duration and distance matrices; durationDistanceMatrices(i).rows(j) defines durations and distances from visits with tag durationDistanceMatrixSrcTags(j) to other visits in matrix i.

Tags correspond to VisitRequest.tags or Vehicle.start_tags . A given VisitRequest or Vehicle must match exactly one tag in this field. Note that a Vehicle 's source, destination and matrix tags may be the same; similarly a VisitRequest 's source and destination tags may be the same. All tags must be different and cannot be empty strings. If this field is not empty, then durationDistanceMatrices must not be empty.

durationDistanceMatrixDstTags[]

string

Tags defining the destinations of the duration and distance matrices; durationDistanceMatrices(i).rows(j).durations(k) (resp. durationDistanceMatrices(i).rows(j).meters(k)) defines the duration (resp. the distance) of the travel from visits with tag durationDistanceMatrixSrcTags(j) to visits with tag durationDistanceMatrixDstTags(k) in matrix i.

Tags correspond to VisitRequest.tags or Vehicle.start_tags . A given VisitRequest or Vehicle must match exactly one tag in this field. Note that a Vehicle 's source, destination and matrix tags may be the same; similarly a VisitRequest 's source and destination tags may be the same. All tags must be different and cannot be empty strings. If this field is not empty, then durationDistanceMatrices must not be empty.

transitionAttributes[]

object ( TransitionAttributes )

Transition attributes added to the model.

shipmentTypeIncompatibilities[]

object ( ShipmentTypeIncompatibility )

Sets of incompatible shipment_types (see ShipmentTypeIncompatibility ).

shipmentTypeRequirements[]

object ( ShipmentTypeRequirement )

Sets of shipmentType requirements (see ShipmentTypeRequirement ).

precedenceRules[]

object ( PrecedenceRule )

Set of precedence rules which must be enforced in the model.

maxActiveVehicles

integer

Constrains the maximum number of active vehicles. A vehicle is active if its route performs at least one shipment. This can be used to limit the number of routes in the case where there are fewer drivers than vehicles and that the fleet of vehicles is heterogeneous. The optimization will then select the best subset of vehicles to use. Must be strictly positive.

حمل و نقل

The shipment of a single item, from one of its pickups to one of its deliveries. For the shipment to be considered as performed, a unique vehicle must visit one of its pickup locations (and decrease its spare capacities accordingly), then visit one of its delivery locations later on (and therefore re-increase its spare capacities accordingly).

نمایندگی 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

The user-defined display name of the shipment. It can be up to 63 characters long and may use UTF-8 characters.

pickups[]

object ( VisitRequest )

Set of pickup alternatives associated to the shipment. If not specified, the vehicle only needs to visit a location corresponding to the deliveries.

deliveries[]

object ( VisitRequest )

Set of delivery alternatives associated to the shipment. If not specified, the vehicle only needs to visit a location corresponding to the pickups.

loadDemands

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

Load demands of the shipment (for example weight, volume, number of pallets etc). The keys in the map should be identifiers describing the type of the corresponding load, ideally also including the units. For example: "weight_kg", "volume_gallons", "pallet_count", etc. If a given key does not appear in the map, the corresponding load is considered as null.

An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

allowedVehicleIndices[]

integer

The set of vehicles that may perform this shipment. If empty, all vehicles may perform it. Vehicles are given by their index in the ShipmentModel 's vehicles list.

costsPerVehicle[]

number

Specifies the cost that is incurred when this shipment is delivered by each vehicle. If specified, it must have EITHER:

  • the same number of elements as costsPerVehicleIndices . costsPerVehicle[i] corresponds to vehicle costsPerVehicleIndices[i] of the model.
  • the same number of elements as there are vehicles in the model. The i-th element corresponds to vehicle #i of the model.

These costs must be in the same unit as penaltyCost and must not be negative. Leave this field empty, if there are no such costs.

costsPerVehicleIndices[]

integer

Indices of the vehicles to which costsPerVehicle applies. If non-empty, it must have the same number of elements as costsPerVehicle . A vehicle index may not be specified more than once. If a vehicle is excluded from costsPerVehicleIndices , its cost is zero.

pickupToDeliveryAbsoluteDetourLimit

string ( Duration format)

Specifies the maximum absolute detour time compared to the shortest path from pickup to delivery. If specified, it must be nonnegative, and the shipment must contain at least a pickup and a delivery.

For example, let t be the shortest time taken to go from the selected pickup alternative directly to the selected delivery alternative. Then setting pickupToDeliveryAbsoluteDetourLimit enforces:

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

If both relative and absolute limits are specified on the same shipment, the more constraining limit is used for each possible pickup/delivery pair. As of 2017/10, detours are only supported when travel durations do not depend on vehicles.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

pickupToDeliveryTimeLimit

string ( Duration format)

Specifies the maximum duration from start of pickup to start of delivery of a shipment. If specified, it must be nonnegative, and the shipment must contain at least a pickup and a delivery. This does not depend on which alternatives are selected for pickup and delivery, nor on vehicle speed. This can be specified alongside maximum detour constraints: the solution will respect both specifications.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

shipmentType

string

Non-empty string specifying a "type" for this shipment. This feature can be used to define incompatibilities or requirements between shipment_types (see shipmentTypeIncompatibilities and shipmentTypeRequirements in ShipmentModel ).

Differs from visitTypes which is specified for a single visit: All pickup/deliveries belonging to the same shipment share the same shipmentType .

label

string

Specifies a label for this shipment. This label is reported in the response in the shipmentLabel of the corresponding ShipmentRoute.Visit .

ignore

boolean

If true, skip this shipment, but don't apply a penaltyCost .

Ignoring a shipment results in a validation error when there are any shipmentTypeRequirements in the model.

Ignoring a shipment that is performed in injectedFirstSolutionRoutes or injectedSolutionConstraint is permitted; the solver removes the related pickup/delivery visits from the performing route. precedenceRules that reference ignored shipments will also be ignored.

penaltyCost

number

If the shipment is not completed, this penalty is added to the overall cost of the routes. A shipment is considered completed if one of its pickup and delivery alternatives is visited. The cost may be expressed in the same unit used for all other cost-related fields in the model and must be positive.

IMPORTANT : If this penalty is not specified, it is considered infinite, ie the shipment must be completed.

pickupToDeliveryRelativeDetourLimit

number

Specifies the maximum relative detour time compared to the shortest path from pickup to delivery. If specified, it must be nonnegative, and the shipment must contain at least a pickup and a delivery.

For example, let t be the shortest time taken to go from the selected pickup alternative directly to the selected delivery alternative. Then setting pickupToDeliveryRelativeDetourLimit enforces:

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

If both relative and absolute limits are specified on the same shipment, the more constraining limit is used for each possible pickup/delivery pair. As of 2017/10, detours are only supported when travel durations do not depend on vehicles.

VisitRequest

Request for a visit which can be done by a vehicle: it has a geo-location (or two, see below), opening and closing times represented by time windows, and a service duration time (time spent by the vehicle once it has arrived to pickup or drop off goods).

نمایندگی 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
}
فیلدها
arrivalLocation

object ( LatLng )

The geo-location where the vehicle arrives when performing this VisitRequest . If the shipment model has duration distance matrices, arrivalLocation must not be specified.

arrivalWaypoint

object ( Waypoint )

The waypoint where the vehicle arrives when performing this VisitRequest . If the shipment model has duration distance matrices, arrivalWaypoint must not be specified.

departureLocation

object ( LatLng )

The geo-location where the vehicle departs after completing this VisitRequest . Can be omitted if it is the same as arrivalLocation . If the shipment model has duration distance matrices, departureLocation must not be specified.

departureWaypoint

object ( Waypoint )

The waypoint where the vehicle departs after completing this VisitRequest . Can be omitted if it is the same as arrivalWaypoint . If the shipment model has duration distance matrices, departureWaypoint must not be specified.

tags[]

string

Specifies tags attached to the visit request. Empty or duplicate strings are not allowed.

timeWindows[]

object ( TimeWindow )

Time windows which constrain the arrival time at a visit. Note that a vehicle may depart outside of the arrival time window, ie arrival time + duration do not need to be inside a time window. This can result in waiting time if the vehicle arrives before TimeWindow.start_time .

The absence of TimeWindow means that the vehicle can perform this visit at any time.

Time windows must be disjoint, ie no time window must overlap with or be adjacent to another, and they must be in increasing order.

costPerHourAfterSoftEndTime and softEndTime can only be set if there is a single time window.

duration

string ( Duration format)

Duration of the visit, ie time spent by the vehicle between arrival and departure (to be added to the possible waiting time; see timeWindows ).

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

cost

number

Cost to service this visit request on a vehicle route. This can be used to pay different costs for each alternative pickup or delivery of a shipment. This cost must be in the same unit as Shipment.penalty_cost and must not be negative.

loadDemands

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

Load demands of this visit request. This is just like Shipment.load_demands field, except that it only applies to this VisitRequest instead of the whole Shipment . The demands listed here are added to the demands listed in Shipment.load_demands .

An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

visitTypes[]

string

Specifies the types of the visit. This may be used to allocate additional time required for a vehicle to complete this visit (see Vehicle.extra_visit_duration_for_visit_type ).

A type can only appear once.

label

string

Specifies a label for this VisitRequest . This label is reported in the response as visitLabel in the corresponding ShipmentRoute.Visit .

LatLng

An object that represents a latitude/longitude pair. This is expressed as a pair of doubles to represent degrees latitude and degrees longitude. Unless specified otherwise, this object must conform to the WGS84 standard . Values must be within normalized ranges.

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

number

The latitude in degrees. It must be in the range [-90.0, +90.0].

longitude

number

The longitude in degrees. It must be in the range [-180.0, +180.0].

نقطه راه

Encapsulates a waypoint. Waypoints mark arrival and departure locations of VisitRequests, and start and end locations of Vehicles.

نمایندگی JSON
{
  "sideOfRoad": boolean,

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
فیلدها
sideOfRoad

boolean

اختیاری. Indicates that the location of this waypoint is meant to have a preference for the vehicle to stop at a particular side of road. When you set this value, the route will pass through the location so that the vehicle can stop at the side of road that the location is biased towards from the center of the road. This option doesn't work for the 'WALKING' travel mode.

Union field location_type . Different ways to represent a location. location_type can be only one of the following:
location

object ( Location )

A point specified using geographic coordinates, including an optional heading.

placeId

string

The POI Place ID associated with the waypoint.

مکان

Encapsulates a location (a geographic point, and an optional heading).

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

object ( LatLng )

The waypoint's geographic coordinates.

heading

integer

The compass heading associated with the direction of the flow of traffic. This value is used to specify the side of the road to use for pickup and drop-off. Heading values can be from 0 to 360, where 0 specifies a heading of due North, 90 specifies a heading of due East, etc.

TimeWindow

Time windows constrain the time of an event, such as the arrival time at a visit, or the start and end time of a vehicle.

Hard time window bounds, startTime and endTime , enforce the earliest and latest time of the event, such that startTime <= event_time <= endTime . The soft time window lower bound, softStartTime , expresses a preference for the event to happen at or after softStartTime by incurring a cost proportional to how long before softStartTime the event occurs. The soft time window upper bound, softEndTime , expresses a preference for the event to happen at or before softEndTime by incurring a cost proportional to how long after softEndTime the event occurs. startTime , endTime , softStartTime and softEndTime should be within the global time limits (see ShipmentModel.global_start_time and ShipmentModel.global_end_time ) and should respect:

  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)

The hard time window start time. If unspecified it will be set to ShipmentModel.global_start_time .

A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" .

endTime

string ( Timestamp format)

The hard time window end time. If unspecified it will be set to ShipmentModel.global_end_time .

A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" .

softStartTime

string ( Timestamp format)

The soft start time of the time window.

A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" .

softEndTime

string ( Timestamp format)

The soft end time of the time window.

A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" .

costPerHourBeforeSoftStartTime

number

A cost per hour added to other costs in the model if the event occurs before softStartTime, computed as:

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

This cost must be positive, and the field can only be set if softStartTime has been set.

costPerHourAfterSoftEndTime

number

A cost per hour added to other costs in the model if the event occurs after softEndTime , computed as:

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

This cost must be positive, and the field can only be set if softEndTime has been set.

وسیله نقلیه

Models a vehicle in a shipment problem. Solving a shipment problem will build a route starting from startLocation and ending at endLocation for this vehicle. A route is a sequence of visits (see 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

The user-defined display name of the vehicle. It can be up to 63 characters long and may use UTF-8 characters.

travelMode

enum ( TravelMode )

The travel mode which affects the roads usable by the vehicle and its speed. See also travelDurationMultiple .

routeModifiers

object ( RouteModifiers )

A set of conditions to satisfy that affect the way routes are calculated for the given vehicle.

startLocation

object ( LatLng )

Geographic location where the vehicle starts before picking up any shipments. If not specified, the vehicle starts at its first pickup. If the shipment model has duration and distance matrices, startLocation must not be specified.

startWaypoint

object ( Waypoint )

Waypoint representing a geographic location where the vehicle starts before picking up any shipments. If neither startWaypoint nor startLocation is specified, the vehicle starts at its first pickup. If the shipment model has duration and distance matrices, startWaypoint must not be specified.

endLocation

object ( LatLng )

Geographic location where the vehicle ends after it has completed its last VisitRequest . If not specified the vehicle's ShipmentRoute ends immediately when it completes its last VisitRequest . If the shipment model has duration and distance matrices, endLocation must not be specified.

endWaypoint

object ( Waypoint )

Waypoint representing a geographic location where the vehicle ends after it has completed its last VisitRequest . If neither endWaypoint nor endLocation is specified, the vehicle's ShipmentRoute ends immediately when it completes its last VisitRequest . If the shipment model has duration and distance matrices, endWaypoint must not be specified.

startTags[]

string

Specifies tags attached to the start of the vehicle's route.

Empty or duplicate strings are not allowed.

endTags[]

string

Specifies tags attached to the end of the vehicle's route.

Empty or duplicate strings are not allowed.

startTimeWindows[]

object ( TimeWindow )

Time windows during which the vehicle may depart its start location. They must be within the global time limits (see ShipmentModel.global_* fields). If unspecified, there is no limitation besides those global time limits.

Time windows belonging to the same repeated field must be disjoint, ie no time window can overlap with or be adjacent to another, and they must be in chronological order.

costPerHourAfterSoftEndTime and softEndTime can only be set if there is a single time window.

endTimeWindows[]

object ( TimeWindow )

Time windows during which the vehicle may arrive at its end location. They must be within the global time limits (see ShipmentModel.global_* fields). If unspecified, there is no limitation besides those global time limits.

Time windows belonging to the same repeated field must be disjoint, ie no time window can overlap with or be adjacent to another, and they must be in chronological order.

costPerHourAfterSoftEndTime and softEndTime can only be set if there is a single time window.

unloadingPolicy

enum ( UnloadingPolicy )

Unloading policy enforced on the vehicle.

loadLimits

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

Capacities of the vehicle (weight, volume, # of pallets for example). The keys in the map are the identifiers of the type of load, consistent with the keys of the Shipment.load_demands field. If a given key is absent from this map, the corresponding capacity is considered to be limitless.

An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

costPerHour

number

Vehicle costs: all costs add up and must be in the same unit as Shipment.penalty_cost .

Cost per hour of the vehicle route. This cost is applied to the total time taken by the route, and includes travel time, waiting time, and visit time. Using costPerHour instead of just costPerTraveledHour may result in additional latency.

costPerTraveledHour

number

Cost per traveled hour of the vehicle route. This cost is applied only to travel time taken by the route (ie, that reported in ShipmentRoute.transitions ), and excludes waiting time and visit time.

costPerKilometer

number

Cost per kilometer of the vehicle route. This cost is applied to the distance reported in the ShipmentRoute.transitions and does not apply to any distance implicitly traveled from the arrivalLocation to the departureLocation of a single VisitRequest .

fixedCost

number

Fixed cost applied if this vehicle is used to handle a shipment.

usedIfRouteIsEmpty

boolean

This field only applies to vehicles when their route does not serve any shipments. It indicates if the vehicle should be considered as used or not in this case.

If true, the vehicle goes from its start to its end location even if it doesn't serve any shipments, and time and distance costs resulting from its start --> end travel are taken into account.

Otherwise, it doesn't travel from its start to its end location, and no breakRule or delay (from TransitionAttributes ) are scheduled for this vehicle. In this case, the vehicle's ShipmentRoute doesn't contain any information except for the vehicle index and label.

routeDurationLimit

object ( DurationLimit )

Limit applied to the total duration of the vehicle's route. In a given OptimizeToursResponse , the route duration of a vehicle is the difference between its vehicleEndTime and vehicleStartTime .

travelDurationLimit

object ( DurationLimit )

Limit applied to the travel duration of the vehicle's route. In a given OptimizeToursResponse , the route travel duration is the sum of all its transitions.travel_duration .

routeDistanceLimit

object ( DistanceLimit )

Limit applied to the total distance of the vehicle's route. In a given OptimizeToursResponse , the route distance is the sum of all its transitions.travel_distance_meters .

extraVisitDurationForVisitType

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

Specifies a map from visitTypes strings to durations. The duration is time in addition to VisitRequest.duration to be taken at visits with the specified visitTypes . This extra visit duration adds cost if costPerHour is specified. Keys (ie visitTypes ) cannot be empty strings.

If a visit request has multiple types, a duration will be added for each type in the map.

An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

breakRule

object ( BreakRule )

Describes the break schedule to be enforced on this vehicle. If empty, no breaks will be scheduled for this vehicle.

label

string

Specifies a label for this vehicle. This label is reported in the response as the vehicleLabel of the corresponding ShipmentRoute .

ignore

boolean

If true, usedIfRouteIsEmpty must be false, and this vehicle will remain unused.

If a shipment is performed by an ignored vehicle in injectedFirstSolutionRoutes , it is skipped in the first solution but is free to be performed in the response.

If a shipment is performed by an ignored vehicle in injectedSolutionConstraint and any related pickup/delivery is constrained to remain on the vehicle (ie, not relaxed to level RELAX_ALL_AFTER_THRESHOLD ), it is skipped in the response. If a shipment has a non-empty allowedVehicleIndices field and all of the allowed vehicles are ignored, it is skipped in the response.

travelDurationMultiple

number

Specifies a multiplicative factor that can be used to increase or decrease travel times of this vehicle. For example, setting this to 2.0 means that this vehicle is slower and has travel times that are twice what they are for standard vehicles. This multiple does not affect visit durations. It does affect cost if costPerHour or costPerTraveledHour are specified. This must be in the range [0.001, 1000.0]. If unset, the vehicle is standard, and this multiple is considered 1.0.

WARNING: Travel times will be rounded to the nearest second after this multiple is applied but before performing any numerical operations, thus, a small multiple may result in a loss of precision.

See also extraVisitDurationForVisitType below.

TravelMode

Travel modes which can be used by vehicles.

These should be a subset of the Google Maps Platform Routes Preferred API travel modes, see: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode .

Enums
TRAVEL_MODE_UNSPECIFIED Unspecified travel mode, equivalent to DRIVING .
DRIVING Travel mode corresponding to driving directions (car, ...).
WALKING Travel mode corresponding to walking directions.

RouteModifiers

Encapsulates a set of optional conditions to satisfy when calculating vehicle routes. This is similar to RouteModifiers in the Google Maps Platform Routes Preferred API; see: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers .

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

boolean

Specifies whether to avoid toll roads where reasonable. Preference will be given to routes not containing toll roads. Applies only to motorized travel modes.

avoidHighways

boolean

Specifies whether to avoid highways where reasonable. Preference will be given to routes not containing highways. Applies only to motorized travel modes.

avoidFerries

boolean

Specifies whether to avoid ferries where reasonable. Preference will be given to routes not containing travel by ferries. Applies only to motorized travel modes.

avoidIndoor

boolean

اختیاری. Specifies whether to avoid navigating indoors where reasonable. Preference will be given to routes not containing indoor navigation. Applies only to the WALKING travel mode.

UnloadingPolicy

Policy on how a vehicle can be unloaded. Applies only to shipments having both a pickup and a delivery.

Other shipments are free to occur anywhere on the route independent of unloadingPolicy .

Enums
UNLOADING_POLICY_UNSPECIFIED Unspecified unloading policy; deliveries must just occur after their corresponding pickups.
LAST_IN_FIRST_OUT Deliveries must occur in reverse order of pickups
FIRST_IN_FIRST_OUT Deliveries must occur in the same order as pickups

LoadLimit

Defines a load limit applying to a vehicle, eg "this truck may only carry up to 3500 kg". See loadLimits .

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

string ( int64 format)

A soft limit of the load. See costPerUnitAboveSoftMax .

costPerUnitAboveSoftMax

number

If the load ever exceeds softMaxLoad along this vehicle's route, the following cost penalty applies (only once per vehicle): (load - softMaxLoad ) * costPerUnitAboveSoftMax . All costs add up and must be in the same unit as Shipment.penalty_cost .

startLoadInterval

object ( Interval )

The acceptable load interval of the vehicle at the start of the route.

endLoadInterval

object ( Interval )

The acceptable load interval of the vehicle at the end of the route.

maxLoad

string ( int64 format)

The maximum acceptable amount of load.

فاصله

Interval of acceptable load amounts.

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

string ( int64 format)

A minimum acceptable load. Must be ≥ 0. If they're both specified, min must be ≤ max .

max

string ( int64 format)

A maximum acceptable load. Must be ≥ 0. If unspecified, the maximum load is unrestricted by this message. If they're both specified, min must be ≤ max .

DurationLimit

A limit defining a maximum duration of the route of a vehicle. It can be either hard or soft.

When a soft limit field is defined, both the soft max threshold and its associated cost must be defined together.

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

string ( Duration format)

A hard limit constraining the duration to be at most maxDuration.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

softMaxDuration

string ( Duration format)

A soft limit not enforcing a maximum duration limit, but when violated makes the route incur a cost. This cost adds up to other costs defined in the model, with the same unit.

If defined, softMaxDuration must be nonnegative. If maxDuration is also defined, softMaxDuration must be less than maxDuration.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

quadraticSoftMaxDuration

string ( Duration format)

A soft limit not enforcing a maximum duration limit, but when violated makes the route incur a cost, quadratic in the duration. This cost adds up to other costs defined in the model, with the same unit.

If defined, quadraticSoftMaxDuration must be nonnegative. If maxDuration is also defined, quadraticSoftMaxDuration must be less than maxDuration , and the difference must be no larger than one day:

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

costPerHourAfterSoftMax

number

Cost per hour incurred if the softMaxDuration threshold is violated. The additional cost is 0 if the duration is under the threshold, otherwise the cost depends on the duration as follows:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

The cost must be nonnegative.

costPerSquareHourAfterQuadraticSoftMax

number

Cost per square hour incurred if the quadraticSoftMaxDuration threshold is violated.

The additional cost is 0 if the duration is under the threshold, otherwise the cost depends on the duration as follows:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

The cost must be nonnegative.

DistanceLimit

A limit defining a maximum distance which can be traveled. It can be either hard or soft.

If a soft limit is defined, both softMaxMeters and costPerKilometerAboveSoftMax must be defined and be nonnegative.

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

string ( int64 format)

A hard limit constraining the distance to be at most maxMeters. The limit must be nonnegative.

softMaxMeters

string ( int64 format)

A soft limit not enforcing a maximum distance limit, but when violated results in a cost which adds up to other costs defined in the model, with the same unit.

If defined softMaxMeters must be less than maxMeters and must be nonnegative.

costPerKilometerBelowSoftMax

number

Cost per kilometer incurred, increasing up to softMaxMeters , with formula:

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

This cost is not supported in routeDistanceLimit .

costPerKilometerAboveSoftMax

number

Cost per kilometer incurred if distance is above softMaxMeters limit. The additional cost is 0 if the distance is under the limit, otherwise the formula used to compute the cost is the following:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

The cost must be nonnegative.

BreakRule

Rules to generate time breaks for a vehicle (eg lunch breaks). A break is a contiguous period of time during which the vehicle remains idle at its current position and cannot perform any visit. A break may occur:

  • during the travel between two visits (which includes the time right before or right after a visit, but not in the middle of a visit), in which case it extends the corresponding transit time between the visits,
  • or before the vehicle start (the vehicle may not start in the middle of a break), in which case it does not affect the vehicle start time.
  • or after the vehicle end (ditto, with the vehicle end time).
نمایندگی JSON
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
فیلدها
breakRequests[]

object ( BreakRequest )

Sequence of breaks. See the BreakRequest message.

frequencyConstraints[]

object ( FrequencyConstraint )

Several FrequencyConstraint may apply. They must all be satisfied by the BreakRequest s of this BreakRule . See FrequencyConstraint .

BreakRequest

The sequence of breaks (ie their number and order) that apply to each vehicle must be known beforehand. The repeated BreakRequest s define that sequence, in the order in which they must occur. Their time windows ( earliestStartTime / latestStartTime ) may overlap, but they must be compatible with the order (this is checked).

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

string ( Timestamp format)

مورد نیاز. Lower bound (inclusive) on the start of the break.

A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" .

latestStartTime

string ( Timestamp format)

مورد نیاز. Upper bound (inclusive) on the start of the break.

A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z" .

minDuration

string ( Duration format)

مورد نیاز. Minimum duration of the break. Must be positive.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

FrequencyConstraint

One may further constrain the frequency and duration of the breaks specified above, by enforcing a minimum break frequency, such as "There must be a break of at least 1 hour every 12 hours". Assuming that this can be interpreted as "Within any sliding time window of 12h, there must be at least one break of at least one hour", that example would translate to the following FrequencyConstraint :

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

The timing and duration of the breaks in the solution will respect all such constraints, in addition to the time windows and minimum durations already specified in the BreakRequest .

A FrequencyConstraint may in practice apply to non-consecutive breaks. For example, the following schedule honors the "1h every 12h" example:

  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)

مورد نیاز. Minimum break duration for this constraint. Nonnegative. See description of FrequencyConstraint .

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

maxInterBreakDuration

string ( Duration format)

مورد نیاز. Maximum allowed span of any interval of time in the route that does not include at least partially a break of duration >= minBreakDuration . Must be positive.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

DurationDistanceMatrix

Specifies a duration and distance matrix from visit and vehicle start locations to visit and vehicle end locations.

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

object ( Row )

Specifies the rows of the duration and distance matrix. It must have as many elements as ShipmentModel.duration_distance_matrix_src_tags .

vehicleStartTag

string

Tag defining to which vehicles this duration and distance matrix applies. If empty, this applies to all vehicles, and there can only be a single matrix.

Each vehicle start must match exactly one matrix, ie exactly one of their startTags field must match the vehicleStartTag of a matrix (and of that matrix only).

All matrices must have a different vehicleStartTag .

ردیف

Specifies a row of the duration and distance matrix.

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

string ( Duration format)

Duration values for a given row. It must have as many elements as ShipmentModel.duration_distance_matrix_dst_tags .

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

meters[]

number

Distance values for a given row. If no costs or constraints refer to distances in the model, this can be left empty; otherwise it must have as many elements as durations .

TransitionAttributes

Specifies attributes of transitions between two consecutive visits on a route. Several TransitionAttributes may apply to the same transition: in that case, all extra costs add up and the strictest constraint or limit applies (following natural "AND" semantics).

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

string

Tags defining the set of (src->dst) transitions these attributes apply to.

A source visit or vehicle start matches iff its VisitRequest.tags or Vehicle.start_tags either contains srcTag or does not contain excludedSrcTag (depending on which of these two fields is non-empty).

excludedSrcTag

string

See srcTag . Exactly one of srcTag and excludedSrcTag must be non-empty.

dstTag

string

A destination visit or vehicle end matches iff its VisitRequest.tags or Vehicle.end_tags either contains dstTag or does not contain excludedDstTag (depending on which of these two fields is non-empty).

excludedDstTag

string

See dstTag . Exactly one of dstTag and excludedDstTag must be non-empty.

cost

number

Specifies a cost for performing this transition. This is in the same unit as all other costs in the model and must not be negative. It is applied on top of all other existing costs.

costPerKilometer

number

Specifies a cost per kilometer applied to the distance traveled while performing this transition. It adds up to any Vehicle.cost_per_kilometer specified on vehicles.

distanceLimit

object ( DistanceLimit )

Specifies a limit on the distance traveled while performing this transition.

As of 2021/06, only soft limits are supported.

delay

string ( Duration format)

Specifies a delay incurred when performing this transition.

This delay always occurs after finishing the source visit and before starting the destination visit.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

ShipmentTypeIncompatibility

Specifies incompatibilties between shipments depending on their shipmentType. The appearance of incompatible shipments on the same route is restricted based on the incompatibility mode.

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

string

List of incompatible types. Two shipments having different shipment_types among those listed are "incompatible".

incompatibilityMode

enum ( IncompatibilityMode )

Mode applied to the incompatibility.

IncompatibilityMode

Modes defining how the appearance of incompatible shipments are restricted on the same route.

Enums
INCOMPATIBILITY_MODE_UNSPECIFIED Unspecified incompatibility mode. This value should never be used.
NOT_PERFORMED_BY_SAME_VEHICLE In this mode, two shipments with incompatible types can never share the same vehicle.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

For two shipments with incompatible types with the NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY incompatibility mode:

  • If both are pickups only (no deliveries) or deliveries only (no pickups), they cannot share the same vehicle at all.
  • If one of the shipments has a delivery and the other a pickup, the two shipments can share the same vehicle iff the former shipment is delivered before the latter is picked up.

ShipmentTypeRequirement

Specifies requirements between shipments based on their shipmentType. The specifics of the requirement are defined by the requirement mode.

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

string

List of alternative shipment types required by the dependentShipmentTypes .

dependentShipmentTypes[]

string

All shipments with a type in the dependentShipmentTypes field require at least one shipment of type requiredShipmentTypeAlternatives to be visited on the same route.

NOTE: Chains of requirements such that a shipmentType depends on itself are not allowed.

requirementMode

enum ( RequirementMode )

Mode applied to the requirement.

RequirementMode

Modes defining the appearance of dependent shipments on a route.

Enums
REQUIREMENT_MODE_UNSPECIFIED Unspecified requirement mode. This value should never be used.
PERFORMED_BY_SAME_VEHICLE In this mode, all "dependent" shipments must share the same vehicle as at least one of their "required" shipments.
IN_SAME_VEHICLE_AT_PICKUP_TIME

With the IN_SAME_VEHICLE_AT_PICKUP_TIME mode, all "dependent" shipments need to have at least one "required" shipment on their vehicle at the time of their pickup.

A "dependent" shipment pickup must therefore have either:

  • A delivery-only "required" shipment delivered on the route after, or
  • A "required" shipment picked up on the route before it, and if the "required" shipment has a delivery, this delivery must be performed after the "dependent" shipment's pickup.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Same as before, except the "dependent" shipments need to have a "required" shipment on their vehicle at the time of their delivery .

PrecedenceRule

A precedence rule between two events (each event is the pickup or the delivery of a shipment): the "second" event has to start at least offsetDuration after "first" has started.

Several precedences can refer to the same (or related) events, eg, "pickup of B happens after delivery of A" and "pickup of C happens after pickup of B".

Furthermore, precedences only apply when both shipments are performed and are otherwise ignored.

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

boolean

Indicates if the "first" event is a delivery.

secondIsDelivery

boolean

Indicates if the "second" event is a delivery.

offsetDuration

string ( Duration format)

The offset between the "first" and "second" event. می تواند منفی باشد.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

firstIndex

integer

Shipment index of the "first" event. This field must be specified.

secondIndex

integer

Shipment index of the "second" event. This field must be specified.