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, DELAY และ WAIT ระหว่างการเปลี่ยน

  • และไม่ซ้อนทับกัน
  • {5} เป็นข้อมูลที่ไม่ซ้ำกันและต้องเป็นช่วงเวลาต่อเนื่องกันก่อนการเข้าชมครั้งถัดไป (หรือจุดสิ้นสุดยานพาหนะ) ดังนั้น การรู้ระยะเวลาความล่าช้าของเวลาเริ่มต้นและสิ้นสุดก็เพียงพอแล้ว
  • BREAKS เป็นช่วงเวลาที่ต่อเนื่องและไม่ซ้อนทับกัน การตอบกลับจะระบุเวลาเริ่มต้นและระยะเวลาของช่วงพักแต่ละช่วง
  • "การเดินทาง" และ "การรอ" เป็นแบบ "จองล่วงหน้าได้" ซึ่งอาจมีการขัดจังหวะหลายครั้งในช่วงการเปลี่ยนผ่านนี้ ลูกค้าจะสันนิษฐานได้ว่าการเดินทางจะเกิดขึ้น "โดยเร็วที่สุด" และ "รอ" จะเติมเวลาที่เหลือ

ตัวอย่าง (ที่ซับซ้อน)

                               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" ที่มีความละเอียดระดับนาโนวินาทีและมีตัวเลขที่เป็นเศษส่วนได้สูงสุด 9 หลัก ตัวอย่าง: "2014-10-02T15:01:23Z" และ "2014-10-02T15:01:23.045123456Z"

vehicleEndTime

string (Timestamp format)

เวลาที่ยานพาหนะสิ้นสุดเส้นทาง

การประทับเวลาจะอยู่ในรูปแบบ RFC3339 UTC "Zulu" ที่มีความละเอียดระดับนาโนวินาทีและมีตัวเลขที่เป็นเศษส่วนได้สูงสุด 9 หลัก ตัวอย่าง: "2014-10-02T15:01:23Z" และ "2014-10-02T15:01:23.045123456Z"

visits[]

object (Visit)

ลำดับการเข้าชมที่แสดงเส้นทาง การเข้าชม[i] คือการเข้าชมครั้งที่ i ในเส้นทาง หากช่องนี้เว้นว่างไว้ ระบบจะถือว่ายานพาหนะไม่มีการใช้งาน

transitions[]

object (Transition)

เรียงลำดับรายการของการเปลี่ยนสำหรับเส้นทาง

hasTrafficInfeasibilities

boolean

เมื่อOptimizeToursRequest.consider_road_traffic ตั้งค่าเป็น "จริง" ฟิลด์นี้จะคาดการณ์ความไม่สอดคล้องกันของระยะเวลาของเส้นทางโดยใช้ค่าประมาณระยะเวลาการเดินทางที่อิงตามการเข้าชม อาจมีเวลาไม่เพียงพอที่จะเดินทางที่ปรับตามสภาพการจราจร ความล่าช้า และช่วงพักระหว่างการเดินทาง ก่อนการเข้าชมครั้งแรก หรือหลังการเยี่ยมชมครั้งล่าสุด ในขณะที่ยังคงเป็นไปตามกรอบเวลาการเยี่ยมชมและกรอบเวลาของยานพาหนะ ตัวอย่างเช่น

  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 เป็น "จริง" เท่านั้น

breaks[]

object (Break)

หยุดพักที่กำหนดเวลาไว้สำหรับยานพาหนะที่วิ่งเส้นทางนี้ ลำดับ breaks แสดงถึงช่วงเวลา โดยแต่ละช่วงจะเริ่มที่ startTime ที่สอดคล้องกันและนาน duration วินาที

metrics

object (AggregatedMetrics)

เมตริกระยะเวลา ระยะทาง และโหลดสำหรับเส้นทางนี้ ช่องของ AggregatedMetrics จะรวมมาจาก ShipmentRoute.transitions หรือ ShipmentRoute.visits ทั้งหมด ขึ้นอยู่กับบริบท

routeCosts

map (key: string, value: number)

ค่าใช้จ่ายของเส้นทาง แยกตามช่องคำขอที่เกี่ยวข้องกับค่าใช้จ่าย คีย์คือเส้นทาง Proto ซึ่งสัมพันธ์กับอินพุต OptimizeToursRequest เช่น "model.shipments.pickups.cost" และค่าเหล่านี้คือค่าใช้จ่ายทั้งหมดที่สร้างขึ้นจากช่องค่าใช้จ่ายที่เกี่ยวข้อง ซึ่งรวบรวมจากทั้งเส้นทาง หรืออีกนัยหนึ่งคือ ต้นทุน ["model.shipments.pickups.cost"] คือผลรวมของต้นทุนในการรับสินค้าทั้งหมดตลอดเส้นทาง ค่าใช้จ่ายทั้งหมดที่กำหนดไว้ในโมเดลจะรายงานอย่างละเอียดที่นี่ ยกเว้นค่าใช้จ่ายที่เกี่ยวข้องกับแอตทริบิวต์การเปลี่ยน ซึ่งจะรายงานแบบรวม ณ วันที่ 01/2022 เท่านั้น

ออบเจ็กต์ที่มีรายการคู่ "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" ที่มีความละเอียดระดับนาโนวินาทีและมีตัวเลขที่เป็นเศษส่วนได้สูงสุด 9 หลัก ตัวอย่าง: "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.

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

