ShipmentRoute

مسیر یک وسیله نقلیه را می توان در امتداد محور زمانی تجزیه کرد (فرض می کنیم n بازدید وجود دارد):

  |            |            |          |       |  T[2], |        |      |
  | Transition |  Visit #0  |          |       |  V[2], |        |      |
  |     #0     |    aka     |   T[1]   |  V[1] |  ...   | V[n-1] | T[n] |
  |  aka T[0]  |    V[0]    |          |       | V[n-2],|        |      |
  |            |            |          |       | T[n-1] |        |      |
  ^            ^            ^          ^       ^        ^        ^      ^
vehicle    V[0].start   V[0].end     V[1].   V[1].    V[n].    V[n]. vehicle
 start     (arrival)   (departure)   start   end      start    end     end

توجه داشته باشید که ما بین:

  • "رویدادهای وقت شناس"، مانند شروع و پایان وسیله نقلیه و شروع و پایان هر بازدید (معروف به ورود و خروج). آنها در یک ثانیه مشخص رخ می دهند.
  • "فاصله های زمانی"، مانند خود بازدیدها، و انتقال بین بازدیدها. اگرچه فواصل زمانی گاهی اوقات می‌توانند مدت زمان صفر داشته باشند، یعنی شروع و پایان در یک ثانیه یکسان باشند، اما اغلب دارای مدت زمان مثبت هستند.

متغیرها:

  • اگر n بازدید وجود داشته باشد، n+1 انتقال وجود دارد.
  • یک بازدید همیشه با یک انتقال قبل از آن (همان شاخص) و یک انتقال بعد از آن (شاخص + 1) احاطه شده است.
  • استارت وسیله نقلیه همیشه با انتقال شماره 0 دنبال می شود.
  • همیشه قبل از پایان وسیله نقلیه انتقال #n وجود دارد.

با زوم کردن، در اینجا چیزی است که در طول یک Transition و یک Visit اتفاق می افتد:

---+-------------------------------------+-----------------------------+-->
   |           TRANSITION[i]             |           VISIT[i]          |
   |                                     |                             |
   |  * TRAVEL: the vehicle moves from   |      PERFORM the visit:     |
   |    VISIT[i-1].departure_location to |                             |
   |    VISIT[i].arrival_location, which |  * Spend some time:         |
   |    takes a given travel duration    |    the "visit duration".    |
   |    and distance                     |                             |
   |                                     |  * Load or unload           |
   |  * BREAKS: the driver may have      |    some quantities from the |
   |    breaks (e.g. lunch break).       |    vehicle: the "demand".   |
   |                                     |                             |
   |  * WAIT: the driver/vehicle does    |                             |
   |    nothing. This can happen for     |                             |
   |    many reasons, for example when   |                             |
   |    the vehicle reaches the next     |                             |
   |    event's destination before the   |                             |
   |    start of its time window         |                             |
   |                                     |                             |
   |  * DELAY: *right before* the next   |                             |
   |    arrival. E.g. the vehicle and/or |                             |
   |    driver spends time unloading.    |                             |
   |                                     |                             |
---+-------------------------------------+-----------------------------+-->
   ^                                     ^                             ^
V[i-1].end                           V[i].start                    V[i].end

در نهایت، در اینجا آمده است که چگونه می توان سفر، وقفه، تاخیر و انتظار را در طول یک انتقال مرتب کرد.

  • آنها با هم تداخل ندارند.
  • تأخیر منحصر به فرد است و باید یک دوره زمانی پیوسته درست قبل از بازدید بعدی (یا پایان وسیله نقلیه) باشد. بنابراین، دانستن مدت زمان تاخیر برای دانستن زمان شروع و پایان آن کافی است.
  • BREAKS دوره های زمانی پیوسته و بدون همپوشانی هستند. پاسخ زمان شروع و مدت زمان هر استراحت را مشخص می کند.
  • TRAVEL و WAIT «قابل پیشگیری» هستند: می‌توانند چندین بار در طول این انتقال قطع شوند. مشتریان می توانند فرض کنند که سفر "در اسرع وقت" انجام می شود و "انتظار" زمان باقی مانده را پر می کند.

مثال (پیچیده):

                               TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
  ||     |       |           |       |           |         |         ||
  ||  T  |   B   |     T     |       |     B     |         |    D    ||
  ||  r  |   r   |     r     |   W   |     r     |    W    |    e    ||
  ||  a  |   e   |     a     |   a   |     e     |    a    |    l    ||
  ||  v  |   a   |     v     |   i   |     a     |    i    |    a    ||
  ||  e  |   k   |     e     |   t   |     k     |    t    |    y    ||
  ||  l  |       |     l     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
