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

สุดท้ายนี้ คุณสามารถจัดเตรียม TRAVEL, BREAKS, DELAY และ WAIT ระหว่างการเปลี่ยนผ่านนี้

  • โดยจะไม่ซ้อนทับกัน
  • ซึ่งระยะเวลาดังกล่าวไม่ซ้ำกันและต้องเป็นระยะเวลาต่อเนื่องกันก่อนการเข้าชมครั้งถัดไป (หรือสิ้นสุดยานพาหนะ) ดังนั้น การทราบระยะเวลาหน่วงเวลาเพื่อให้ทราบเวลาเริ่มต้นและสิ้นสุดก็เพียงพอแล้ว
  • 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" โดยมีความละเอียดระดับนาโนวินาทีและมีเลขเศษส่วนสูงสุด 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] คือการเข้าชมครั้งที่ 1 ในเส้นทาง หากช่องนี้ว่างเปล่า ระบบจะถือว่ายานพาหนะไม่ได้ใช้

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)

ค่าใช้จ่ายของเส้นทางแยกตามช่องคำขอที่เกี่ยวข้องกับค่าใช้จ่าย คีย์ต่างๆ คือเส้นทางโปรโตซึ่งสัมพันธ์กับ OptimizeToursRequest ของอินพุต เช่น "model.shipments.pickups.cost" และค่าเหล่านี้คือค่าใช้จ่ายทั้งหมดที่เกิดขึ้นจากช่องค่าใช้จ่ายที่เกี่ยวข้อง ซึ่งรวมจากเส้นทางทั้งหมด กล่าวคือ cost["model.shipments.pickups.cost"] คือผลรวมของค่าใช้จ่ายการรับสินค้าทั้งหมดตลอดเส้นทาง ระบบจะรายงานค่าใช้จ่ายทั้งหมดที่กำหนดไว้ในโมเดลอย่างละเอียดที่นี่ ยกเว้นค่าใช้จ่ายที่เกี่ยวข้องกับ TransitionAttributes ซึ่งจะรายงานแบบรวมข้อมูล ณ วันที่ 1/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"