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` <= `softStartTime` <= `endTime` and
  0 <= `startTime` <= `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),
  "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 ببینید.

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 آن است.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 حالت سفر مربوط به مسیرهای پیاده روی.

سیاست تخلیه

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

سایر محموله ها در هر نقطه از مسیر مستقل از 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,
  "costPerKilometerAboveSoftMax": number
}
زمینه های
maxMeters

string ( int64 format)

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

softMaxMeters

string ( int64 format)

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

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

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" .

محدودیت فرکانس

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

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

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

یک FrequencyConstraint ممکن است در عمل برای وقفه های غیر متوالی اعمال شود. به عنوان مثال، برنامه زیر به مثال "1 ساعت هر 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" .

Duration DistanceMatrix

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

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

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

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

string

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

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

excludedSrcTag

string

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

dstTag

string

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

excludedDstTag

string

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

cost

number

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

costPerKilometer

number

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

distanceLimit

object ( DistanceLimit )

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

از سال 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 )

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

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 پس از تحویل A اتفاق می افتد" و "انتخاب 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

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