shipmentLabel

string

สำเนาของ Shipment.label ที่เกี่ยวข้อง หากระบุไว้ใน Shipment

visitLabel

string

สำเนาของ VisitRequest.label ที่เกี่ยวข้อง หากระบุไว้ใน VisitRequest

ทรานซิชัน

การเปลี่ยนระหว่าง 2 เหตุการณ์ในเส้นทาง ดูคำอธิบายของ 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)

ระยะเวลาเดินทางในช่วงการเปลี่ยนผ่านนี้

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

travelDistanceMeters

number

ระยะทางที่เดินทางในช่วงการเปลี่ยนผ่าน

trafficInfoUnavailable

boolean

เมื่อมีการขอการรับส่งข้อมูลผ่าน OptimizeToursRequest.consider_road_traffic และไม่สามารถเรียกข้อมูลการเข้าชมสำหรับ Transition ได้ บูลีนนี้จะตั้งค่าเป็น "จริง" ซึ่งอาจเป็นชั่วคราว (เกิดข้อขัดข้องน้อยในเซิร์ฟเวอร์การรับส่งข้อมูลแบบเรียลไทม์) หรือถาวร (ไม่มีข้อมูลสำหรับตำแหน่งนี้)

delayDuration

string (Duration format)

ผลรวมของระยะเวลาล่าช้าที่ใช้กับการเปลี่ยนนี้ หากมี ความล่าช้าจะเริ่มต้นตรง delayDuration วินาทีก่อนเหตุการณ์ถัดไป (การเข้าชมหรือจุดสิ้นสุดของยานพาหนะ) ดู TransitionAttributes.delay

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

breakDuration

string (Duration format)

ผลรวมของระยะเวลาของช่วงพักที่เกิดขึ้นระหว่างการเปลี่ยนนี้ หากมี รายละเอียดเกี่ยวกับเวลาเริ่มต้นและระยะเวลาของช่วงพักแต่ละครั้งจะเก็บไว้ใน ShipmentRoute.breaks

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

waitDuration

string (Duration format)

เวลาที่รอในระหว่างการเปลี่ยนนี้ ระยะเวลารอจะสอดคล้องกับเวลาที่ไม่มีการใช้งานและไม่รวมเวลาพัก โปรดทราบว่าเวลารอนี้อาจแบ่งออกเป็นช่วงเวลาที่ไม่ต่อเนื่องกันหลายช่วง

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

totalDuration

string (Duration format)

ระยะเวลารวมของการเปลี่ยนรุ่นที่ให้บริการเพื่อความสะดวก ซึ่งเท่ากับ:

  • เข้าชม startTime ครั้งถัดไป (หรือ vehicleEndTime หากเป็นการเปลี่ยนครั้งสุดท้าย) - startTime ของการเปลี่ยนนี้
  • หาก ShipmentRoute.has_traffic_infeasibilities เป็นเท็จ จะมีการระงับ `totalDuration = travelDuration + delayDuration เพิ่มเติม
  • breakDuration +waitDuration`

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"

startTime

string (Timestamp format)

เวลาเริ่มต้นของการเปลี่ยนแปลงนี้

การประทับเวลาจะอยู่ในรูปแบบ RFC3339 UTC "Zulu" ที่มีความละเอียดระดับนาโนวินาทีและมีตัวเลขที่เป็นเศษส่วนได้สูงสุด 9 หลัก ตัวอย่าง: "2014-10-02T15:01:23Z" และ "2014-10-02T15:01:23.045123456Z"

routePolyline

object (EncodedPolyline)

การแสดงเส้นประกอบที่เข้ารหัสของเส้นทางที่เกิดขึ้นตามการเปลี่ยนแปลง ช่องนี้จะมีการป้อนข้อมูลเมื่อตั้งค่า populateTransitionPolylines เป็น "จริง" เท่านั้น

vehicleLoads

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

การขนย้ายยานพาหนะในช่วงการเปลี่ยนผ่านนี้ สำหรับแต่ละประเภทที่ปรากฏใน Vehicle.load_limits ของยานพาหนะนี้ หรือที่มี Shipment.load_demands ไม่เท่ากับ 0 ในการจัดส่งบางรายการที่ดำเนินการบนเส้นทางนี้

การโหลดในระหว่างการเปลี่ยนครั้งแรกคือการโหลดเริ่มต้นของเส้นทางพาหนะ จากนั้นหลังจากการเข้าชมแต่ละครั้ง ระบบจะเพิ่มหรือลบ loadDemands ของการเข้าชมเพื่อให้มีการโหลดการเปลี่ยนแปลงครั้งถัดไป ทั้งนี้ขึ้นอยู่กับว่าการเข้าชมนั้นเป็นการมารับที่ร้านหรือจัดส่ง

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่าง: { "name": "wrench", "mass": "1.3kg", "count": "3" }

EncodedPolyline

การแสดงโพลีไลน์ที่เข้ารหัส ดูข้อมูลเพิ่มเติมเกี่ยวกับการเข้ารหัสแบบโพลีไลน์ได้ที่ 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" ที่มีความละเอียดระดับนาโนวินาทีและมีตัวเลขที่เป็นเศษส่วนได้สูงสุด 9 หลัก ตัวอย่าง: "2014-10-02T15:01:23Z" และ "2014-10-02T15:01:23.045123456Z"

duration

string (Duration format)

ระยะเวลาของช่วงพัก

ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" เช่น "3.5s"