نمایندگی JSON
{
  "vehicleIndex": integer,
  "vehicleLabel": string,
  "vehicleStartTime": string,
  "vehicleEndTime": string,
  "visits": [
    {
      object (Visit)
    }
  ],
  "transitions": [
    {
      object (Transition)
    }
  ],
  "hasTrafficInfeasibilities": boolean,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "breaks": [
    {
      object (Break)
    }
  ],
  "metrics": {
    object (AggregatedMetrics)
  },
  "routeCosts": {
    string: number,
    ...
  },
  "routeTotalCost": number
}
زمینه های
vehicleIndex

integer

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

vehicleLabel

string

برچسب وسیله نقلیه ای که این مسیر را انجام می دهد، در صورت مشخص شدن، برابر با ShipmentModel.vehicles(vehicleIndex).label .

vehicleStartTime

string ( Timestamp format)

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

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

vehicleEndTime

string ( Timestamp format)

زمانی که وسیله نقلیه مسیر خود را به پایان می رساند.

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

visits[]

object ( Visit )

دنباله ای از بازدیدها که نشان دهنده یک مسیر است. visits[i] i امین بازدید در مسیر است. اگر این قسمت خالی باشد، وسیله نقلیه بلااستفاده محسوب می شود.

transitions[]

object ( Transition )

لیست مرتب شده انتقالات مسیر.

hasTrafficInfeasibilities

boolean

وقتی OptimizeToursRequest.consider_road_traffic ، روی true تنظیم می شود، این فیلد نشان می دهد که ناهماهنگی در زمان بندی مسیر با استفاده از تخمین های مدت سفر مبتنی بر ترافیک پیش بینی می شود. ممکن است زمان کافی برای تکمیل سفرهای تنظیم‌شده بر اساس ترافیک، تأخیرها، و وقفه‌های بین بازدیدها، قبل از اولین بازدید یا بعد از آخرین بازدید وجود نداشته باشد، در حالی که باز هم پنجره‌های زمانی بازدید و خودرو را برآورده می‌کند. مثلا،

  startTime(previous_visit) + duration(previous_visit) +
  travelDuration(previous_visit, next_visit) > startTime(next_visit)

رسیدن به next_visit به دلیل افزایش تخمین زمان سفر travelDuration(previous_visit, next_visit) به دلیل ترافیک، احتمالا دیرتر از پنجره زمانی فعلی آن اتفاق می افتد. همچنین، ممکن است به دلیل افزایش تخمین‌های زمان سفر و محدودیت‌های پنجره زمانی بازدید یا استراحت، یک استراحت با یک بازدید همپوشانی داشته باشد.

routePolyline

object ( EncodedPolyline )

نمایش چند خطی رمزگذاری شده مسیر. این فیلد فقط در صورتی پر می شود که OptimizeToursRequest.populate_polylines روی true تنظیم شده باشد.

breaks[]

object ( Break )

استراحت های برنامه ریزی شده برای وسیله نقلیه ای که این مسیر را انجام می دهد. توالی breaks بازه‌های زمانی را نشان می‌دهد که هر کدام از startTime مربوطه شروع می‌شوند و ثانیه‌های duration می‌کشند.

metrics

object ( AggregatedMetrics )

معیارهای مدت، مسافت و بار برای این مسیر. فیلدهای AggregatedMetrics در تمام ShipmentRoute.transitions یا ShipmentRoute.visits ، بسته به زمینه، خلاصه می‌شوند.

routeCosts

map (key: string, value: number)

هزینه مسیر، تفکیک شده بر اساس فیلدهای درخواست مربوط به هزینه. کلیدها مسیرهای اولیه هستند، نسبت به ورودی OptimizeToursRequest، به عنوان مثال "model.shipments.pickups.cost"، و مقادیر کل هزینه تولید شده توسط فیلد هزینه مربوطه هستند که در کل مسیر جمع می شوند. به عبارت دیگر، هزینه‌ها ["model.shipments.picups.cost"] مجموع تمام هزینه‌های دریافت در طول مسیر است. تمام هزینه‌های تعریف‌شده در مدل در اینجا به‌جز هزینه‌های مربوط به TransitionAttributes که فقط به صورت تجمیع شده از سال 2022/01 گزارش شده‌اند، در اینجا گزارش می‌شوند.

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

routeTotalCost

number

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

بازدید کنید

بازدیدی که در طول یک مسیر انجام شد. این بازدید مربوط به تحویل یا تحویل یک Shipment است.

نمایندگی JSON
{
  "shipmentIndex": integer,
  "isPickup": boolean,
  "visitRequestIndex": integer,
  "startTime": string,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "detour": string,
  "shipmentLabel": string,
  "visitLabel": string
}
زمینه های
shipmentIndex

integer

فهرست فیلد shipments در مبدا ShipmentModel .

isPickup

boolean

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

visitRequestIndex

integer

نمایه VisitRequest در قسمت تحویل یا تحویل Shipment (به isPickup مراجعه کنید).

startTime

string ( Timestamp format)

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

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

loadDemands

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

کل تقاضای بار بازدید به عنوان مجموع محموله و درخواست بازدید loadDemands . اگر بازدید به صورت تحویل باشد، مقادیر منفی هستند. تقاضاها برای انواع مشابه Transition.loads گزارش می شوند (به این قسمت مراجعه کنید).

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

detour

string ( Duration format)

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

startTime(delivery) - startTime(pickup)
- (duration(pickup) + travel duration from the pickup location
to the delivery location).

در غیر این صورت، از startLocation وسیله نقلیه محاسبه می شود و برابر است با:

startTime - vehicleStartTime - travel duration from
the vehicle's `startLocation` to the visit.

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

shipmentLabel

string

کپی مربوطه Shipment.label , در صورتی که در Shipment مشخص شده باشد .

visitLabel

string

کپی از VisitRequest.label مربوطه، اگر در VisitRequest مشخص شده باشد.

انتقال

انتقال بین دو رویداد در مسیر. توضیحات ShipmentRoute را ببینید.

اگر وسیله نقلیه دارای startLocation و/یا endLocation نباشد، معیارهای سفر مربوطه 0 است.

نمایندگی JSON
{
  "travelDuration": string,
  "travelDistanceMeters": number,
  "trafficInfoUnavailable": boolean,
  "delayDuration": string,
  "breakDuration": string,
  "waitDuration": string,
  "totalDuration": string,
  "startTime": string,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "vehicleLoads": {
    string: {
      object (VehicleLoad)
    },
    ...
  }
}
زمینه های
travelDuration

string ( Duration format)

مدت زمان سفر در این انتقال.

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

travelDistanceMeters

number

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

trafficInfoUnavailable

boolean

هنگامی که ترافیک از طریق OptimizeToursRequest.consider_road_traffic درخواست می شود و اطلاعات ترافیک برای یک Transition بازیابی نمی شود، این بولی روی true تنظیم می شود. این ممکن است موقتی (سکسکه نادر در سرورهای ترافیک بیدرنگ) یا دائمی باشد (داده ای برای این مکان وجود ندارد).

delayDuration

string ( Duration format)

مجموع مدت زمان تاخیر اعمال شده برای این انتقال. در صورت وجود، تأخیر دقیقاً delayDuration شروع می‌شود. مدت چند ثانیه قبل از رویداد بعدی (بازدید یا پایان وسیله نقلیه). TransitionAttributes.delay را ببینید.

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

breakDuration

string ( Duration format)

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

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

waitDuration

string ( Duration format)

زمان صرف شده در انتظار در طول این انتقال. مدت زمان انتظار مربوط به زمان بیکاری است و زمان استراحت را شامل نمی شود. همچنین توجه داشته باشید که این زمان انتظار ممکن است به چندین بازه غیر پیوسته تقسیم شود.

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

totalDuration

string ( Duration format)

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

  • بازدید بعدی startTime (یا vehicleEndTime اگر این آخرین انتقال باشد) - startTime این انتقال ;
  • اگر ShipmentRoute.has_traffic_infeasibilities نادرست باشد، موارد زیر نیز صادق است: `totalDuration = travelDuration + delayDuration
  • breakDuration + WaitDuration`.

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

startTime

string ( Timestamp format)

زمان شروع این انتقال

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

routePolyline

object ( EncodedPolyline )

نمایش چند خطی کدگذاری شده مسیری که در طول انتقال دنبال شد. این فیلد فقط در صورتی پر می شود که populateTransitionPolylines روی true تنظیم شده باشد.

vehicleLoads

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

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

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

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

کدگذاری پلی لاین

نمایش کدگذاری شده یک چند خط. اطلاعات بیشتر در مورد کدگذاری چند خطی را می‌توانید در اینجا بیابید: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding .

نمایندگی JSON
{
  "points": string
}
زمینه های
points

string

رشته ای که نقاط رمزگذاری شده چند خط را نشان می دهد.

زنگ تفريح

داده هایی که اجرای یک شکست را نشان می دهد.

نمایندگی JSON
{
  "startTime": string,
  "duration": string
}
زمینه های
startTime

string ( Timestamp format)

زمان شروع استراحت

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

duration

string ( Duration format)

مدت زمان استراحت.

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