Package google.maps.routeoptimization.v1

ดัชนี

RouteOptimization

บริการสำหรับการเพิ่มประสิทธิภาพการทัวร์ชมยานพาหนะ

ความถูกต้องของฟิลด์บางประเภทมีดังนี้

  • google.protobuf.Timestamp
    • เวลาอยู่ในเวลา Unix: วินาทีตั้งแต่ 1970-01-01T00:00:00+00:00
    • วินาทีต้องเป็นตัวเลข [0, 253402300799] เช่น ใน [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00]
    • ต้องตั้งค่านาโนหรือตั้งค่าเป็น 0
  • google.protobuf.Duration
    • วินาทีต้องเป็นตัวเลข [0, 253402300799] เช่น ใน [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00]
    • ต้องตั้งค่านาโนหรือตั้งค่าเป็น 0
  • google.type.LatLng
    • ละติจูดต้องเป็นค่า [-90.0, 90.0]
    • ลองจิจูดต้องอยู่ใน [-180.0, 180.0]
    • ละติจูดและลองจิจูดอย่างน้อย 1 ค่าต้องไม่ใช่ 0
BatchOptimizeTours

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

เพิ่มประสิทธิภาพการทัวร์ชมยานพาหนะสำหรับข้อความ OptimizeToursRequest อย่างน้อย 1 ข้อความเป็นกลุ่ม

วิธีการนี้เป็นการดำเนินการที่ใช้เวลานาน (LRO) อินพุตสำหรับการเพิ่มประสิทธิภาพ (OptimizeToursRequest ข้อความ) และเอาต์พุต (OptimizeToursResponse ข้อความ) มีการอ่าน/เขียนจาก/ไปยัง Cloud Storage ในรูปแบบที่ผู้ใช้ระบุ เช่นเดียวกับเมธอด OptimizeTours OptimizeToursRequest แต่ละรายการจะมี ShipmentModel และแสดงผล OptimizeToursResponse ที่มี ShipmentRoute ซึ่งเป็นชุดเส้นทางที่จะดำเนินการโดยยานพาหนะที่ลดต้นทุนโดยรวม

ขอบเขตการให้สิทธิ์

ต้องใช้ขอบเขต OAuth ต่อไปนี้

  • https://www.googleapis.com/auth/cloud-platform
OptimizeTours

rpc OptimizeTours(OptimizeToursRequest) returns (OptimizeToursResponse)

ส่ง OptimizeToursRequest ที่มี ShipmentModel และส่งคืน OptimizeToursResponse ที่มี ShipmentRoute ซึ่งเป็นชุดเส้นทางที่จะดำเนินการโดยยานพาหนะที่ลดค่าใช้จ่ายโดยรวม

โมเดล ShipmentModel ส่วนใหญ่ประกอบด้วย Shipment ที่ต้องดําเนินการ และ Vehicle ที่ใช้เพื่อส่ง Shipment ShipmentRoute จะกำหนด Shipment ให้กับ Vehicle กล่าวอย่างเจาะจงคือ พวกเขากำหนดชุด Visit ให้กับยานพาหนะแต่ละคัน โดย Visit ตรงกับ VisitRequest ซึ่งเป็นบริการรับสินค้าหรือนำส่งสำหรับ Shipment

โดยมีเป้าหมายเพื่อกำหนด ShipmentRoute ให้กับ Vehicle เพื่อลดต้นทุนรวมโดยที่ต้นทุนมีองค์ประกอบจำนวนมากที่กำหนดไว้ใน ShipmentModel

ขอบเขตการให้สิทธิ์

ต้องใช้ขอบเขต OAuth ต่อไปนี้

  • https://www.googleapis.com/auth/cloud-platform

AggregatedMetrics

เมตริกรวมสำหรับ ShipmentRoute (การแสดงผลสำหรับ OptimizeToursResponse ในองค์ประกอบ Transition และ/หรือ Visit ทั้งหมด (ผลตอบแทนใน ShipmentRoute ทั้งหมด)

ช่อง
performed_shipment_count

int32

จำนวนการจัดส่งที่ดำเนินการ โปรดทราบว่าการจับคู่การรับสินค้าและการจัดส่งจะนับเพียงครั้งเดียว

travel_duration

Duration

ระยะเวลาการเดินทางทั้งหมดสำหรับเส้นทางหรือวิธีแก้ไข

wait_duration

Duration

ระยะเวลารอทั้งหมดสำหรับเส้นทางหรือโซลูชัน

delay_duration

Duration

ระยะเวลาล่าช้าทั้งหมดสำหรับเส้นทางหรือวิธีแก้โจทย์

break_duration

Duration

ระยะเวลาพักทั้งหมดสำหรับเส้นทางหรือวิธีแก้ไข

visit_duration

Duration

ระยะเวลาการเข้าชมทั้งหมดสำหรับเส้นทางหรือวิธีแก้โจทย์

total_duration

Duration

ระยะเวลารวมควรเท่ากับผลรวมของระยะเวลาทั้งหมดข้างต้น สำหรับเส้นทาง ค่านี้ยังสอดคล้องกับปัจจัยต่อไปนี้ด้วย

[ShipmentRoute.vehicle_end_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_end_time] - [ShipmentRoute.vehicle_start_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_start_time]
travel_distance_meters

double

ระยะทางรวมในการเดินทางสำหรับเส้นทางหรือวิธีแก้โจทย์

max_loads

map<string, VehicleLoad>

โหลดสูงสุดที่ทำได้ตลอดเส้นทาง (โซลูชัน Resp.) สำหรับแต่ละจำนวนในเส้นทางนี้ (โซลูชันการตอบสนอง) ซึ่งคำนวณเป็นจำนวนสูงสุดเหนือ Transition.vehicle_loads ทั้งหมด (Resp. ShipmentRoute.metrics.max_loads.

BatchOptimizeToursMetadata

ประเภทนี้ไม่มีช่อง

ข้อมูลเมตาของการดำเนินการสำหรับการเรียกใช้ BatchOptimizeToursRequest

BatchOptimizeToursRequest

ส่งคำขอเพิ่มประสิทธิภาพทัวร์ชมแบบกลุ่มเป็นการดำเนินการแบบไม่พร้อมกัน ไฟล์อินพุตแต่ละไฟล์ควรมี OptimizeToursRequest 1 รายการ และไฟล์เอาต์พุตแต่ละไฟล์จะมี OptimizeToursResponse 1 รายการ คำขอมีข้อมูลสำหรับอ่าน/เขียนและแยกวิเคราะห์ไฟล์ ไฟล์อินพุตและเอาต์พุตทั้งหมดควรอยู่ในโปรเจ็กต์เดียวกัน

ช่อง
parent

string

ต้องระบุ กำหนดกลุ่มเป้าหมายโปรเจ็กต์และสถานที่เพื่อโทรออก

รูปแบบ: * projects/{project-id} * projects/{project-id}/locations/{location-id}

หากไม่มีการระบุตำแหน่ง ระบบจะเลือกภูมิภาคโดยอัตโนมัติ

model_configs[]

AsyncModelConfig

ต้องระบุ ข้อมูลอินพุต/เอาต์พุตรูปแบบการซื้อแต่ละรูปแบบ เช่น เส้นทางไฟล์และรูปแบบข้อมูล

AsyncModelConfig

ข้อมูลสำหรับการแก้ปัญหาโมเดลการเพิ่มประสิทธิภาพหนึ่งแบบไม่พร้อมกัน

ช่อง
display_name

string

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

input_config

InputConfig

ต้องระบุ ข้อมูลเกี่ยวกับโมเดลอินพุต

output_config

OutputConfig

ต้องระบุ ข้อมูลตำแหน่งของเอาต์พุตที่ต้องการ

BatchOptimizeToursResponse

ประเภทนี้ไม่มีช่อง

ตอบกลับ BatchOptimizeToursRequest ซึ่งจะแสดงผลในการดำเนินการที่ใช้เวลานานหลังจากการดำเนินการเสร็จสมบูรณ์

BreakRule

กฎในการสร้างช่วงพักสำหรับยานพาหนะ (เช่น ช่วงพักกลางวัน) ช่วงพักคือระยะเวลาที่ต่อเนื่องกันระหว่างที่พาหนะไม่มีการใช้งานที่ตำแหน่งปัจจุบันและไม่สามารถเยี่ยมชมได้ เวลาพักอาจเกิดเหตุการณ์ต่อไปนี้

  • ระหว่างการเดินทางระหว่างการเข้าชม 2 ครั้ง (ซึ่งรวมถึงเวลาที่อยู่ก่อนหรือหลังการเข้าชม แต่ไม่ใช่ระหว่างการเข้าชม) ซึ่งในกรณีนี้จะเป็นการขยายเวลาขนส่งในระหว่างการเข้าชมนั้นๆ
  • หรือก่อนที่รถจะสตาร์ท (รถอาจไม่สตาร์ทระหว่างหยุดพัก) ซึ่งในกรณีนี้จะไม่มีผลต่อเวลาเริ่มต้นของรถ
  • หรือหลังสิ้นสุดยานพาหนะ (ด้วยเวลาสิ้นสุดของยานพาหนะ)
ช่อง
break_requests[]

BreakRequest

ลำดับของช่วงพัก ดูข้อความ BreakRequest

frequency_constraints[]

FrequencyConstraint

อาจมี FrequencyConstraint หลายรายการ คำตอบทั้งหมดจะต้องเป็นไปตามBreakRequestของBreakRuleนี้ โปรดดูFrequencyConstraint

BreakRequest

คุณต้องทราบลำดับของการพัก (เช่น หมายเลขและลำดับ) ที่ใช้กับยานพาหนะแต่ละคันล่วงหน้า BreakRequest ที่ซ้ำจะกำหนดลำดับดังกล่าว ตามลำดับที่ต้องแสดง กรอบเวลา (earliest_start_time / latest_start_time) อาจซ้อนทับกัน แต่ต้องเข้ากันได้กับคำสั่งซื้อ (เลือกไว้)

ช่อง
earliest_start_time

Timestamp

ต้องระบุ ขอบเขตล่าง (รวม) เมื่อเริ่มต้นช่วงพัก

latest_start_time

Timestamp

ต้องระบุ ขอบเขตบน (รวม) เมื่อเริ่มต้นช่วงพัก

min_duration

Duration

ต้องระบุ ระยะเวลาขั้นต่ำของช่วงพัก ต้องเป็นค่าบวก

FrequencyConstraint

เราอาจจำกัดความถี่และระยะเวลาของช่วงพักที่ระบุไว้ข้างต้นด้วยการบังคับใช้ความถี่ช่วงพักขั้นต่ำ เช่น "ต้องมีช่วงพักอย่างน้อย 1 ชั่วโมงทุก 12 ชั่วโมง" สมมติว่าค่านี้แปลได้ว่า "ภายในกรอบเวลาการเลื่อนที่ 12 ชม. ต้องมีช่วงพักอย่างน้อย 1 ชั่วโมงอย่างน้อย 1 ชั่วโมง" ตัวอย่างนั้นจะแปลค่าเป็น FrequencyConstraint ต่อไปนี้

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

เวลาและระยะเวลาของช่วงพักในโซลูชันจะเป็นไปตามข้อจำกัดดังกล่าวทั้งหมด นอกเหนือจากกรอบเวลาและระยะเวลาขั้นต่ำที่ระบุไว้ใน BreakRequest แล้ว

FrequencyConstraint ในทางปฏิบัติอาจมีผลกับช่วงพักโฆษณาที่ไม่ต่อเนื่อง ตัวอย่างเช่น กำหนดเวลาต่อไปนี้เป็นไปตามตัวอย่าง "1h ทุก 12h"

  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
ช่อง
min_break_duration

Duration

ต้องระบุ ระยะเวลาช่วงพักขั้นต่ำสำหรับข้อจำกัดนี้ ไม่ใช่ค่าลบ ดูคำอธิบายของ FrequencyConstraint

max_inter_break_duration

Duration

ต้องระบุ ช่วงเวลาสูงสุดที่อนุญาตของช่วงเวลาใดก็ได้ในเส้นทางที่ไม่มีช่วงพักของ duration >= min_break_duration อย่างน้อยบางส่วน ต้องเป็นค่าบวก

DataFormat

รูปแบบข้อมูลสำหรับไฟล์อินพุตและเอาต์พุต

Enum
DATA_FORMAT_UNSPECIFIED ค่าไม่ถูกต้อง รูปแบบต้องไม่เป็น UNSPECIFIED
JSON JavaScript Object Notation
PROTO_TEXT รูปแบบข้อความบัฟเฟอร์โปรโตคอล โปรดดู https://protobuf.dev/reference/protobuf/textformat-spec/

DistanceLimit

ขีดจำกัดเป็นตัวกำหนดระยะทางสูงสุดที่เดินทางได้ อาจแข็งหรืออ่อนก็ได้

หากกำหนดขีดจำกัดรอง ต้องกำหนดทั้ง soft_max_meters และ cost_per_kilometer_above_soft_max และไม่เป็นค่าลบ

ช่อง
max_meters

int64

ขีดจำกัดแบบเข้มงวดจะจำกัดระยะทางไม่เกิน max_meters ขีดจำกัดต้องไม่ติดลบ

soft_max_meters

int64

ค่าจำกัดชั่วคราวที่ไม่ได้บังคับใช้ขีดจำกัดระยะทางสูงสุด แต่หากมีการละเมิดจะส่งผลให้เกิดค่าใช้จ่ายที่บวกกับค่าใช้จ่ายอื่นๆ ที่กำหนดไว้ในโมเดลด้วยหน่วยเดียวกัน

หาก soft_max_meters ที่กำหนดไว้ต้องน้อยกว่า max_meters และต้องไม่ติดลบ

cost_per_kilometer_above_soft_max

double

ต้นทุนต่อกิโลเมตรที่เกิดขึ้นหากระยะทางเกินขีดจํากัด soft_max_meters ค่าใช้จ่ายเพิ่มเติมจะเป็น 0 หากระยะทางต่ำกว่าขีดจำกัด ไม่เช่นนั้นสูตรที่ใช้คำนวณต้นทุนจะเป็นดังนี้

  (distance_meters - soft_max_meters) / 1000.0 *
  cost_per_kilometer_above_soft_max.

ค่าใช้จ่ายต้องไม่ติดลบ

GcsDestination

ตำแหน่งของ Google Cloud Storage ที่จะเขียนไฟล์เอาต์พุต

ช่อง
uri

string

ต้องระบุ URI ของ Google Cloud Storage

GcsSource

ตำแหน่ง Google Cloud Storage ที่จะอ่านไฟล์อินพุต

ช่อง
uri

string

ต้องระบุ URI ของออบเจ็กต์ Google Cloud Storage ที่มีรูปแบบ gs://bucket/path/to/object

InjectedSolutionConstraint

โซลูชันที่แทรกอยู่ในคำขอ รวมถึงข้อมูลว่าต้องจำกัดการเข้าชมใดบ้างและวิธีการจำกัดการเข้าชม

ช่อง
routes[]

ShipmentRoute

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

skipped_shipments[]

SkippedShipment

ข้ามการจัดส่งโซลูชันที่จะใส่ โซลูชันบางอย่างอาจไม่รวมอยู่ในโซลูชันต้นฉบับ โปรดดูช่อง routes

constraint_relaxations[]

ConstraintRelaxation

สําหรับกลุ่มยานพาหนะ 0 กลุ่มขึ้นไป ให้ระบุเวลาและระยะเวลาที่จะลดข้อจํากัด หากช่องนี้เว้นว่างไว้ ระบบจะจำกัดเส้นทางยานพาหนะทุกเส้นทางที่ไม่ว่างเปล่าให้หมด

ConstraintRelaxation

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

ช่อง
relaxations[]

Relaxation

การผ่อนปรนข้อจำกัดการเข้าชมทั้งหมดที่จะมีผลกับการเข้าชมบนเส้นทางที่มียานพาหนะใน vehicle_indices

vehicle_indices[]

int32

ระบุดัชนียานพาหนะที่ข้อจำกัดการเข้าชม relaxations มีผลบังคับใช้ หากเว้นว่างไว้ ระบบจะถือว่าค่านี้เป็นค่าเริ่มต้น และ relaxations จะมีผลกับยานพาหนะทั้งหมดที่ไม่ได้ระบุใน constraint_relaxations อื่นๆ สามารถมีค่าเริ่มต้นได้สูงสุด 1 ค่า กล่าวคือ อนุญาตให้มีฟิลด์การผ่อนปรนข้อจำกัดได้สูงสุด 1 ฟิลด์ vehicle_indices ว่าง ระบบแสดงดัชนียานพาหนะได้เพียงครั้งเดียวเท่านั้นแม้ว่าจะอยู่ใน constraint_relaxations หลายครั้งก็ตาม

ดัชนีรถยนต์ได้รับการแมปเหมือนกับ ShipmentRoute.vehicle_index หาก interpret_injected_solutions_using_labels เป็นจริง (ดู fields ความคิดเห็น)

การพักผ่อน

หาก relaxations ว่างเปล่า เวลาเริ่มต้นและลำดับการเข้าชมทั้งหมดในวันที่ routes จะถูกจำกัดอย่างสิ้นเชิง และจะไม่สามารถแทรกหรือเพิ่มการเข้าชมใหม่ลงในเส้นทางเหล่านั้นได้ นอกจากนี้ เวลาเริ่มต้นและสิ้นสุดของยานพาหนะใน routes จะมีข้อจำกัดโดยสมบูรณ์ ยกเว้นในกรณีที่รถว่างเปล่า (กล่าวคือ ไม่มีการเข้าชมและตั้งค่า used_if_route_is_empty เป็น "เท็จ" ในรุ่น)

relaxations(i).level ระบุระดับการผ่อนปรนข้อจำกัดที่ใช้กับการเข้าชม #j ซึ่งเป็นไปตามเงื่อนไขต่อไปนี้

  • route.visits(j).start_time >= relaxations(i).threshold_time และ
  • j + 1 >= relaxations(i).threshold_visit_count

ในทำนองเดียวกัน การสตาร์ทรถจะผ่อนปรนถึง relaxations(i).level หากเป็นไปตามเงื่อนไขต่อไปนี้

  • vehicle_start_time >= relaxations(i).threshold_time และ
  • relaxations(i).threshold_visit_count == 0 และจุดสิ้นสุดยานพาหนะจะผ่อนปรนถึง relaxations(i).level หากเป็นไปตามเงื่อนไขต่อไปนี้
  • vehicle_end_time >= relaxations(i).threshold_time และ
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

หากต้องการใช้ระดับการผ่อนคลายหากการเข้าชมตรงกับ threshold_visit_count หรือ threshold_time เพิ่ม relaxations 2 รายการซึ่งมี level เดียวกัน: รายการหนึ่งมี threshold_visit_count ที่ตั้งไว้ และอีกรายการมี threshold_time เท่านั้น หากการเข้าชมเป็นไปตามเงื่อนไขของ relaxations หลายรายการ ระบบจะใช้ระดับที่ผ่อนคลายมากที่สุด ผลที่ตามมาคือ ระดับความผ่อนคลายจะไม่ลดลงตั้งแต่ที่ยานพาหนะเริ่มผ่านการเข้าชมเส้นทางไปจนถึงจุดสิ้นสุดของยานพาหนะ กล่าวคือ ระดับการผ่อนคลายจะไม่ลดลงเมื่อเส้นทางคืบหน้าไปเรื่อยๆ

เวลาและลำดับของการเข้าชมเส้นทางที่ไม่ตรงกับเงื่อนไขของเกณฑ์ของ relaxations จะถูกจำกัดอย่างสมบูรณ์ และไม่สามารถแทรกการเข้าชมลงในลำดับเหล่านี้ได้ นอกจากนี้ หากสตาร์ทหรือท้ายรถไม่เป็นไปตามเงื่อนไขของการผ่อนปรน เวลาจะคงที่เว้นแต่จะว่าง

ช่อง
level

Level

ระดับการผ่อนปรนข้อจำกัดที่มีผลเมื่อเป็นไปตามเงื่อนไขที่หรือหลังจาก threshold_time และอย่างน้อย threshold_visit_count เป็นไปตามเงื่อนไข

threshold_time

Timestamp

เวลาที่อาจใช้ level เพื่อผ่อนคลายหรือหลังจากนั้น

threshold_visit_count

int32

จำนวนการเข้าชมที่levelหรือหลังจากนั้นอาจใช้การผ่อนปรน หาก threshold_visit_count เป็น 0 (หรือไม่ได้ตั้งค่า) ระบบจะใช้ level โดยตรงที่สตาร์ทรถ

หากเป็น route.visits_size() + 1 ระบบจะใช้ level กับส่วนท้ายของยานพาหนะเท่านั้น หากมากกว่า route.visits_size() + 1 จะไม่มีการใช้ level กับเส้นทางนั้นเลย

ระดับ

แสดงระดับการผ่อนปรนข้อจำกัดต่างๆ ซึ่งใช้สำหรับการเข้าชมและระดับที่ตามมาเมื่อเป็นไปตามเงื่อนไขของเกณฑ์

แจกแจงด้านล่างตามลำดับเพื่อความผ่อนคลายมากขึ้น

Enum
LEVEL_UNSPECIFIED

ระดับความผ่อนคลายเริ่มต้นโดยนัย: ไม่มีข้อจำกัดใดๆ กล่าวคือ การเข้าชมทั้งหมดจะถูกจำกัดทั้งหมด

ต้องไม่ใช้ค่านี้อย่างชัดเจนใน level

RELAX_VISIT_TIMES_AFTER_THRESHOLD เวลาเริ่มต้น/สิ้นสุดของยานพาหนะจะผ่อนปรน แต่การเยี่ยมชมแต่ละครั้งจะยังคงผูกอยู่กับรถคันเดียวกัน และจะต้องสังเกตลำดับการเข้าชม โดยไม่สามารถแทรกการเข้าชมระหว่างสองหรือก่อนการเข้าชมได้
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD เหมือนกับ RELAX_VISIT_TIMES_AFTER_THRESHOLD แต่ลำดับการเข้าชมก็ผ่อนคลายเช่นกัน กล่าวคือ การเข้าชมจะยังคงเชื่อมโยงกับยานพาหนะเท่านั้น
RELAX_ALL_AFTER_THRESHOLD เหมือนกันกับ RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD แต่ยานพาหนะก็ผ่อนคลายเช่นกัน กล่าวคือ การเข้าชมจะไม่เสียค่าใช้จ่ายใดๆ เลยในเวลาตามเกณฑ์หรือหลังจากพ้นเวลาที่กำหนด และอาจไม่มีประสิทธิภาพ

InputConfig

ระบุอินพุตสำหรับ [BatchOptimizeTours][google.maps.redirectoptimizer.v1.Routeเพิ่มประสิทธิภาพService.BatchOptimizeTours]

ช่อง
data_format

DataFormat

ต้องระบุ รูปแบบข้อมูลอินพุต

ฟิลด์สหภาพ source ต้องระบุ source ต้องเป็นค่าใดค่าหนึ่งต่อไปนี้เท่านั้น
gcs_source

GcsSource

ตำแหน่งของ Google Cloud Storage โดยต้องเป็นออบเจ็กต์เดียว (ไฟล์)

ตำแหน่ง

มีการล้อมรอบสถานที่ตั้ง (จุดทางภูมิศาสตร์ และหัวข้อที่ไม่บังคับ)

ช่อง
lat_lng

LatLng

พิกัดทางภูมิศาสตร์ของจุดอ้างอิง

heading

int32

ทิศทางของเข็มทิศที่เชื่อมโยงกับทิศทางการเคลื่อนที่ของการจราจร ค่านี้ใช้เพื่อระบุด้านข้างของถนนที่จะใช้สำหรับการไปรับและส่งคืน ค่าส่วนหัวอาจอยู่ระหว่าง 0 ถึง 360 โดย 0 ระบุทิศทางของทิศเหนือ และ 90 ระบุทิศทางของ "ตะวันออกเฉียงเหนือ" ฯลฯ

OptimizeToursRequest

ส่งคำขอไปยังเครื่องมือแก้ปัญหาการเพิ่มประสิทธิภาพการทัวร์ชม ซึ่งระบุรูปแบบการจัดส่งที่ต้องแก้ไข รวมถึงพารามิเตอร์การเพิ่มประสิทธิภาพ

ช่อง
parent

string

ต้องระบุ กําหนดเป้าหมายโปรเจ็กต์หรือสถานที่ตั้งเพื่อโทรออก

รูปแบบ: * projects/{project-id} * projects/{project-id}/locations/{location-id}

หากไม่มีการระบุตำแหน่ง ระบบจะเลือกภูมิภาคโดยอัตโนมัติ

timeout

Duration

หากตั้งค่าระยะหมดเวลาไว้ เซิร์ฟเวอร์จะส่งคืนการตอบกลับก่อนที่ระยะหมดเวลาจะหมดไป หรือเมื่อถึงกำหนดเวลาของเซิร์ฟเวอร์สำหรับคำขอแบบซิงโครนัส ขึ้นอยู่กับว่ากรณีใดเกิดก่อน

สำหรับคำขอแบบอะซิงโครนัส เซิร์ฟเวอร์จะสร้างโซลูชัน (หากเป็นไปได้) ก่อนจะพ้นระยะหมดเวลา

model

ShipmentModel

รูปแบบการจัดส่งที่จะแก้ปัญหา

solving_mode

SolvingMode

โดยค่าเริ่มต้น โหมดการแก้โจทย์คือ DEFAULT_SOLVE (0)

search_mode

SearchMode

โหมดการค้นหาที่ใช้เพื่อแก้ไขคำขอ

injected_first_solution_routes[]

ShipmentRoute

แนะนำอัลกอริทึมการเพิ่มประสิทธิภาพในการค้นหาโซลูชันแรกที่คล้ายกับโซลูชันก่อนหน้านี้

โมเดลจะถูกจำกัดเมื่อสร้างโซลูชันแรก การจัดส่งใดๆ ที่ไม่ได้ดำเนินการในเส้นทางจะถูกข้ามโดยนัยในโซลูชันแรก แต่อาจดำเนินการในโซลูชันต่อๆ ไปก็ได้

โซลูชันต้องเป็นไปตามสมมติฐานเกี่ยวกับความถูกต้องพื้นฐานบางประการดังนี้

  • สำหรับเส้นทางทั้งหมด vehicle_index จะต้องอยู่ในช่วงและต้องไม่ซ้ำซ้อน
  • สำหรับการเข้าชมทั้งหมด shipment_indexและ visit_request_index จะต้องอยู่ในช่วง
  • จะอ้างอิงการจัดส่งได้ในเส้นทางเดียวเท่านั้น
  • การรับสินค้าสำหรับการจัดส่งแบบมารับที่ร้านต้องดำเนินการก่อนการนำส่ง
  • ต้องมีตัวเลือกการรับสินค้าหรือทางเลือกในการจัดส่งไม่เกิน 1 ตัวเลือก
  • สำหรับทุกเส้นทาง เวลาจะเพิ่มขึ้น (เช่น vehicle_start_time <= visits[0].start_time <= visits[1].start_time ... <= vehicle_end_time).
  • การจัดส่งจะกระทำได้ในยานพาหนะที่ได้รับอนุญาตเท่านั้น ยานพาหนะได้รับอนุญาตหาก Shipment.allowed_vehicle_indices ว่างเปล่าหรือ vehicle_index รวมอยู่ใน Shipment.allowed_vehicle_indices

หากโซลูชันที่แทรกไว้ไม่สามารถทำได้ อาจไม่แสดงผลข้อผิดพลาดในการตรวจสอบ และอาจแสดงผลข้อผิดพลาดที่ระบุว่าไม่สามารถดำเนินการได้แทน

injected_solution_constraint

InjectedSolutionConstraint

จำกัดอัลกอริทึมการเพิ่มประสิทธิภาพเพื่อค้นหาวิธีแก้ปัญหาสุดท้ายที่คล้ายกับโซลูชันก่อนหน้านี้ ตัวอย่างเช่น อาจมีการตรึงเส้นทางบางส่วนที่สร้างเสร็จสมบูรณ์แล้ว หรือส่วนที่เสร็จสมบูรณ์แล้ว แต่ต้องไม่แก้ไข

หากโซลูชันที่แทรกไว้ไม่สามารถทำได้ อาจไม่แสดงผลข้อผิดพลาดในการตรวจสอบ และอาจแสดงผลข้อผิดพลาดที่ระบุว่าไม่สามารถดำเนินการได้แทน

refresh_details_routes[]

ShipmentRoute

หากเส้นทางนั้นไม่ว่างเปล่า ระบบจะรีเฟรชเส้นทางที่ระบุโดยไม่แก้ไขลำดับการเข้าชมหรือเวลาในการเดินทาง แต่จะอัปเดตเฉพาะรายละเอียดอื่นๆ เท่านั้น ไม่สามารถแก้ไขปัญหาของโมเดลได้

ตั้งแต่วันที่ 11/2020 เป็นต้นไป การดำเนินการนี้จะสร้างเฉพาะโพลีไลน์ของเส้นทางที่ไม่ว่างเปล่า และกําหนดให้ populate_polylines เป็นจริง

ช่อง route_polyline ของเส้นทางที่ผ่านเข้ามาอาจไม่สอดคล้องกับเส้นทาง transitions

ต้องไม่ใช้ฟิลด์นี้ร่วมกับ injected_first_solution_routes หรือ injected_solution_constraint

Shipment.ignore และ Vehicle.ignore ไม่มีผลต่อลักษณะการทำงาน ระบบจะยังคงป้อนข้อมูลโพลีไลน์ระหว่างการเข้าชมทั้งหมดในเส้นทางที่ไม่ว่างเปล่า โดยไม่คำนึงถึงว่าระบบจะไม่สนใจการจัดส่งหรือยานพาหนะที่เกี่ยวข้อง

interpret_injected_solutions_using_labels

bool

หากจริง:

  • ใช้ ShipmentRoute.vehicle_label แทน vehicle_index เพื่อจับคู่เส้นทางในโซลูชันที่แทรกกับยานพาหนะในคำขอ ใช้การแมป ShipmentRoute.vehicle_index เดิมกับ ShipmentRoute.vehicle_index ใหม่เพื่ออัปเดต ConstraintRelaxation.vehicle_indices หากไม่ว่างเปล่า แต่การแมปต้องไม่กำกวม (กล่าวคือ ShipmentRoute หลายรายการต้องไม่แชร์ vehicle_index เดิมร่วมกัน)
  • ใช้ ShipmentRoute.Visit.shipment_label แทน shipment_index เพื่อจับคู่การเข้าชมในโซลูชันที่แทรกกับการจัดส่งในคำขอ
  • ใช้ SkippedShipment.label แทน SkippedShipment.index เพื่อจับคู่การจัดส่งที่ข้ามในโซลูชันที่แทรกกับคำขอการจัดส่ง

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

หากเป็น "จริง" ป้ายกำกับในหมวดหมู่ต่อไปนี้จะต้องปรากฏในหมวดหมู่นั้นอย่างน้อย 1 ครั้ง

หาก vehicle_label ในโซลูชันที่แทรกไม่ตรงกับยานพาหนะที่ขอ ระบบจะนำเส้นทางที่เกี่ยวข้องออกจากโซลูชันพร้อมกับการเข้าชมของโซลูชันนั้น หาก shipment_label ในโซลูชันที่แทรกไม่ตรงกับคำขอการจัดส่ง ระบบจะนำการเข้าชมที่เกี่ยวข้องออกจากโซลูชัน หาก SkippedShipment.label ในโซลูชันที่แทรกไม่ตรงกับคำขอการจัดส่ง ระบบจะนำ SkippedShipment ออกจากโซลูชัน

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

หมายเหตุ: ผู้โทรต้องตรวจสอบว่า Vehicle.label แต่ละรายการ (ตอบกลับ Shipment.label) ระบุเอนทิตียานพาหนะ (การจัดส่งค่าจัดส่ง) ที่ไม่ซ้ำกันที่ใช้ในคำขอที่เกี่ยวข้อง 2 รายการ ได้แก่ คำขอที่ผ่านมาซึ่งสร้าง OptimizeToursResponse ที่ใช้ในโซลูชันที่แทรกไว้ และคำขอปัจจุบันซึ่งมีโซลูชันที่แทรกเข้าไป การตรวจสอบความไม่ซ้ำกันที่อธิบายไว้ข้างต้นไม่เพียงพอที่จะรับประกันข้อกำหนดนี้

consider_road_traffic

bool

พิจารณาการประมาณการเข้าชมในการคำนวณ ShipmentRoute ช่อง Transition.travel_duration, Visit.start_time และ vehicle_end_time ในการตั้งค่าช่อง ShipmentRoute.has_traffic_infeasibilities และในการคำนวณช่อง OptimizeToursResponse.total_cost

populate_polylines

bool

หาก "จริง" ระบบจะป้อนข้อมูลของเส้นประกอบในคำตอบ ShipmentRoute

populate_transition_polylines

bool

หาก "จริง" ระบบจะป้อนข้อมูลของเส้นประกอบในคำตอบ ShipmentRoute.transitions

allow_large_deadline_despite_interruption_risk

bool

หากตั้งค่านี้ คำขอจะมีกำหนดเวลา (ดู https://grpc.io/blog/deadlines) ได้สูงสุด 60 นาที ไม่เช่นนั้น กำหนดเวลาสูงสุดคือ 30 นาที โปรดทราบว่าคำขอที่มีระยะเวลานานมีความเสี่ยงที่ขนาดใหญ่กว่า (แต่ยังน้อย) ที่จะเกิดการหยุดชะงัก

use_geodesic_distances

bool

หากเป็นจริง ระยะทางในการเดินทางจะคำนวณโดยใช้ระยะทางตามภูมิสารสนเทศแทนระยะทางใน Google Maps และเวลาเดินทางจะคำนวณโดยใช้ระยะทางทรงกลมด้วยความเร็วที่กำหนดโดย geodesic_meters_per_second

label

string

ป้ายกำกับที่อาจใช้เพื่อระบุคำขอนี้ โดยจะรายงานกลับมาใน OptimizeToursResponse.request_label

geodesic_meters_per_second

double

เมื่อ use_geodesic_distances เป็นจริง ช่องนี้จะต้องตั้งค่าและกำหนดความเร็วที่ใช้กับระยะเวลาเดินทางในการคำนวณ โดยมีค่าอย่างน้อย 1.0 เมตร/วินาที

max_validation_errors

int32

ลดจำนวนข้อผิดพลาดในการตรวจสอบที่ส่งกลับ โดยทั่วไปแล้ว ข้อผิดพลาดเหล่านี้จะแนบอยู่กับเพย์โหลดข้อผิดพลาด INVALID_ARGUMENT เป็นรายละเอียดข้อผิดพลาด BadRequest (https://cloud.google.com/apis/design/errors#error_details) ยกเว้นกรณีที่ solving_mode=VALIDATE_ONLY: โปรดดูช่อง OptimizeToursResponse.validation_errors ค่าเริ่มต้นคือ 100 และจํากัดที่ 10,000

SearchMode

โหมดที่จะกำหนดพฤติกรรมการค้นหา การแลกเปลี่ยนเวลาในการตอบสนองกับคุณภาพของโซลูชัน ระบบจะบังคับใช้กำหนดเวลาคำขอส่วนกลางในทุกโหมด

Enum
SEARCH_MODE_UNSPECIFIED โหมดการค้นหาที่ไม่ระบุ เทียบเท่ากับ RETURN_FAST
RETURN_FAST หยุดการค้นหาหลังจากพบโซลูชันที่ดีรายการแรก
CONSUME_ALL_AVAILABLE_TIME ใช้เวลาที่มีทั้งหมดเพื่อค้นหาโซลูชันที่ดีกว่า

SolvingMode

กำหนดวิธีที่เครื่องมือแก้โจทย์ควรจัดการคำขอ ในทุกโหมดยกเว้น VALIDATE_ONLY หากคำขอไม่ถูกต้อง คุณจะได้รับข้อผิดพลาด INVALID_REQUEST ดู max_validation_errors เพื่อจำกัดจำนวนข้อผิดพลาดที่แสดงผล

Enum
DEFAULT_SOLVE แก้โจทย์ในโมเดล
VALIDATE_ONLY ตรวจสอบความถูกต้องของโมเดลเท่านั้นโดยไม่ต้องแก้โจทย์: เติมข้อมูล OptimizeToursResponse.validation_errors ให้ได้มากที่สุด
DETECT_SOME_INFEASIBLE_SHIPMENTS

ป้อนข้อมูลเฉพาะ OptimizeToursResponse.validation_errors หรือ OptimizeToursResponse.skipped_shipments เท่านั้นและไม่ได้แก้ไขส่วนที่เหลือของคําขอ (ไม่ได้ตั้งค่า status และ routes ในการตอบกลับ) หากตรวจพบว่าไม่มีความเป็นไปได้ในเส้นทาง injected_solution_constraint ระบบจะป้อนข้อมูลในช่อง OptimizeToursResponse.validation_errors และปล่อย OptimizeToursResponse.skipped_shipments ว่างไว้

สำคัญ: ระบบจะแสดงการจัดส่งที่ดำเนินการไม่ได้บางรายการที่นี่ แต่จะแสดงเฉพาะการจัดส่งที่ตรวจพบว่าดำเนินการไม่ได้ในระหว่างการประมวลผลล่วงหน้าเท่านั้น

OptimizeToursResponse

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

ช่อง
routes[]

ShipmentRoute

เส้นทางที่คำนวณสำหรับยานพาหนะแต่ละคัน เส้นทางที่ i ตรงกับยานพาหนะ i ในโมเดล

request_label

string

สำเนาของ OptimizeToursRequest.label หากมีการระบุป้ายกำกับในคำขอ

skipped_shipments[]

SkippedShipment

รายการการจัดส่งทั้งหมดที่ข้าม

validation_errors[]

OptimizeToursValidationError

รายการข้อผิดพลาดในการตรวจสอบทั้งหมดที่เราสามารถตรวจพบได้อย่างอิสระ ดูคำอธิบาย "ข้อผิดพลาดหลายรายการ" สำหรับข้อความ OptimizeToursValidationError

metrics

Metrics

เมตริกระยะเวลา ระยะทาง และการใช้งานสำหรับโซลูชันนี้

เมตริก

เมตริกโดยรวม ซึ่งรวมจากเส้นทางทั้งหมด

ช่อง
aggregated_route_metrics

AggregatedMetrics

ซึ่งรวมอยู่บนเส้นทาง เมตริกแต่ละรายการคือผลรวม (หรือค่าสูงสุดสำหรับการโหลด) จากช่อง ShipmentRoute.metrics ทั้งหมดที่มีชื่อเดียวกัน

skipped_mandatory_shipment_count

int32

จำนวนการจัดส่งที่จำเป็นซึ่งข้าม

used_vehicle_count

int32

จำนวนยานพาหนะที่ใช้ หมายเหตุ: หากเส้นทางยานพาหนะว่างเปล่าและ Vehicle.used_if_route_is_empty เป็นจริง ระบบจะถือว่าใช้ยานพาหนะนั้น

earliest_vehicle_start_time

Timestamp

เวลาเริ่มต้นเร็วที่สุดสำหรับยานพาหนะมือสอง โดยคำนวณเป็นระยะเวลาต่ำสุดสำหรับยานพาหนะมือสองทั้งหมดของ ShipmentRoute.vehicle_start_time

latest_vehicle_end_time

Timestamp

เวลาสิ้นสุดล่าสุดของยานพาหนะมือสอง ซึ่งคำนวณจากค่าสูงสุดจากยานพาหนะมือสองทั้งหมดของ ShipmentRoute.vehicle_end_time

costs

map<string, double>

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

total_cost

double

ต้นทุนรวมของโซลูชัน ผลรวมของค่าทั้งหมดในแมปต้นทุน

OptimizeToursValidationError

อธิบายข้อผิดพลาดที่พบเมื่อตรวจสอบความถูกต้องของ OptimizeToursRequest

ช่อง
code

int32

ข้อผิดพลาดในการตรวจสอบจะกำหนดโดยคู่อุปกรณ์ (code, display_name) ซึ่งจะแสดงอยู่เสมอ

ช่องอื่นๆ (ด้านล่าง) จะให้บริบทเพิ่มเติมเกี่ยวกับข้อผิดพลาด

ข้อผิดพลาดหลายข้อ: เมื่อมีข้อผิดพลาดหลายรายการ กระบวนการตรวจสอบจะพยายามแสดงผลข้อผิดพลาดหลายรายการ นี่เป็นกระบวนการที่ไม่สมบูรณ์แบบ คล้ายกับคอมไพเลอร์ ข้อผิดพลาดในการตรวจสอบความถูกต้องบางอย่างอาจ "ร้ายแรง" ซึ่งหมายความว่าจะเป็นการหยุดกระบวนการตรวจสอบทั้งหมด โดยในกรณีนี้คือข้อผิดพลาด display_name="UNSPECIFIED" รายการ รวมถึงข้อผิดพลาดอื่นๆ อีก ข้อผิดพลาดบางอย่างอาจทำให้กระบวนการตรวจสอบข้ามข้อผิดพลาดอื่นๆ

ความเสถียร: code และ display_name ควรมีความเสถียรมาก แต่รหัสและชื่อที่แสดงใหม่อาจปรากฏขึ้นเมื่อเวลาผ่านไป ซึ่งอาจทำให้คำขอที่ระบุ (ไม่ถูกต้อง) แสดงผลเป็นคู่ที่ต่างกัน (code, display_name) เนื่องจากข้อผิดพลาดใหม่ซ่อนรายการเก่าไว้ (ดู "ข้อผิดพลาดหลายรายการ")

การอ้างอิง: รายการคู่ (รหัส, ชื่อ) ทั้งหมด

  • ไม่ระบุ = 0;
  • VALIDATION_TIMEOUT_ERROR = 10 ไม่สามารถตรวจสอบความถูกต้องภายในเวลาที่กำหนด
  • REQUEST_OPTIONS_ERROR = 12;

    • REQUEST_OPTIONS_INVALID_SOLVING_mode = 1201;
    • REQUEST_OPTIONS_INVALID_MAX_VALIDATION_ERRORS = 1203;
    • REQUEST_OPTIONS_INVALID_GEODESIC_METERS_PER_SECOND = 1204;
    • REQUEST_OPTIONS_GEODESIC_METERS_PER_SECOND_TOO_SMALL = 1205;
    • REQUEST_OPTIONS_MISSING_GEODESIC_METERS_PER_SECOND = 1206;
    • REQUEST_OPTIONS_POPULATE_PATHFINDER_TRIPS_AND_GEODESIC_DISTANCE = 1207;
    • REQUEST_OPTIONS_cost_MODEL_OPTIONS_AND_GEODESIC_DISTANCE = 1208;
    • REQUEST_OPTIONS_TRAVEL_Mode_INCOMPATIBLE_WITH_TRAFFIC = 1211;
    • REQUEST_OPTIONS_MULTIPLE_TRAFFIC_FLAVORS = 1212;
    • REQUEST_OPTIONS_INVALID_TRAFFIC_FLAVOR = 1213;
    • REQUEST_OPTIONS_TRAFFIC_ENABLED_WITHOUT_GLOBAL_START_TIME = 1214;
    • REQUEST_OPTIONS_TRAFFIC_ENABLED_WITH_PRECEDENCES = 1215;
    • REQUEST_OPTIONS_TRAFFIC_PREFILL_Mode_INVALID = 1216;
    • REQUEST_OPTIONS_TRAFFIC_PREFILL_ENABLED_WITHOUT_TRAFFIC = 1217;
  • INJECTED_SOLUTION_ERROR = 20;
    • INJECTED_SOLUTION_MISSING_LABEL = 2000;
    • INJECTED_SOLUTION_DUPLICATE_LABEL = 2001;
    • INJECTED_SOLUTION_AMBIGUOUS_INDEX = 2002;
    • INJECTED_SOLUTION_INFEASIBLE_AFTER_GETTING_TRAVEL_TIMES = 2003;
    • INJECTED_SOLUTION_TRANSITION_INCONSISTENT_WITH_ACTUAL_TRAVEL = 2004;
    • INJECTED_SOLUTION_CONCURRENT_SOLUTION_TYPES = 2005;
    • INJECTED_SOLUTION_MORE_THAN_ONE_PER_TYPE = 2006;
    • INJECTED_SOLUTION_REFRESH_WITHOUT_POPULATE = 2008;
    • INJECTED_SOLUTION_CONSTRAINED_ROUTE_PORTION_INFEASIBLE = 2010;
  • SHIPMENT_MODEL_ERROR = 22;
    • SHIPMENT_MODEL_TOO_LARGE = 2,200;
    • SHIPMENT_MODEL_TOO_MANY_CAPACITY_TYPES = 2201;
    • SHIPMENT_MODEL_GLOBAL_START_TIME_NEGATIVE_OR_NAN = 2202;
    • SHIPMENT_MODEL_GLOBAL_END_TIME_TOO_LARGE_OR_NAN = 2,203;
    • SHIPMENT_MODEL_GLOBAL_START_TIME_AFTER_GLOBAL_END_TIME = 2204;
    • SHIPMENT_MODEL_GLOBAL_DURATION_TOO_Long = 2,205;
    • SHIPMENT_MODEL_MAX_ACTIVE_VEHICLES_NOT_POSITIVE = 2206;
    • SHIPMENT_MODEL_DURATION_MATRIX_TOO_LARGE = 2,207;
  • INDEX_ERROR = 24;
  • TAG_ERROR = 26;
  • TIME_WINDOW_ERROR = 28;
    • TIME_WINDOW_INVALID_START_TIME = 2800;
    • TIME_WINDOW_INVALID_END_TIME = 2801;
    • TIME_WINDOW_INVALID_SOFT_START_TIME = 2802;
    • TIME_WINDOW_INVALID_SOFT_END_TIME = 2803;
    • TIME_WINDOW_OUTSIDE_GLOBAL_TIME_WINDOW = 2804;
    • TIME_WINDOW_START_TIME_AFTER_END_TIME = 2805;
    • TIME_WINDOW_INVALID_COST_PER_HOUR_BEFORE_SOFT_START_TIME = 2806;
    • TIME_WINDOW_INVALID_COST_PER_HOUR_AFTER_SOFT_END_TIME = 2807;
    • TIME_WINDOW_COST_BEFORE_SOFT_START_TIME_WITHOUT_SOFT_START_TIME = 2808;
    • TIME_WINDOW_TOTAL_SOFT_END_TIME_WITHOUT_SOFT_END_TIME = 2809;
    • TIME_WINDOW_SOFT_START_TIME_WITHOUT_COST_BEFORE_SOFT_START_TIME = 2810;
    • TIME_WINDOW_SOFT_END_TIME_WITHOUT_COST_AFTER_SOFT_END_TIME = 2811;
    • TIME_WINDOW_OVERLAPPING_ADJACENT_OR_EARLIER_THAN_PREVIOUS = 2812;
    • TIME_WINDOW_START_TIME_AFTER_SOFT_START_TIME = 2813;
    • TIME_WINDOW_SOFT_START_TIME_AFTER_END_TIME = 2814;
    • TIME_WINDOW_START_TIME_AFTER_SOFT_END_TIME = 2815;
    • TIME_WINDOW_SOFT_END_TIME_AFTER_END_TIME = 2816;
    • TIME_WINDOW_COST_BEFORE_SOFT_START_TIME_SET_AND_MULTIPLE_WINDOWS = 2817;
    • TIME_WINDOW_COST_AFTER_SOFT_END_TIME_SET_AND_MULTIPLE_WINDOWS = 2818;
    • TRANSITION_ATTRIBUTES_ERROR = 30;
    • TRANSITION_ATTRIBUTES_INVALID_cost = 3,000;
    • TRANSITION_ATTRIBUTES_INVALID_COST_PER_KILOMETER = 3001;
    • TRANSITION_ATTRIBUTES_DUPLICATE_TAG_PAIR = 3002;
    • TRANSITION_ATTRIBUTES_DISTANCE_LIMIT_MAX_METERS_UNSUPPORTED = 3003;
    • TRANSITION_ATTRIBUTES_UNSPECIFIED_SOURCE_TAGS = 3004;
    • TRANSITION_ATTRIBUTES_CONFLICTING_SOURCE_TAGS_FIELDS = 3005;
    • TRANSITION_ATTRIBUTES_UNSPECIFIED_DESTINATION_TAGS = 3006;
    • TRANSITION_ATTRIBUTES_CONFLICTING_DESTINATION_TAGS_FIELDS = 3007;
    • TRANSITION_ATTRIBUTES_DELAY_DURATION_NEGATIVE_OR_NAN = 3008;
    • TRANSITION_ATTRIBUTES_DELAY_DURATION_EXCEEDS_GLOBAL_DURATION = 3009;
  • AMOUNT_ERROR = 31;
    • AMOUNT_NEGATIVE_VALUE = 3,100;
  • LOAD_LIMIT_ERROR = 33;
    • LOAD_LIMIT_INVALID_COST_ABOVE_SOFT_MAX = 3303;
    • LOAD_LIMIT_SOFT_MAX_WITHOUT_COST_ABOVE_SOFT_MAX = 3304;
    • LOAD_LIMIT_COST_ABOVE_SOFT_MAX_WITHOUT_SOFT_MAX = 3,305;
    • LOAD_LIMIT_NEGATIVE_SOFT_MAX = 3306;
    • LOAD_LIMIT_MIXED_DEMAND_TYPE = 3307;
    • LOAD_LIMIT_MAX_LOAD_NEGATIVE_VALUE = 3308;
    • LOAD_LIMIT_SOFT_MAX_ABOVE_MAX = 3,309;
  • INTERVAL_ERROR = 34;
    • INTERVAL_MIN_EXCEEDS_MAX = 3401;
    • INTERVAL_NEGATIVE_MIN = 3402;
    • INTERVAL_NEGATIVE_MAX = 3403;
    • INTERVAL_MIN_EXCEEDS_CAPACITY = 3404;
    • INTERVAL_MAX_EXCEEDS_CAPACITY = 3405;
  • DISTANCE_LIMIT_ERROR = 36;
    • DISTANCE_LIMIT_INVALID_COST_AFTER_SOFT_MAX = 3601;
    • DISTANCE_LIMIT_SOFT_MAX_WITHOUT_COST_AFTER_SOFT_MAX = 3602;
    • DISTANCE_LIMIT_cost_AFTER_SOFT_MAX_WITHOUT_SOFT_MAX = 3,603;
    • DISTANCE_LIMIT_NEGATIVE_MAX = 3604;
    • DISTANCE_LIMIT_NEGATIVE_SOFT_MAX = 3605;
    • DISTANCE_LIMIT_SOFT_MAX_LARGER_THAN_MAX = 3606;
  • DURATION_LIMIT_ERROR = 38;
    • DURATION_LIMIT_MAX_DURATION_NEGATIVE_OR_NAN = 3800;
    • DURATION_LIMIT_SOFT_MAX_DURATION_NEGATIVE_OR_NAN = 3801;
    • DURATION_LIMIT_INVALID_COST_PER_HOUR_AFTER_SOFT_MAX = 3802;
    • DURATION_LIMIT_SOFT_MAX_WITHOUT_COST_AFTER_SOFT_MAX = 3803;
    • DURATION_LIMIT_COST_AFTER_SOFT_MAX_WITHOUT_SOFT_MAX = 3804;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_DURATION_NEGATIVE_OR_NAN = 3805;
    • DURATION_LIMIT_INVALID_COST_AFTER_QUADRATIC_SOFT_MAX = 3806;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_COST_PER_SQUARE_HOUR = 3807;
    • DURATION_LIMIT_COST_PER_SQUARE_HOUR_WITHOUT_QUADRATIC_SOFT_MAX = 3808;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_MAX = 3809;
    • DURATION_LIMIT_SOFT_MAX_LARGER_THAN_MAX = 3810;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_LARGER_THAN_MAX = 3811;
    • DURATION_LIMIT_DIFF_BETWEEN_MAX_AND_QUADRATIC_SOFT_MAX_TOO_LARGE = 3812;
    • DURATION_LIMIT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3813;
    • DURATION_LIMIT_SOFT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3814;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3815;
  • SHIPMENT_ERROR = 40;
    • SHIPMENT_PD_LIMIT_WITHOUT_PICKUP_AND_DELIVERY = 4014;
    • SHIPMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_NEGATIVE_OR_NAN = 4,000;
    • SHIPMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4001;
    • SHIPMENT_PD_RELATIVE_DETOUR_LIMIT_ไม่ถูกต้อง = 4015;
    • SHIPMENT_PD_DETOUR_LIMIT_AND_EXTRA_VISIT_DURATION = 4016;
    • SHIPMENT_PD_TIME_LIMIT_DURATION_NEGATIVE_OR_NAN = 4002;
    • SHIPMENT_PD_TIME_LIMIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4003;
    • SHIPMENT_EMPTY_SHIPMENT_TYPE = 4004;
    • SHIPMENT_NO_PICKUP_NO_DELIVERY = 4005;
    • SHIPMENT_ไม่ถูกต้อง_PENALTY_cost = 4006;
    • SHIPMENT_ALLOWED_VEHICLE_INDEX_OUT_OF_BOUNDS = 4007;
    • SHIPMENT_DUPLICATE_ALLOWED_VEHICLE_INDEX = 4008;
    • SHIPMENT_INCONSISTENT_cost_FOR_VEHICLE_SIZE_WITHOUT_INDEX = 4009;
    • SHIPMENT_INCONSISTENT_COST_FOR_VEHICLE_SIZE_WITH_INDEX = 4010;
    • SHIPMENT_ไม่ถูกต้อง_COST_FOR_VEHICLE = 4011;
    • SHIPMENT_COST_FOR_VEHICLE_INDEX_OUT_OF_BOUNDS = 4012;
    • SHIPMENT_DUPLICATE_cost_FOR_VEHICLE_INDEX = 4013;
  • VEHICLE_ERROR = 42;
    • VEHICLE_EMPTY_REQUIRED_OPERATOR_TYPE = 4200;
    • VEHICLE_DUPLICATE_REQUIRED_OPERATOR_TYPE = 4201;
    • VEHICLE_NO_OPERATOR_WITH_REQUIRED_OPERATOR_TYPE = 4202;
    • VEHICLE_EMPTY_START_TAG = 4203;
    • VEHICLE_DUPLICATE_START_TAG = 4204;
    • VEHICLE_EMPTY_END_TAG = 4205;
    • VEHICLE_DUPLICATE_END_TAG = 4206;
    • VEHICLE_PRIVACY_VISIT_DURATION_NEGATIVE_OR_NAN = 4207;
    • VEHICLE_EXTRA_VISIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4208;
    • VEHICLE_PRIVACY_VISIT_DURATION_EMPTY_KEY = 4209;
    • VEHICLE_FIRST_SHIPMENT_INDEX_OUT_OF_BOUNDS = 4210;
    • VEHICLE_FIRST_SHIPMENT_IGNORED = 4211;
    • VEHICLE_FIRST_SHIPMENT_NOT_BOUND = 4212;
    • VEHICLE_LAST_SHIPMENT_INDEX_OUT_OF_BOUNDS = 4213;
    • VEHICLE_LAST_SHIPMENT_IGNORED = 4214;
    • VEHICLE_LAST_SHIPMENT_NOT_BOUND = 4215;
    • VEHICLE_IGNORED_WITH_USED_IF_ROUTE_IS_EMPTY = 4216;
    • VEHICLE_INVALID_COST_PER_KILOMETER = 4217;
    • VEHICLE_INVALID_COST_PER_HOUR = 4218;
    • VEHICLE_INVALID_COST_PER_TRAVELED_HOUR = 4219;
    • VEHICLE_INVALID_FIXED_cost = 4220;
    • VEHICLE_INVALID_TRAVEL_DURATION_MULTIPLE = 4221;
    • VEHICLE_TRAVEL_DURATION_MULTIPLE_WITH_SHIPMENT_PD_DETOUR_LIMITS = 4223;
    • VEHICLE_MATRIX_INDEX_WITH_SHIPMENT_PD_DETOUR_LIMITS = 4224;
    • VEHICLE_MINIMUM_DURATION_LONGER_THAN_DURATION_LIMIT = 4222;
  • VISIT_REQUEST_ERROR = 44;
    • VISIT_REQUEST_EMPTY_TAG = 4,400;
    • VISIT_REQUEST_DUPLICATE_TAG = 4401;
    • VISIT_REQUEST_DURATION_NEGATIVE_OR_NAN = 4404;
    • VISIT_REQUEST_DURATION_EXCEEDS_GLOBAL_DURATION = 4405;
  • PRECEDENCE_ERROR = 46;
  • BREAK_ERROR = 48;
    • BREAK_RULE_EMPTY = 4,800;
    • BREAK_REQUEST_UNSPECIFIED_DURATION = 4801;
    • BREAK_REQUEST_UNSPECIFIED_EARLIEST_START_TIME = 4802;
    • BREAK_REQUEST_UNSPECIFIED_LATEST_START_TIME = 4803;
    • BREAK_REQUEST_DURATION_NEGATIVE_OR_NAN = 4804; = 4804;
    • BREAK_REQUEST_LATEST_START_TIME_BEFORE_EARLIEST_START_TIME = 4805;
    • BREAK_REQUEST_EARLIEST_START_TIME_BEFORE_GLOBAL_START_TIME = 4806;
    • BREAK_REQUEST_LATEST_END_TIME_AFTER_GLOBAL_END_TIME = 4807;
    • BREAK_REQUEST_NON_SCHEDULABLE = 4808;
    • BREAK_FREQUENCY_MAX_INTER_BREAK_DURATION_NEGATIVE_OR_NAN = 4809;
    • BREAK_FREQUENCY_MIN_BREAK_DURATION_NEGATIVE_OR_NAN = 4,810;
    • BREAK_FREQUENCY_MIN_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION = 4811;
    • BREAK_FREQUENCY_MAX_INTER_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION = 4812;
    • BREAK_REQUEST_DURATION_EXCEEDS_GLOBAL_DURATION = 4813;
    • BREAK_FREQUENCY_MISSING_MAX_INTER_BREAK_DURATION = 4814;
    • BREAK_FREQUENCY_MISSING_MIN_BREAK_DURATION = 4815;
  • ข้อผิดพลาด SHIPMENT_TYPE_INCOMPATIBILITY_ERROR = 50;
    • SHIPMENT_TYPE_INCOMPATIBILITY_EMPTY_TYPE = 5001;
    • SHIPMENT_TYPE_INCOMPATIBILITY_LESS_THAN_TWO_TYPES = 5002;
    • SHIPMENT_TYPE_INCOMPATIBILITY_DUPLICATE_TYPE = 5003;
    • SHIPMENT_TYPE_INCOMPATIBILITY_INVALID_INCOMPATIBILITY_mode = 5004;
    • SHIPMENT_TYPE_INCOMPATIBILITY_TOO_MANY_INCOMPATIBILITIES = 5005;
  • SHIPMENT_TYPE_REQUIREMENT_ERROR = 52;
    • SHIPMENT_TYPE_REQUIREMENT_NO_REQUIRED_TYPE = 52001;
    • SHIPMENT_TYPE_REQUIREMENT_NO_DEPENDENT_TYPE = 52002;
    • SHIPMENT_TYPE_REQUIREMENT_INVALID_REQUIREMENT_mode = 52003;
    • SHIPMENT_TYPE_REQUIREMENT_TOO_MANY_REQUIREMENTS = 52004;
    • SHIPMENT_TYPE_REQUIREMENT_EMPTY_REQUIRED_TYPE = 52005;
    • SHIPMENT_TYPE_REQUIREMENT_DUPLICATE_REQUIRED_TYPE = 52006;
    • SHIPMENT_TYPE_REQUIREMENT_NO_REQUIRED_TYPE_FOUND = 52007;
    • SHIPMENT_TYPE_REQUIREMENT_EMPTY_DEPENDENT_TYPE = 52008;
    • SHIPMENT_TYPE_REQUIREMENT_DUPLICATE_DEPENDENT_TYPE = 52009;
    • SHIPMENT_TYPE_REQUIREMENT_SELF_DEPENDENT_TYPE = 52010;
    • SHIPMENT_TYPE_REQUIREMENT_GRAPH_HAS_CYCLES = 52011;
  • VEHICLE_OPERATOR_ERROR = 54;
    • VEHICLE_OPERATOR_EMPTY_TYPE = 5400;
    • VEHICLE_OPERATOR_MULTIPLE_START_TIME_WINDOWS = 5401;
    • VEHICLE_OPERATOR_SOFT_START_TIME_WINDOW = 5402;
    • VEHICLE_OPERATOR_MULTIPLE_END_TIME_WINDOWS = 5403;
    • VEHICLE_OPERATOR_SOFT_END_TIME_WINDOW = 5404;
  • DURATION_SECONDS_MATRIX_ERROR = 56;
    • DURATION_SECONDS_MATRIX_DURATION_NEGATIVE_OR_NAN = 5,600;
    • DURATION_SECONDS_MATRIX_DURATION_EXCEEDS_GLOBAL_DURATION = 5,601;
display_name

string

ชื่อที่แสดงของข้อผิดพลาด

fields[]

FieldReference

บริบทของข้อผิดพลาดอาจเกี่ยวข้องกับช่อง 0, 1 (ส่วนใหญ่) หรือมีช่องมากกว่านั้น เช่น การอ้างอิงยานพาหนะหมายเลข 4 และการมารับสินค้าที่ร้าน #2 อาจมีลักษณะดังนี้

fields { name: "vehicles" index: 4}
fields { name: "shipments" index: 2 sub_field {name: "pickups" index: 0} }

อย่างไรก็ตาม โปรดทราบว่า Cardinality ของ fields ไม่ควรเปลี่ยนแปลงสำหรับรหัสข้อผิดพลาดที่ระบุ

error_message

string

สตริงที่มนุษย์อ่านได้ซึ่งอธิบายถึงข้อผิดพลาด มีการแมปแบบ 1:1 ระหว่าง code และ error_message (เมื่อโค้ด != "UNSPECIFIED")

ความเสถียร: ไม่เสถียร: ข้อความแสดงข้อผิดพลาดที่เกี่ยวข้องกับ code ที่ระบุอาจมีการเปลี่ยนแปลง (หวังว่าจะชี้แจงให้ทราบได้) เมื่อเวลาผ่านไป โปรดใช้ display_name และ code แทน

offending_values

string

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

FieldReference

ระบุบริบทสำหรับข้อผิดพลาดในการตรวจสอบความถูกต้อง FieldReference จะอ้างอิงช่องที่ระบุในไฟล์นี้เสมอและใช้โครงสร้างลำดับชั้นเดียวกัน ตัวอย่างเช่น เราอาจระบุองค์ประกอบ #2 ของ start_time_windows ของยานพาหนะ #5 โดยใช้:

name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }

แต่เราไม่ระบุเอนทิตีระดับบนสุด เช่น OptimizeToursRequest หรือ ShipmentModel เพื่อไม่ให้ข้อความแสดงมากเกินไป

ช่อง
name

string

ชื่อช่อง เช่น "ยานพาหนะ"

sub_field

FieldReference

ช่องย่อยที่ซ้อนกันซ้ำๆ หากจำเป็น

ฟิลด์สหภาพ index_or_key

index_or_key ต้องเป็นค่าใดค่าหนึ่งต่อไปนี้เท่านั้น

index

int32

ดัชนีของช่องหากมีค่าซ้ำ

key

string

คีย์ ถ้าช่องนี้เป็นแผนที่

OutputConfig

ระบุปลายทางสำหรับผลลัพธ์จาก [BatchOptimizeTours][google.maps.redirectoptimizer.v1.RouteOptimizationService.BatchOptimizeTours]

ช่อง
data_format

DataFormat

ต้องระบุ รูปแบบข้อมูลเอาต์พุต

ฟิลด์สหภาพ destination ต้องระบุ destination ต้องเป็นค่าใดค่าหนึ่งต่อไปนี้เท่านั้น
gcs_destination

GcsDestination

ตำแหน่งของ Google Cloud Storage ที่จะเขียนเอาต์พุต

การจัดส่ง

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

ช่อง
display_name

string

ชื่อที่แสดงที่ผู้ใช้กำหนดของการจัดส่ง โดยมีความยาวได้สูงสุด 63 อักขระและใช้อักขระ UTF-8 ได้

pickups[]

VisitRequest

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

deliveries[]

VisitRequest

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

load_demands

map<string, Load>

น้ำหนักของการขนส่ง (เช่น น้ำหนัก ปริมาณ จำนวนพาเลต ฯลฯ) คีย์ในแผนที่ควรเป็นตัวระบุที่อธิบายประเภทของการโหลดที่เกี่ยวข้อง และควรรวมหน่วยไว้ด้วย ยกตัวอย่างเช่น "weight_kg", "Volume_gallons", "pallet_count" ฯลฯ หากคีย์ที่ระบุไม่ปรากฏในแผนที่ โหลดที่เกี่ยวข้องจะถือเป็นค่าว่าง

allowed_vehicle_indices[]

int32

ชุดยานพาหนะที่สามารถดำเนินการจัดส่งนี้ได้ หากปล่อยว่างไว้ ยานพาหนะทุกคันอาจทำงานได้ ระบบระบุยานพาหนะตามดัชนีไว้ในรายชื่อvehiclesของShipmentModel

costs_per_vehicle[]

double

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

  • จำนวนองค์ประกอบเท่ากับ costs_per_vehicle_indices costs_per_vehicle[i] สอดคล้องกับพาหนะ costs_per_vehicle_indices[i] ของรุ่น
  • มีจำนวนองค์ประกอบเท่ากับที่มีในรุ่นดังกล่าว องค์ประกอบที่ i สอดคล้องกับยานพาหนะ #i ของรุ่นดังกล่าว

ค่าใช้จ่ายเหล่านี้ต้องอยู่ในหน่วยเดียวกับ penalty_cost และต้องไม่เป็นค่าลบ ปล่อยช่องนี้ว่างไว้ หากไม่มีค่าใช้จ่ายดังกล่าว

costs_per_vehicle_indices[]

int32

ดัชนียานพาหนะที่ costs_per_vehicle นำไปใช้ หากเว้นว่างไว้ ข้อมูลนั้นต้องมีจำนวนองค์ประกอบเท่ากับ costs_per_vehicle ไม่สามารถระบุดัชนีรถได้มากกว่า 1 ครั้ง หากไม่รวมยานพาหนะจาก costs_per_vehicle_indices จะมีต้นทุนเป็น 0

pickup_to_delivery_absolute_detour_limit

Duration

ระบุเวลาเปลี่ยนเส้นทางสัมบูรณ์สูงสุดเทียบกับเส้นทางที่สั้นที่สุดจากการรับสินค้าจนถึงการนำส่ง หากระบุ ค่านั้นต้องไม่ติดลบและการจัดส่งต้องมีการรับสินค้าและการนำส่งเป็นอย่างน้อย

เช่น ระบุระยะเวลาที่สั้นที่สุดในการเดินทางจากตัวเลือกการรับสินค้าที่เลือกไว้ไปยังทางเลือกการจัดส่งที่เลือกโดยตรง จากนั้นการตั้งค่า pickup_to_delivery_absolute_detour_limit จะบังคับใช้สิ่งต่อไปนี้

start_time(delivery) - start_time(pickup) <=
t + pickup_to_delivery_absolute_detour_limit

หากระบุทั้งขีดจำกัดแบบสัมพัทธ์และสัมบูรณ์ในการจัดส่งเดียวกัน ระบบจะใช้ขีดจำกัดของข้อจำกัดที่มากขึ้นสำหรับคู่สินค้าที่จะมารับ/นำส่งแต่ละคู่ ตั้งแต่วันที่ 10/10/2017 เป็นต้นไป ระบบจะรองรับการเปลี่ยนเส้นทางในกรณีที่ระยะเวลาการเดินทางไม่ได้ขึ้นอยู่กับยานพาหนะเท่านั้น

pickup_to_delivery_time_limit

Duration

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

shipment_type

string

สตริงที่ไม่ว่างเปล่าที่ระบุ "ประเภท" สำหรับการจัดส่งนี้ ฟีเจอร์นี้สามารถใช้เพื่อกำหนดความไม่เข้ากันหรือข้อกำหนดระหว่าง shipment_types (ดู shipment_type_incompatibilities ถึง shipment_type_requirements ใน ShipmentModel)

แตกต่างจาก visit_types ที่ระบุไว้สำหรับการเข้าชมครั้งเดียว: การรับสินค้า/การนำส่งทั้งหมดที่เป็นของการจัดส่งเดียวกันจะใช้ shipment_type เดียวกัน

label

string

ระบุป้ายกำกับสำหรับการจัดส่งนี้ ป้ายกำกับนี้มีการรายงานในคำตอบใน shipment_label ของ ShipmentRoute.Visit ที่เกี่ยวข้อง

ignore

bool

หากเป็นจริง ให้ข้ามการจัดส่งนี้ แต่อย่าใช้ penalty_cost

การละเว้นการจัดส่งจะทำให้เกิดข้อผิดพลาดในการตรวจสอบเมื่อมี shipment_type_requirements ในโมเดล

อนุญาตให้เพิกเฉยต่อการจัดส่งที่ดำเนินการในinjected_first_solution_routesหรือinjected_solution_constraint เครื่องมือแก้โจทย์จะนำการเข้าชมรับสินค้า/นำส่งที่เกี่ยวข้องออกจากเส้นทางที่ดำเนินการอยู่ precedence_rules ที่อ้างอิงการจัดส่งที่ละเว้นไปก็จะไม่มีผลเช่นกัน

penalty_cost

double

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

สําคัญ: หากไม่ได้ระบุบทลงโทษนี้ จะถือว่าไม่มีที่สิ้นสุด กล่าวคือ ต้องดําเนินการจัดส่งให้เสร็จสมบูรณ์

pickup_to_delivery_relative_detour_limit

double

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

เช่น ระบุระยะเวลาที่สั้นที่สุดในการเดินทางจากตัวเลือกการรับสินค้าที่เลือกไว้ไปยังทางเลือกการจัดส่งที่เลือกโดยตรง จากนั้นการตั้งค่า pickup_to_delivery_relative_detour_limit จะบังคับใช้สิ่งต่อไปนี้

start_time(delivery) - start_time(pickup) <=
std::ceil(t * (1.0 + pickup_to_delivery_relative_detour_limit))

หากระบุทั้งขีดจำกัดแบบสัมพัทธ์และสัมบูรณ์ในการจัดส่งเดียวกัน ระบบจะใช้ขีดจำกัดของข้อจำกัดที่มากขึ้นสำหรับคู่สินค้าที่จะมารับ/นำส่งแต่ละคู่ ตั้งแต่วันที่ 10/10/2017 เป็นต้นไป ระบบจะรองรับการเปลี่ยนเส้นทางในกรณีที่ระยะเวลาการเดินทางไม่ได้ขึ้นอยู่กับยานพาหนะเท่านั้น

โหลด

เมื่อดำเนินการเข้าชม ระบบอาจรวมจำนวนเงินที่กำหนดไว้ล่วงหน้าลงในน้ำหนักบรรทุกของยานพาหนะหากเป็นการรับสินค้า หรือหักลบหากเป็นการนำส่ง ข้อความนี้จะระบุจำนวนเงินดังกล่าว ดูload_demands

ช่อง
amount

int64

ปริมาณน้ำหนักบรรทุกของยานพาหนะที่ใช้ในการเยี่ยมชมยานพาหนะที่เกี่ยวข้องจะแตกต่างกันไป เนื่องจากเป็นจำนวนเต็ม จึงควรผู้ใช้เลือกหน่วยที่เหมาะสมเพื่อไม่ให้สูญเสียความแม่นยำ ต้องเท่ากับ ≥ 0

VisitRequest

ขอเข้าชมในยานพาหนะได้ด้วย โดยมีการระบุตำแหน่งทางภูมิศาสตร์ (หรือ 2 ตำแหน่ง ดูด้านล่าง) เวลาเปิดและปิดซึ่งแสดงเป็นกรอบเวลา และระยะเวลาการให้บริการ (เวลาที่ยานพาหนะใช้เมื่อมาถึงเพื่อไปรับหรือส่งคืนสินค้า)

ช่อง
arrival_location

LatLng

ตำแหน่งทางภูมิศาสตร์ที่ยานพาหนะมาถึงเมื่อปฏิบัติVisitRequest หากรูปแบบการจัดส่งมีเมทริกซ์ระยะทางของระยะเวลา ก็ต้องไม่ระบุ arrival_location

arrival_waypoint

Waypoint

จุดอ้างอิงที่ยานพาหนะมาถึงเมื่อออกVisitRequest หากรูปแบบการจัดส่งมีเมทริกซ์ระยะทางของระยะเวลา ก็ต้องไม่ระบุ arrival_waypoint

departure_location

LatLng

ตำแหน่งทางภูมิศาสตร์ที่พาหนะออกเดินทางหลังจาก VisitRequest นี้เสร็จสมบูรณ์ ละเว้นได้หากเหมือนกับ arrival_location หากรูปแบบการจัดส่งมีเมทริกซ์ระยะทางของระยะเวลา ก็ต้องไม่ระบุ departure_location

departure_waypoint

Waypoint

จุดอ้างอิงที่ยานพาหนะจะออกหลังจากเสร็จสิ้น VisitRequest นี้ ละเว้นได้หากเหมือนกับ arrival_waypoint หากรูปแบบการจัดส่งมีเมทริกซ์ระยะทางของระยะเวลา ก็ต้องไม่ระบุ departure_waypoint

tags[]

string

ระบุแท็กที่แนบมากับคำขอการเข้าชม ไม่อนุญาตให้มีสตริงว่างหรือซ้ำกัน

time_windows[]

TimeWindow

กรอบเวลาที่จํากัดเวลาถึงที่การเข้าชม โปรดทราบว่ายานพาหนะอาจออกเดินทางนอกกรอบเวลาถึง เช่น เวลาถึง + ระยะเวลาไม่จำเป็นต้องอยู่ในกรอบเวลา ซึ่งอาจส่งผลให้ต้องใช้เวลารอหากยานพาหนะมาถึงก่อน TimeWindow.start_time

ไม่มี TimeWindow หมายความว่าพาหนะสามารถเดินทางได้ทุกเมื่อ

กรอบเวลาต้องไม่ต่อเนื่อง กล่าวคือ ไม่มีกรอบเวลาต้องทับซ้อนหรืออยู่ติดกันและต้องเรียงกันมากขึ้น

ตั้งค่า cost_per_hour_after_soft_end_time และ soft_end_time ได้ในกรณีที่มีกรอบเวลาเดียวเท่านั้น

duration

Duration

ระยะเวลาการเข้าชม เช่น เวลาที่รถใช้ระหว่างขาเข้าและขาออก (หากต้องการรวมกับระยะเวลารอที่เป็นไปได้ โปรดดู time_windows)

cost

double

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

load_demands

map<string, Load>

ความต้องการโหลดของคำขอการเข้าชมนี้ ซึ่งเหมือนกับช่อง Shipment.load_demands ยกเว้นว่าจะใช้กับ VisitRequest นี้เท่านั้นแทนที่จะเป็น Shipment ทั้งช่อง ความต้องการที่ระบุที่นี่จะเพิ่มไปยังความต้องการที่ระบุไว้ในShipment.load_demands

visit_types[]

string

ระบุประเภทการเข้าชม ซึ่งอาจใช้ในการจัดสรรเวลาเพิ่มเติมที่ต้องใช้ในการเดินทางไปยังยานพาหนะนี้ให้เสร็จสมบูรณ์ (ดู Vehicle.extra_visit_duration_for_visit_type)

ประเภทหนึ่งๆ จะแสดงได้เพียงครั้งเดียวเท่านั้น

label

string

ระบุป้ายกำกับสำหรับ VisitRequest นี้ ป้ายกำกับนี้ได้รับการรายงานในการตอบกลับเป็น visit_label ใน ShipmentRoute.Visit ที่เกี่ยวข้อง

ShipmentModel

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

  • ค่าใช้จ่ายในการกำหนดเส้นทางพาหนะ (ผลรวมของค่าใช้จ่ายต่อเวลาทั้งหมด ค่าใช้จ่ายต่อเวลาเดินทาง และค่าใช้จ่ายคงที่สำหรับยานพาหนะทุกคัน)
  • บทลงโทษด้านการจัดส่งที่ไม่สมบูรณ์
  • ต้นทุนของระยะเวลาการจัดส่งทั่วโลก
ช่อง
shipments[]

Shipment

ชุดการจัดส่งที่ต้องดำเนินการในโมเดล

vehicles[]

Vehicle

ชุดยานพาหนะที่สามารถใช้ในการเข้าชม

global_start_time

Timestamp

เวลาเริ่มต้นและสิ้นสุดโดยรวมของโมเดล: ไม่มีเวลานอกช่วงนี้ถือว่าถูกต้อง

ช่วงเวลาของโมเดลต้องน้อยกว่า 1 ปี กล่าวคือ global_end_time และ global_start_time ต้องอยู่ห่างกันไม่เกิน 31536000 วินาที

เมื่อใช้ช่อง cost_per_*hour คุณอาจต้องตั้งค่ากรอบเวลานี้ให้มีระยะเวลาสั้นลงเพื่อเพิ่มประสิทธิภาพ (เช่น หากคุณสร้างโมเดลวันเดียว คุณควรกำหนดขีดจำกัดเวลาทั่วโลกเป็นวันนั้น) หากไม่ได้ตั้งค่า ระบบจะใช้ 00:00:00 UTC วันที่ 1 มกราคม 1970 (เช่น seconds: 0, nanos: 0) เป็นค่าเริ่มต้น

global_end_time

Timestamp

หากไม่ได้ตั้งค่า ระบบจะใช้ 00:00:00 UTC วันที่ 1 มกราคม 1971 (เช่น วินาที 31536000, nanos: 0) เป็นค่าเริ่มต้น

global_duration_cost_per_hour

double

"ระยะเวลาทั่วโลก" ของแผนโดยรวมคือความแตกต่างระหว่างเวลาเริ่มต้นที่มีประสิทธิภาพเร็วที่สุดกับเวลาสิ้นสุดที่มีประสิทธิภาพล่าสุดของยานพาหนะทั้งหมด เช่น ผู้ใช้กำหนดค่าใช้จ่ายต่อชั่วโมงให้กับจำนวนนั้นได้เพื่อพยายามเพิ่มประสิทธิภาพให้งานเสร็จเร็วที่สุด เป็นต้น ค่าใช้จ่ายนี้ต้องอยู่ในหน่วยเดียวกับ Shipment.penalty_cost

duration_distance_matrices[]

DurationDistanceMatrix

ระบุระยะเวลาและเมทริกซ์ระยะทางที่ใช้ในโมเดล หากช่องนี้เว้นว่างไว้ ระบบจะใช้ Google Maps หรือระยะทางทางภูมิศาสตร์แทน ทั้งนี้ขึ้นอยู่กับค่าของช่อง use_geodesic_distances หากไม่ว่างเปล่า use_geodesic_distances ต้องไม่เป็นจริง และ duration_distance_matrix_src_tags และ duration_distance_matrix_dst_tags ต้องไม่ว่างเปล่า

ตัวอย่างการใช้

  • ตำแหน่งที่ตั้งมี 2 แห่ง คือ locA และ locB
  • ยานพาหนะ 1 คันกำลังสตาร์ทที่ locA และสิ้นสุดที่ locA
  • 1 คำขอเข้าชมการรับสินค้าที่ locB
model {
  vehicles { start_tags: "locA"  end_tags: "locA" }
  shipments { pickups { tags: "locB" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_dst_tags: "locA"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrices {
    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
    }
  }
}
  • สถานที่มี 3 แห่ง ได้แก่ locA, locB และ locC
  • ยานพาหนะ 1 คันกำลังสตาร์ทที่ locA และสิ้นสุดที่ locB โดยใช้เมทริกซ์ "เร็ว"
  • มียานพาหนะ 1 คันกำลังสตาร์ทที่ locB และสิ้นสุดที่ locB โดยใช้เมทริกซ์ "ช้า"
  • ยานพาหนะ 1 คันกำลังสตาร์ทที่ locB และสิ้นสุดที่ locB โดยใช้เมทริกซ์ "เร็ว"
  • คำขอไปรับสินค้าที่ locC 1 รายการ
model {
  vehicles { start_tags: "locA" end_tags: "locB" start_tags: "fast" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "slow" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "fast" }
  shipments { pickups { tags: "locC" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_src_tags: "locC"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrix_dst_tags: "locC"
  duration_distance_matrices {
    vehicle_start_tag: "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
    }
  }
  duration_distance_matrices {
    vehicle_start_tag: "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
    }
  }
}
duration_distance_matrix_src_tags[]

string

แท็กกำหนดแหล่งที่มาของระยะเวลาและเมทริกซ์ระยะทาง duration_distance_matrices(i).rows(j) กำหนดระยะเวลาและระยะทางจากการเข้าชมด้วยแท็ก duration_distance_matrix_src_tags(j) ไปยังการเข้าชมอื่นๆ ในเมทริกซ์ 1

แท็กจะสอดคล้องกับ VisitRequest.tags หรือ Vehicle.start_tags VisitRequest หรือ Vehicle ที่ระบุต้องตรงกับแท็กเดียวในช่องนี้ โปรดทราบว่าแท็กต้นทาง ปลายทาง และเมทริกซ์ของ Vehicle อาจเหมือนกัน ในทำนองเดียวกัน แท็กต้นทางและปลายทางของ VisitRequest อาจเหมือนกัน แท็กทั้งหมดต้องไม่ซ้ำกันและต้องไม่มีสตริงที่ว่างเปล่า หากช่องนี้มีข้อมูล ค่า duration_distance_matrices ต้องไม่ว่างเปล่า

duration_distance_matrix_dst_tags[]

string

แท็กที่กำหนดปลายทางของระยะเวลาและเมทริกซ์ระยะทาง duration_distance_matrices(i).rows(j).durations(k) (resp. duration_distance_matrices(i).rows(j).meters(k)) กำหนดระยะเวลา (ระยะทาง) ของการเดินทางจากการเข้าชมที่มีแท็ก duration_distance_matrix_src_tags(j) ไปยังการเข้าชมที่มีแท็ก duration_distance_matrix_dst_tags(k) ในเมทริกซ์ 1

แท็กจะสอดคล้องกับ VisitRequest.tags หรือ Vehicle.start_tags VisitRequest หรือ Vehicle ที่ระบุต้องตรงกับแท็กเดียวในช่องนี้ โปรดทราบว่าแท็กต้นทาง ปลายทาง และเมทริกซ์ของ Vehicle อาจเหมือนกัน ในทำนองเดียวกัน แท็กต้นทางและปลายทางของ VisitRequest อาจเหมือนกัน แท็กทั้งหมดต้องไม่ซ้ำกันและต้องไม่มีสตริงที่ว่างเปล่า หากช่องนี้มีข้อมูล ค่า duration_distance_matrices ต้องไม่ว่างเปล่า

transition_attributes[]

TransitionAttributes

เพิ่มแอตทริบิวต์การเปลี่ยนลงในโมเดลแล้ว

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

ชุด shipping_types ที่ใช้ร่วมกันไม่ได้ (ดู ShipmentTypeIncompatibility)

shipment_type_requirements[]

ShipmentTypeRequirement

ชุดข้อกำหนดของ shipment_type (ดู ShipmentTypeRequirement)

precedence_rules[]

PrecedenceRule

ชุดกฎลำดับความสำคัญซึ่งต้องบังคับใช้ในโมเดล

max_active_vehicles

int32

จำกัดจำนวนยานพาหนะที่ใช้งานอยู่สูงสุด ยานพาหนะจอดอยู่หากเส้นทางมีการจัดส่งอย่างน้อย 1 ครั้ง ซึ่งสามารถใช้เพื่อจำกัดจำนวนเส้นทางในกรณีที่มีผู้ขับขี่น้อยกว่ายานพาหนะและยานพาหนะจำนวนมากเป็นยานพาหนะต่างกัน จากนั้นการเพิ่มประสิทธิภาพจะเลือกชุดย่อยของยานพาหนะที่ดีที่สุดที่จะใช้ ต้องเป็นเชิงบวกอย่างเคร่งครัด

DurationDistanceMatrix

ระบุระยะเวลาและเมทริกซ์ระยะทางจากตำแหน่งการเยี่ยมชมและตำแหน่งเริ่มต้นของรถเพื่อไปยังสถานที่สุดท้ายของรถ

ช่อง
rows[]

Row

ระบุแถวของระยะเวลาและเมทริกซ์ระยะทาง ต้องมีองค์ประกอบเท่ากับ ShipmentModel.duration_distance_matrix_src_tags

vehicle_start_tag

string

แท็กระบุว่ายานพาหนะใดที่ใช้ระยะเวลานี้และเมตริกระยะทางนี้ หากเว้นว่างไว้ การตั้งค่านี้จะมีผลกับยานพาหนะทั้งหมด และจะมีเมทริกซ์ได้เพียงรายการเดียว

การสตาร์ทรถแต่ละครั้งต้องตรงกับเมทริกซ์ 1 ตัวเท่านั้น เช่น ช่อง start_tags ช่องใดช่องหนึ่งต้องตรงกับ vehicle_start_tag ของเมทริกซ์ (และเมทริกซ์ดังกล่าวเท่านั้น)

เมทริกซ์ทั้งหมดต้องมี vehicle_start_tag ต่างกัน

แถว

ระบุแถวของเมทริกซ์ระยะเวลาและระยะทาง

ช่อง
durations[]

Duration

ค่าระยะเวลาของแถวหนึ่งๆ ต้องมีองค์ประกอบเท่ากับ ShipmentModel.duration_distance_matrix_dst_tags

meters[]

double

ค่าระยะทางสำหรับแถวที่กำหนด หากไม่มีค่าใช้จ่ายหรือข้อจํากัดอ้างอิงถึงระยะทางในโมเดล คุณสามารถเว้นว่างไว้ได้ ไม่เช่นนั้นต้องมีองค์ประกอบมากเท่ากับ durations

PrecedenceRule

กฎที่มีความสำคัญระหว่าง 2 เหตุการณ์ (แต่ละเหตุการณ์คือการรับสินค้าหรือการนำส่งการจัดส่ง): เหตุการณ์ที่ "ที่ 2" ต้องเริ่มขึ้นอย่างน้อย offset_duration หลังจากเริ่มต้น "ครั้งแรก"

ลำดับความสำคัญหลายรายการอาจอ้างอิงถึงเหตุการณ์เดียวกัน (หรือที่เกี่ยวข้อง) เช่น "การรับสินค้า ข. จะเกิดขึ้นหลังจากการรับสินค้า ก." และ "การรับสินค้า ข. จะเกิดขึ้นหลังการรับสินค้า ข."

นอกจากนี้ ลำดับความสำคัญจะมีผลเมื่อมีการดำเนินการจัดส่งทั้ง 2 รายการและระบบจะไม่สนใจลำดับความสำคัญเท่านั้น

ช่อง
first_is_delivery

bool

ระบุว่าเหตุการณ์ "แรก" เป็นการแสดงโฆษณาหรือไม่

second_is_delivery

bool

ระบุว่าเหตุการณ์ "ที่ 2" เป็นการแสดงโฆษณาหรือไม่

offset_duration

Duration

ค่าชดเชยระหว่างเหตุการณ์ "แรก" กับ "วินาที" ซึ่งอาจเป็นค่าลบได้

first_index

int32

ดัชนีการจัดส่งของเหตุการณ์ "แรก" ต้องระบุข้อมูลในช่องนี้

second_index

int32

ดัชนีการจัดส่งของเหตุการณ์ "ที่สอง" ต้องระบุข้อมูลในช่องนี้

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     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
ช่อง
vehicle_index

int32

ยานพาหนะที่วิ่งในเส้นทางที่ระบุตามดัชนีในแหล่งที่มา ShipmentModel

vehicle_label

string

ป้ายกำกับของยานพาหนะที่ใช้เส้นทางนี้ เท่ากับ ShipmentModel.vehicles(vehicle_index).label หากระบุ

vehicle_start_time

Timestamp

เวลาที่รถสตาร์ทรถตามเส้นทาง

vehicle_end_time

Timestamp

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

visits[]

Visit

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

transitions[]

Transition

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

has_traffic_infeasibilities

bool

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

  start_time(previous_visit) + duration(previous_visit) +
  travel_duration(previous_visit, next_visit) > start_time(next_visit)

การมาถึงที่ next_visit มีแนวโน้มที่จะเกิดขึ้นช้ากว่ากรอบเวลาปัจจุบัน เนื่องจากเวลาเดินทางโดยประมาณเพิ่มขึ้น travel_duration(previous_visit, next_visit) เนื่องจากการจราจรติดขัด นอกจากนี้ ช่วงพักอาจจำเป็นต้องซ้อนทับกับการเข้าชม เนื่องจากเวลาการเดินทางโดยประมาณที่เพิ่มขึ้น รวมถึงข้อจำกัดการเข้าชมหรือกรอบเวลาสำหรับช่วงพัก

route_polyline

EncodedPolyline

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

breaks[]

Break

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

metrics

AggregatedMetrics

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

route_costs

map<string, double>

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

route_total_cost

double

ค่าใช้จ่ายทั้งหมดของเส้นทาง ผลรวมของค่าใช้จ่ายทั้งหมดในแผนที่ค่าใช้จ่าย

พัก

ข้อมูลที่แสดงถึงการดำเนินการของช่วงพัก

ช่อง
start_time

Timestamp

เวลาเริ่มต้นการพัก

duration

Duration

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

EncodedPolyline

การแสดงโพลีไลน์ที่เข้ารหัส ดูข้อมูลเพิ่มเติมเกี่ยวกับการเข้ารหัสแบบโพลีไลน์ได้ที่ https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding

ช่อง
points

string

สตริงแสดงจุดที่เข้ารหัสของเส้นประกอบ

ทรานซิชัน

การเปลี่ยนระหว่าง 2 เหตุการณ์ในเส้นทาง ดูคำอธิบายของ ShipmentRoute

หากยานพาหนะไม่มี start_location และ/หรือ end_location เมตริกการเดินทางที่เกี่ยวข้องจะเป็น 0

ช่อง
travel_duration

Duration

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

travel_distance_meters

double

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

traffic_info_unavailable

bool

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

delay_duration

Duration

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

break_duration

Duration

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

wait_duration

Duration

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

total_duration

Duration

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

  • เข้าชม start_time ครั้งถัดไป (หรือ vehicle_end_time หากเป็นการเปลี่ยนครั้งสุดท้าย) - start_time ของการเปลี่ยนนี้
  • หาก ShipmentRoute.has_traffic_infeasibilities เป็น "เท็จ" จะมีการคงไว้ชั่วคราวเพิ่มเติมต่อไปนี้: `total_duration = travel_duration + delay_duration
  • break_duration +Wait_duration`
start_time

Timestamp

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

route_polyline

EncodedPolyline

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

vehicle_loads

map<string, VehicleLoad>

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

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

VehicleLoad

รายงานน้ำหนักบรรทุกจริงของยานพาหนะที่จุดใดจุดหนึ่งระหว่างเส้นทางสำหรับประเภทที่ระบุ (ดู Transition.vehicle_loads)

ช่อง
amount

int64

น้ำหนักบรรทุกของยานพาหนะสำหรับประเภทที่กำหนด โดยปกติแล้วหน่วยของการโหลดจะระบุตามประเภท ดูTransition.vehicle_loads

ไปที่

มีการขับรถไปตามเส้นทาง การเข้าชมนี้สอดคล้องกับการมารับสินค้าที่ร้านหรือการจัดส่งของ Shipment

ช่อง
shipment_index

int32

ดัชนีของช่อง shipments ในแหล่งที่มา ShipmentModel

is_pickup

bool

หากจริง การเข้าชมตรงกับการไปรับสินค้าที่ Shipment มิฉะนั้นจะสัมพันธ์กับการแสดงโฆษณา

visit_request_index

int32

ดัชนีของ VisitRequest ในช่องรับของหรือสำหรับจัดส่งของ Shipment (ดู is_pickup)

start_time

Timestamp

เวลาที่การเข้าชมเริ่มต้น โปรดทราบว่ายานพาหนะอาจมาถึงก่อนเวลาดังกล่าว ณ สถานที่ที่เข้าชม เวลาสอดคล้องกับShipmentModel

load_demands

map<string, Load>

ความต้องการโหลดการเข้าชมทั้งหมดที่เป็นผลรวมของการจัดส่งและคำขอการเข้าชม load_demands ค่าเป็นลบหากการเข้าชมเป็นการแสดงโฆษณา ระบบจะรายงานความต้องการสำหรับประเภทเดียวกันกับ Transition.loads (ดูช่องนี้)

detour

Duration

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

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

มิเช่นนั้น จะคำนวณจากยานพาหนะ start_location และเท่ากับ:

start_time - vehicle_start_time - travel duration from
the vehicle's `start_location` to the visit.
shipment_label

string

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

visit_label

string

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

ShipmentTypeIncompatibility

ระบุความไม่เข้ากันระหว่างการจัดส่งตามประเภทการจัดส่ง [shipping_type] ลักษณะที่ปรากฏของการจัดส่งที่เข้ากันไม่ได้ในเส้นทางเดียวกันถูกจำกัดตามโหมดความไม่เข้ากัน

ช่อง
types[]

string

รายการประเภทที่ใช้ร่วมกันไม่ได้ การจัดส่ง 2 รายการที่มี shipment_types ต่างกันในแต่ละรายการที่ "ใช้ร่วมกันไม่ได้"

incompatibility_mode

IncompatibilityMode

ใช้โหมดกับความเข้ากันไม่ได้แล้ว

IncompatibilityMode

โหมดที่กำหนดวิธีจำกัดลักษณะที่ปรากฏของการจัดส่งที่เข้ากันไม่ได้ในเส้นทางเดียวกัน

Enum
INCOMPATIBILITY_MODE_UNSPECIFIED โหมดความไม่เข้ากันที่ไม่ได้ระบุ คุณไม่ควรใช้ค่านี้
NOT_PERFORMED_BY_SAME_VEHICLE ในโหมดนี้ การจัดส่ง 2 รายการที่มีประเภทที่ใช้ร่วมกันไม่ได้จะใช้ยานพาหนะคันเดียวกันไม่ได้
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

สำหรับการจัดส่ง 2 รายการที่มีประเภทที่เข้ากันไม่ได้กับ NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY ในโหมดความเข้ากันได้

  • หากทั้ง 2 บริการเป็นการรับสินค้าเท่านั้น (ไม่มีการนำส่ง) หรือการนำส่งเท่านั้น (ไม่มีการมารับสินค้า) ลูกค้าจะใช้ยานพาหนะคันเดียวกันไม่ได้
  • หากการจัดส่งชิ้นใดชิ้นหนึ่งมีการนำส่งและอีกชิ้นหนึ่งมารับ ทั้ง 2 ชิ้นสามารถใช้ยานพาหนะคันเดียวกันได้หากนำส่งสินค้าเก่าก่อน แล้วลูกค้าจะมารับสินค้าในภายหลัง

ShipmentTypeRequirement

ระบุข้อกำหนดระหว่างการจัดส่งตามประเภทการจัดส่ง [shipping_type] รายละเอียดของข้อกำหนดจะกำหนดโดยโหมดข้อกำหนด

ช่อง
required_shipment_type_alternatives[]

string

รายการประเภทการจัดส่งทางเลือกที่ dependent_shipment_types กำหนด

dependent_shipment_types[]

string

การจัดส่งทั้งหมดที่มีประเภทในช่อง dependent_shipment_types ต้องมีการจัดส่งประเภท required_shipment_type_alternatives อย่างน้อย 1 ครั้งสำหรับการเข้าชมในเส้นทางเดียวกัน

หมายเหตุ: ไม่อนุญาตให้ใช้ข้อกำหนดชุดที่ shipment_type พึ่งพาตัวเอง

requirement_mode

RequirementMode

ใช้โหมดกับข้อกำหนดแล้ว

RequirementMode

รูปแบบที่กำหนดลักษณะของการจัดส่งที่ต้องพึ่งพาบนเส้นทาง

Enum
REQUIREMENT_MODE_UNSPECIFIED โหมดข้อกำหนดที่ไม่ได้ระบุ คุณไม่ควรใช้ค่านี้
PERFORMED_BY_SAME_VEHICLE ในโหมดนี้ การจัดส่งที่ "ขึ้นอยู่กับ" ทั้งหมดต้องใช้ยานพาหนะเดียวกันกับการจัดส่งที่ "จำเป็น" อย่างน้อย 1 รายการ
IN_SAME_VEHICLE_AT_PICKUP_TIME

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

ดังนั้น การรับสินค้าที่ "ขึ้นอยู่กับ" การจัดส่งจำเป็นต้องมี

  • การจัดส่งที่ "ต้องระบุ" แบบจัดส่งเท่านั้นซึ่งนำส่งในระหว่างเส้นทาง หรือ
  • การนำส่งสินค้าที่ "จำเป็น" ที่ได้รับในระหว่างเส้นทาง และหากการจัดส่งที่ "จำเป็น" มีการนำส่ง จะต้องดำเนินการนำส่งนี้หลังจากการรับสินค้าที่ "ขึ้นอยู่กับ" การจัดส่ง
IN_SAME_VEHICLE_AT_DELIVERY_TIME เช่นเดียวกับก่อนหน้านี้ ยกเว้นการจัดส่งที่ "ขึ้นอยู่กับ" จะต้องมีการจัดส่งที่ "จำเป็น" ในยานพาหนะ ณ เวลาที่นำส่ง

SkippedShipment

ระบุรายละเอียดการจัดส่งที่ไม่สมบูรณ์ในโซลูชัน สำหรับกรณีที่ไม่สำคัญและ/หรือหากระบุสาเหตุของการข้ามได้ เราจะรายงานเหตุผลที่นี่

ช่อง
index

int32

ดัชนีจะสอดคล้องกับดัชนีของการจัดส่งในแหล่งที่มาShipmentModel

label

string

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

reasons[]

Reason

รายการเหตุผลที่อธิบายสาเหตุที่ข้ามการจัดส่ง ดูความคิดเห็นด้านบน Reason

เหตุผล

หากเราอธิบายเหตุผลที่ข้ามการจัดส่งได้ ระบบจะแสดงเหตุผลไว้ที่นี่ หากเหตุผลสำหรับยานพาหนะทุกรุ่นไม่เหมือนกัน reason จะมีองค์ประกอบมากกว่า 1 รายการ การจัดส่งที่ข้ามไปแล้วต้องไม่มีเหตุผลซ้ำกัน เช่น ช่องทั้งหมดเหมือนกัน ยกเว้น example_vehicle_index ตัวอย่าง

reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 1
  example_exceeded_capacity_type: "Apples"
}
reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 3
  example_exceeded_capacity_type: "Pears"
}
reasons {
  code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT
  example_vehicle_index: 1
}

การจัดส่งที่ข้ามไปใช้ไม่ได้กับยานพาหนะบางประเภท เหตุผลอาจแตกต่างกันสำหรับยานพาหนะทุกคัน แต่ให้เกินความจุ "แอปเปิล" ของยานพาหนะอย่างน้อย 1 คัน (รวมยานพาหนะ 1) เกินความจุ "Pears" อย่างน้อย 1 คัน (รวมคันที่ 3) และเกินระยะทางที่จำกัดของรถอย่างน้อย 1 คัน (รวมคัน 1)

ช่อง
code

Code

ดูความคิดเห็นของ Code

example_exceeded_capacity_type

string

หากรหัสเหตุผลคือ DEMAND_EXCEEDS_VEHICLE_CAPACITY แสดงว่าเอกสารมีความจุเกิน 1 ประเภท

example_vehicle_index

int32

หากเหตุผลเกี่ยวข้องกับความไม่เข้ากันกับยานพาหนะในการจัดส่ง ฟิลด์นี้จะแสดงดัชนีของยานพาหนะที่เกี่ยวข้อง 1 คัน

รหัส

โค้ดระบุประเภทเหตุผล ลำดับในที่นี้ไม่มีความหมาย โดยเฉพาะอย่างยิ่ง ไม่มีการบ่งชี้ว่าเหตุผลที่ระบุจะปรากฏก่อนเหตุผลอื่นในคำตอบหรือไม่ หากเป็นไปตามทั้ง 2 ข้อ

Enum
CODE_UNSPECIFIED คุณไม่ควรใช้ตัวเลือกนี้ หากเราไม่เข้าใจสาเหตุที่ข้ามการจัดส่ง เราจะส่งคืนชุดเหตุผลที่ว่างเปล่า
NO_VEHICLE ไม่มียานพาหนะในรุ่นที่ทำให้จัดส่งทั้งหมดไม่ได้
DEMAND_EXCEEDS_VEHICLE_CAPACITY ความต้องการในการจัดส่งมีมากเกินกว่าความจุของยานพาหนะบางประเภท ซึ่งหนึ่งในนั้นคือ example_exceeded_capacity_type
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT

ระยะทางขั้นต่ำที่ต้องใช้ในการจัดส่งนี้ เช่น จาก start_location ของยานพาหนะไปยังสถานที่ที่จะมารับและ/หรือจัดส่งและถึงปลายทางของยานพาหนะเกิน route_distance_limit ของยานพาหนะ

โปรดทราบว่าในการคำนวณนี้ เราจะใช้ระยะห่างทางภูมิศาสตร์

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT

เวลาขั้นต่ำที่จำเป็นในการดำเนินการจัดส่งนี้ รวมถึงเวลาเดินทาง เวลารอ และเวลารับบริการเกิน route_duration_limit ของยานพาหนะ

หมายเหตุ: เวลาเดินทางจะคำนวณตามสถานการณ์ที่ดีที่สุด เช่น ระยะทางตามภูมิศาตร์ x 36 เมตร/วินาที (ประมาณ 130 กม./ชั่วโมง)

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT เหมือนกับด้านบน แต่เราเปรียบเทียบเฉพาะระยะเวลาเดินทางขั้นต่ำกับ travel_duration_limit ของยานพาหนะเท่านั้น
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS ยานพาหนะจะดำเนินการจัดส่งนี้ไม่ได้ในกรณีที่ดีที่สุด (ดู CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT สำหรับการคำนวณเวลา) หากสตาร์ทรถจากเวลาเริ่มต้นแรกสุด: เวลารวมจะทำให้ยานพาหนะสิ้นสุดหลังจากเวลาสิ้นสุดล่าสุด
VEHICLE_NOT_ALLOWED ช่อง allowed_vehicle_indices ของการจัดส่งไม่ว่างเปล่าและยานพาหนะนี้ไม่ได้เป็นของคันนี้

TimeWindow

กรอบเวลาจะจํากัดเวลาของเหตุการณ์ เช่น เวลาที่มาถึงเมื่อเข้าชม หรือเวลาเริ่มต้นและสิ้นสุดของยานพาหนะ

ขอบเขตของกรอบเวลาแบบเข้มงวด start_time และ end_time จะบังคับใช้เวลาแรกสุดและล่าสุดของเหตุการณ์เพื่อให้ start_time <= event_time <= end_time ขอบเขตล่างของกรอบเวลาชั่วคราว soft_start_time แสดงค่ากำหนดของเหตุการณ์ให้เกิดขึ้นที่หรือหลังจาก soft_start_time โดยระบุต้นทุนตามสัดส่วนของระยะเวลาก่อน soft_start_time ที่เหตุการณ์จะเกิดขึ้น ขอบเขตบนของกรอบเวลาชั่วคราว soft_end_time จะแสดงค่ากําหนดให้เหตุการณ์เกิดขึ้นในหรือก่อน soft_end_time โดยทําให้ต้นทุนเป็นสัดส่วนกับระยะเวลาหลังจาก soft_end_time ที่เกิดเหตุการณ์ start_time, end_time, soft_start_time และ soft_end_time ควรอยู่ภายในขีดจำกัดเวลาทั่วโลก (ดู ShipmentModel.global_start_time และ ShipmentModel.global_end_time) และควรเป็นไปตามข้อกำหนดต่อไปนี้

  0 <= `start_time` <= `soft_start_time` <= `end_time` and
  0 <= `start_time` <= `soft_end_time` <= `end_time`.
ช่อง
start_time

Timestamp

เวลาเริ่มต้นของกรอบเวลาที่ยากลำบาก หากไม่ระบุ ระบบจะตั้งค่าเป็น ShipmentModel.global_start_time

end_time

Timestamp

เวลาสิ้นสุดของกรอบเวลาที่ยากลำบาก หากไม่ระบุ ระบบจะตั้งค่าเป็น ShipmentModel.global_end_time

soft_start_time

Timestamp

เวลาเริ่มต้นแบบซอฟต์สตาร์ทของกรอบเวลา

soft_end_time

Timestamp

เวลาสิ้นสุดแบบนุ่มนวลของกรอบเวลา

cost_per_hour_before_soft_start_time

double

ค่าใช้จ่ายต่อชั่วโมงที่เพิ่มลงในค่าใช้จ่ายอื่นๆ ในโมเดล หากเหตุการณ์เกิดขึ้นก่อน soft_start_time โดยคํานวณดังนี้

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

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

cost_per_hour_after_soft_end_time

double

ค่าใช้จ่ายต่อชั่วโมงที่เพิ่มลงในค่าใช้จ่ายอื่นๆ ในโมเดล หากเหตุการณ์เกิดขึ้นหลังจาก soft_end_time โดยคํานวณดังนี้

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

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

TransitionAttributes

ระบุแอตทริบิวต์ของการเปลี่ยนระหว่างการเข้าชม 2 ครั้งติดต่อกันบนเส้นทาง TransitionAttributes หลายรายการอาจมีผลกับการเปลี่ยนเดียวกัน ในกรณีนั้น ค่าใช้จ่ายเพิ่มเติมทั้งหมดจะรวมกันและมีข้อจํากัดหรือขีดจำกัดที่เข้มงวดที่สุด (ตามความหมาย "และ" ตามธรรมชาติ)

ช่อง
src_tag

string

แท็กที่กำหนดชุดของ (src->dst) การเปลี่ยนแอตทริบิวต์เหล่านี้จะมีผล

การเยี่ยมชมต้นทางหรือการสตาร์ทรถตรงกับ VisitRequest.tags หรือ Vehicle.start_tags ของเส้นทางนั้น มี src_tag หรือไม่มี excluded_src_tag (ขึ้นอยู่กับว่าฟิลด์ใดใน 2 ช่องนี้ไม่ว่างเปล่า)

excluded_src_tag

string

ดูsrc_tag ต้องระบุ src_tag และ excluded_src_tag อย่างน้อย 1 รายการ

dst_tag

string

การเข้าชมปลายทางหรือจุดสิ้นสุดของพาหนะตรงกับ VisitRequest.tags หรือ Vehicle.end_tags ของรถประกอบด้วย dst_tag หรือไม่มี excluded_dst_tag (ขึ้นอยู่กับว่าฟิลด์ใดใน 2 ฟิลด์นี้ไม่ว่างเปล่า)

excluded_dst_tag

string

ดูdst_tag ต้องระบุ dst_tag และ excluded_dst_tag อย่างน้อย 1 รายการ

cost

double

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

cost_per_kilometer

double

ระบุต้นทุนต่อกิโลเมตรที่ใช้กับระยะทางที่เดินทางในระหว่างดําเนินการเปลี่ยนนี้ โดยจะรวมกันเป็น Vehicle.cost_per_kilometer ที่ระบุไว้บนยานพาหนะ

distance_limit

DistanceLimit

ระบุการจำกัดระยะทางในการเดินทางขณะดำเนินการเปลี่ยนนี้

ตั้งแต่วันที่ 06/06/2021 เป็นต้นไป ระบบจะรองรับเฉพาะขีดจำกัดคำขอชั่วคราวเท่านั้น

delay

Duration

ระบุการหน่วงเวลาที่เกิดขึ้นเมื่อดำเนินการเปลี่ยน

ความล่าช้านี้จะเกิดขึ้นเสมอหลังจากสิ้นสุดการเข้าชมต้นทางและก่อนเริ่มต้นการเข้าชมปลายทาง

ยานพาหนะ

สร้างโมเดลยานพาหนะที่มีปัญหาเกี่ยวกับการจัดส่ง การแก้ไขปัญหาเกี่ยวกับการจัดส่งจะสร้างเส้นทางที่เริ่มจาก start_location และสิ้นสุดที่ end_location สำหรับยานพาหนะนี้ เส้นทางคือลำดับการเข้าชม (ดู ShipmentRoute)

ช่อง
display_name

string

ชื่อที่แสดงของยานพาหนะที่ผู้ใช้กำหนด โดยมีความยาวได้สูงสุด 63 อักขระและใช้อักขระ UTF-8 ได้

travel_mode

TravelMode

รูปแบบการเดินทางซึ่งส่งผลต่อถนนที่รถวิ่งอยู่และความเร็ว ดู travel_duration_multiple เพิ่มเติม

start_location

LatLng

สถานที่ตั้งทางภูมิศาสตร์ที่ยานพาหนะสตาร์ทก่อนไปรับการจัดส่ง หากไม่ระบุ รถจะสตาร์ทตั้งแต่การมารับครั้งแรก หากรูปแบบการจัดส่งมีระยะเวลาและเมทริกซ์ระยะทาง ก็ต้องไม่ระบุ start_location

start_waypoint

Waypoint

จุดอ้างอิงที่แสดงสถานที่ตั้งทางภูมิศาสตร์ที่ยานพาหนะสตาร์ทก่อนไปรับการจัดส่ง หากไม่ได้ระบุทั้ง start_waypoint และ start_location ยานพาหนะจะสตาร์ทรถตอนมารับเองเป็นครั้งแรก หากรูปแบบการจัดส่งมีระยะเวลาและเมทริกซ์ระยะทาง ก็ต้องไม่ระบุ start_waypoint

end_location

LatLng

สถานที่ตั้งทางภูมิศาสตร์ที่ยานพาหนะสิ้นสุดหลังจากสิ้นสุด VisitRequest สุดท้าย หากไม่ระบุ ShipmentRoute ของยานพาหนะจะสิ้นสุดทันทีเมื่อเดินทางถึง VisitRequest ท้ายสุด หากรูปแบบการจัดส่งมีระยะเวลาและเมทริกซ์ระยะทาง ก็ต้องไม่ระบุ end_location

end_waypoint

Waypoint

จุดอ้างอิงที่แสดงสถานที่ตั้งทางภูมิศาสตร์ที่ยานพาหนะสิ้นสุดหลังจากสิ้นสุด VisitRequest สุดท้ายแล้ว หากไม่ได้ระบุทั้ง end_waypoint และ end_location ShipmentRoute ของยานพาหนะจะสิ้นสุดทันทีเมื่อเสร็จสิ้น VisitRequest สุดท้ายของยานพาหนะ หากรูปแบบการจัดส่งมีระยะเวลาและเมทริกซ์ระยะทาง ก็ต้องไม่ระบุ end_waypoint

start_tags[]

string

ระบุแท็กที่ติดอยู่กับจุดเริ่มต้นของเส้นทางของยานพาหนะ

ไม่อนุญาตให้มีสตริงว่างหรือซ้ำกัน

end_tags[]

string

ระบุแท็กที่ติดอยู่ท้ายเส้นทางของยานพาหนะ

ไม่อนุญาตให้มีสตริงว่างหรือซ้ำกัน

start_time_windows[]

TimeWindow

กรอบเวลาที่รถอาจออกเดินทางจากตำแหน่งเริ่มต้น โดยต้องอยู่ในขีดจำกัดเวลาทั่วโลก (ดู ShipmentModel.global_* ช่อง) หากไม่ระบุ จะไม่มีข้อจำกัดอื่นนอกเหนือจากขีดจำกัดเวลาทั่วโลก

กรอบเวลาที่อยู่ในช่องที่ซ้ำเดียวกันต้องไม่ต่อเนื่องกัน กล่าวคือ ไม่มีกรอบเวลาดังกล่าวทับซ้อนหรืออยู่ติดกันได้ และต้องไม่อยู่ตามลำดับเวลา

ตั้งค่า cost_per_hour_after_soft_end_time และ soft_end_time ได้ในกรณีที่มีกรอบเวลาเดียวเท่านั้น

end_time_windows[]

TimeWindow

กรอบเวลาที่ยานพาหนะอาจจะมาถึงปลายทาง โดยต้องอยู่ในขีดจำกัดเวลาทั่วโลก (ดู ShipmentModel.global_* ช่อง) หากไม่ระบุ จะไม่มีข้อจำกัดอื่นนอกเหนือจากขีดจำกัดเวลาทั่วโลก

กรอบเวลาที่อยู่ในช่องที่ซ้ำเดียวกันต้องไม่ต่อเนื่องกัน กล่าวคือ ไม่มีกรอบเวลาดังกล่าวทับซ้อนหรืออยู่ติดกันได้ และต้องไม่อยู่ตามลำดับเวลา

ตั้งค่า cost_per_hour_after_soft_end_time และ soft_end_time ได้ในกรณีที่มีกรอบเวลาเดียวเท่านั้น

unloading_policy

UnloadingPolicy

บังคับใช้นโยบายการยกเลิกการโหลดบนยานพาหนะแล้ว

load_limits

map<string, LoadLimit>

ความจุของยานพาหนะ (เช่น น้ำหนัก ปริมาตร จำนวนพาเลต) คีย์ในแผนที่คือตัวระบุประเภทการโหลด ซึ่งสอดคล้องกับคีย์ของช่อง Shipment.load_demands หากไม่มีคีย์ที่ระบุจากแผนที่นี้ จะถือว่าความจุที่เกี่ยวข้องไม่มีขีดจำกัด

cost_per_hour

double

ค่าใช้จ่ายสำหรับยานพาหนะ: ค่าใช้จ่ายทั้งหมดรวมกันและต้องอยู่ในหน่วยเดียวกับ Shipment.penalty_cost

ค่าใช้จ่ายต่อชั่วโมงของเส้นทางพาหนะ ค่าใช้จ่ายนี้จะใช้กับเวลารวมที่ใช้เส้นทางนั้นๆ ซึ่งรวมถึงเวลาในการเดินทาง เวลาที่รอ และเวลาในการเยี่ยมชม การใช้ cost_per_hour แทนการใช้เพียง cost_per_traveled_hour อาจทำให้เวลาในการตอบสนองเพิ่มขึ้น

cost_per_traveled_hour

double

ต้นทุนต่อชั่วโมงในการเดินทางของเส้นทางยานพาหนะ ค่าใช้จ่ายนี้มีผลเฉพาะกับระยะเวลาเดินทางที่ใช้เส้นทาง (ซึ่งรายงานในเดือนShipmentRoute.transitions) โดยไม่รวมเวลารอและเวลาในการเข้าชม

cost_per_kilometer

double

ค่าใช้จ่ายต่อกิโลเมตรของเส้นทางยานพาหนะ ค่าใช้จ่ายนี้ใช้กับระยะทางที่รายงานใน ShipmentRoute.transitions และไม่มีผลกับระยะทางที่เดินทางโดยนัยจาก arrival_location ถึง departure_location ของ VisitRequest เดียว

fixed_cost

double

จะมีค่าบริการคงที่หากใช้ยานพาหนะนี้ในการจัดส่ง

used_if_route_is_empty

bool

ช่องนี้ใช้กับยานพาหนะเมื่อเส้นทางไม่ได้ให้บริการการจัดส่งเท่านั้น ซึ่งจะระบุว่าในกรณีนี้ ระบบควรพิจารณาว่ายานพาหนะเป็นรถมือสองหรือไม่

หากเป็นจริง พาหนะจะเดินทางจากต้นทางถึงปลายทางแม้ว่าจะไม่ได้ให้บริการส่งสินค้าก็ตาม และคำนึงถึงค่าใช้จ่ายด้านเวลาและระยะทางที่เกิดขึ้นเมื่อเริ่มต้น --> การเดินทางเมื่อสิ้นสุดจะนำมาพิจารณาด้วย

มิเช่นนั้น จะไม่เดินทางจากต้นทางถึงปลายทาง และไม่มีกำหนดเวลา break_rule หรือล่าช้า (จาก TransitionAttributes) สำหรับยานพาหนะคันนี้ ในกรณีนี้ ShipmentRoute ของรถไม่มีข้อมูลใดๆ ยกเว้นดัชนีและป้ายกำกับของยานพาหนะ

route_duration_limit

DurationLimit

ขีดจำกัดมีผลกับระยะเวลารวมของเส้นทางที่ใช้ยานพาหนะ ในOptimizeToursResponseหนึ่งๆ ระยะเวลาใช้เส้นทางของยานพาหนะจะต่างระหว่าง vehicle_end_time กับ vehicle_start_time

travel_duration_limit

DurationLimit

ขีดจำกัดมีผลกับระยะเวลาเดินทางของเส้นทางรถยนต์ ใน OptimizeToursResponse หนึ่งๆ ระยะเวลาการเดินทางตามเส้นทางคือผลรวมของ transitions.travel_duration ทั้งหมด

route_distance_limit

DistanceLimit

ขีดจำกัดมีผลกับระยะทางรวมของเส้นทางรถ ใน OptimizeToursResponse ที่ระบุ ระยะทางของเส้นทางคือผลรวมของ transitions.travel_distance_meters ทั้งหมด

extra_visit_duration_for_visit_type

map<string, Duration>

ระบุแผนที่จากสตริง traffic_types จนถึงระยะเวลา ระยะเวลาเป็นเวลานอกเหนือจาก VisitRequest.duration ที่จะถูกนําไปยังการเข้าชมที่มี visit_types ที่ระบุ ระยะเวลาการเข้าชมเพิ่มเติมนี้จะเพิ่มค่าใช้จ่ายหากระบุ cost_per_hour ไว้ คีย์ (เช่น visit_types) ต้องไม่ว่างเปล่า

หากคำขอเข้าชมมีหลายประเภท ระบบจะเพิ่มระยะเวลาสำหรับแต่ละประเภทในแผนที่

break_rule

BreakRule

อธิบายกำหนดเวลาพักที่จะบังคับใช้กับยานพาหนะนี้ หากเว้นว่างไว้ จะไม่มีการกำหนดเวลาพักสำหรับยานพาหนะคันนี้

label

string

ระบุป้ายกำกับสำหรับยานพาหนะนี้ ป้ายกำกับนี้มีการรายงานในคำตอบเป็น vehicle_label ของ ShipmentRoute ที่เกี่ยวข้อง

ignore

bool

หากเป็น "จริง" used_if_route_is_empty ต้องเป็น "เท็จ" และยานพาหนะคันนี้จะยังคงไม่มีการใช้งาน

หากดำเนินการจัดส่งโดยยานพาหนะที่ละเว้นใน injected_first_solution_routes ระบบจะข้ามการจัดส่งดังกล่าวในโซลูชันแรก แต่จะดำเนินการในการตอบสนองได้โดยไม่เสียค่าใช้จ่าย

หากดำเนินการจัดส่งโดยยานพาหนะที่เพิกเฉยใน injected_solution_constraint และการมารับ/นำส่งที่เกี่ยวข้องจะถูกจํากัดให้อยู่บนยานพาหนะนั้นต่อไป (เช่น ไม่ผ่อนปรนให้ถึงระดับ RELAX_ALL_AFTER_THRESHOLD) ระบบจะข้ามคำขอนั้นในการตอบกลับ หากการจัดส่งมีช่อง allowed_vehicle_indices ที่ไม่ว่างเปล่าและระบบจะไม่สนใจยานพาหนะที่อนุญาตทั้งหมด ระบบจะข้ามการดำเนินการดังกล่าวในการตอบกลับ

travel_duration_multiple

double

ระบุตัวคูณที่ใช้ซ้ำเพื่อเพิ่มหรือลดระยะเวลาเดินทางของยานพาหนะนี้ได้ ตัวอย่างเช่น การตั้งค่าเป็น 2.0 หมายความว่ายานพาหนะคันนี้จะช้ากว่าและมีระยะเวลาเดินทางมากกว่ายานพาหนะมาตรฐานถึง 2 เท่า หลายรายการนี้ไม่มีผลต่อระยะเวลาการเข้าชม และจะมีผลต่อค่าใช้จ่ายหากระบุ cost_per_hour หรือ cost_per_traveled_hour โดยต้องอยู่ในช่วง [0.001, 1000.0] หากไม่ได้ตั้งค่า ยานพาหนะจะเป็นแบบมาตรฐาน และหลายรายการนี้จะถือว่าเป็น 1.0

คำเตือน: เวลาเดินทางจะปัดเศษเป็นวินาทีที่ใกล้เคียงที่สุดหลังจากใช้ตัวคูณนี้ แต่ก่อนที่จะดำเนินการตัวเลข ดังนั้น การปัดเศษหลายครั้งอาจทำให้ความแม่นยําลดลง

โปรดดูextra_visit_duration_for_visit_typeด้านล่าง

DurationLimit

ขีดจำกัดที่กำหนดระยะเวลาสูงสุดของเส้นทางของยานพาหนะ อาจแข็งหรืออ่อนก็ได้

เมื่อมีการกำหนดช่องขีดจำกัด Soft จะต้องกำหนดทั้งเกณฑ์ Soft Max และค่าใช้จ่ายที่เกี่ยวข้องร่วมกัน

ช่อง
max_duration

Duration

ขีดจำกัดแบบเข้มงวดจะจำกัดระยะเวลาไว้ที่ max_duration สูงสุด

soft_max_duration

Duration

ขีดจำกัดแบบไม่เข้มงวดที่บังคับใช้ขีดจำกัดระยะเวลาสูงสุด แต่หากมีการละเมิดจะทำให้เส้นทางนั้นเสียค่าใช้จ่าย ค่าใช้จ่ายนี้จะรวมกันกับค่าใช้จ่ายอื่นๆ ที่กำหนดไว้ในโมเดลโดยใช้หน่วยเดียวกัน

หากกำหนดไว้ soft_max_duration ต้องไม่เป็นค่าลบ หากกำหนด max_duration ไว้ด้วย soft_max_duration ต้องน้อยกว่า max_duration

quadratic_soft_max_duration

Duration

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

หากกำหนดไว้ quadratic_soft_max_duration ต้องไม่เป็นค่าลบ หากกำหนด max_duration ไว้ด้วย quadratic_soft_max_duration ต้องน้อยกว่า max_duration และความแตกต่างต้องไม่เกิน 1 วัน

max_duration - quadratic_soft_max_duration <= 86400 seconds

cost_per_hour_after_soft_max

double

จะมีค่าใช้จ่ายต่อชั่วโมงหากละเมิดเกณฑ์ soft_max_duration ค่าใช้จ่ายเพิ่มเติมจะเป็น 0 หากระยะเวลาต่ำกว่าเกณฑ์ ไม่เช่นนั้น ค่าใช้จ่ายจะขึ้นอยู่กับระยะเวลาดังนี้

  cost_per_hour_after_soft_max * (duration - soft_max_duration)

ค่าใช้จ่ายต้องไม่ติดลบ

cost_per_square_hour_after_quadratic_soft_max

double

ค่าใช้จ่ายต่อตารางชั่วโมงที่เกิดขึ้นหากละเมิดเกณฑ์ quadratic_soft_max_duration

ค่าใช้จ่ายเพิ่มเติมจะเป็น 0 หากระยะเวลาต่ำกว่าเกณฑ์ ไม่เช่นนั้น ค่าใช้จ่ายจะขึ้นอยู่กับระยะเวลาดังนี้

  cost_per_square_hour_after_quadratic_soft_max *
  (duration - quadratic_soft_max_duration)^2

ค่าใช้จ่ายต้องไม่ติดลบ

LoadLimit

กำหนดขีดจำกัดการบรรทุกที่ใช้กับยานพาหนะ เช่น "รถบรรทุกนี้รับน้ำหนักได้สูงสุด 3, 500 กก. เท่านั้น" ดูload_limits

ช่อง
soft_max_load

int64

ขีดจำกัดการโหลดแบบไม่เข้มงวด ดูcost_per_unit_above_soft_max

cost_per_unit_above_soft_max

double

หากน้ำหนักบรรทุกเกิน soft_max_load ตลอดเส้นทางของรถคันนี้ จะมีค่าปรับตามต้นทุน 1 ครั้งต่อคัน ได้แก่ (น้ำหนักบรรทุก - soft_max_load) * cost_per_unit_above_soft_max ค่าใช้จ่ายทั้งหมดจะรวมกันและต้องอยู่ในหน่วยเดียวกับ Shipment.penalty_cost

start_load_interval

Interval

ช่วงการบรรทุกที่ยอมรับได้ของยานพาหนะที่จุดเริ่มต้นของเส้นทาง

end_load_interval

Interval

ช่วงการบรรทุกที่ยอมรับได้ของยานพาหนะเมื่อถึงจุดสิ้นสุดของเส้นทาง

max_load

int64

จำนวนการโหลดสูงสุดที่ยอมรับได้

ช่วงเวลา

ระยะเวลาของการโหลดที่ยอมรับได้

ช่อง
min

int64

การโหลดขั้นต่ำที่ยอมรับได้ ต้องเท่ากับ ≥ 0 หากระบุไว้ทั้ง 2 แบบ min ต้องเท่ากับ ≤ max

max

int64

น้ำหนักสูงสุดที่ยอมรับได้ ต้องเท่ากับ ≥ 0 หากไม่ระบุ ข้อความนี้จะไม่มีการจำกัดการโหลดสูงสุด หากระบุไว้ทั้ง 2 แบบ min ต้องเท่ากับ ≤ max

TravelMode

รูปแบบการเดินทางที่สามารถใช้โดยรถยนต์

โหมดเหล่านี้ควรเป็นส่วนหนึ่งของโหมดการเดินทางของ Google Maps Platform Routes ที่ต้องการ ดูใน https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode

Enum
TRAVEL_MODE_UNSPECIFIED โหมดการเดินทางที่ไม่ระบุ เทียบเท่ากับ DRIVING
DRIVING รูปแบบการเดินทางที่สอดคล้องกับเส้นทางการขับขี่ (รถยนต์, ...)
WALKING รูปแบบการเดินทางที่สอดคล้องกับเส้นทางเดินเท้า

UnloadingPolicy

นโยบายเกี่ยวกับวิธียกเลิกการขนย้ายยานพาหนะ มีผลเฉพาะกับการจัดส่งที่มีทั้งการรับสินค้าและการจัดส่ง

การจัดส่งอื่นๆ ไม่มีค่าใช้จ่ายใดๆ เกิดขึ้นได้ทุกที่ในเส้นทางที่ไม่ขึ้นกับ unloading_policy

Enum
UNLOADING_POLICY_UNSPECIFIED นโยบายการยกเลิกการโหลดที่ไม่ได้ระบุ การจัดส่งต้องเกิดขึ้นหลังจากการมารับสินค้าที่เกี่ยวข้องเท่านั้น
LAST_IN_FIRST_OUT ต้องนำส่งสินค้าตามลําดับการรับสินค้า
FIRST_IN_FIRST_OUT การนำส่งต้องดำเนินการในลำดับเดียวกับการรับสินค้า

จุดบอกทาง

ล้อมรอบจุดอ้างอิง จุดอ้างอิงจะระบุตำแหน่งขาเข้าและขาออกของ ReachRequests รวมถึงตำแหน่งเริ่มต้นและสิ้นสุดของยานพาหนะ

ช่อง
side_of_road

bool

ไม่บังคับ ระบุว่าตำแหน่งจุดอ้างอิงนี้ต้องการให้รถจอดที่ฝั่งใดฝั่งหนึ่งของถนน เมื่อคุณกำหนดค่านี้ เส้นทางจะผ่านตำแหน่งเพื่อให้รถสามารถหยุดที่ด้านข้างถนนที่ตำแหน่งดังกล่าวมีความคลาดเคลื่อนจากกึ่งกลางของถนน ตัวเลือกนี้ใช้ไม่ได้กับโหมดการเดินทาง "เดินเท้า"

ฟิลด์สหภาพ location_type วิธีต่างๆ ในการนำเสนอสถานที่ location_type ต้องเป็นค่าใดค่าหนึ่งต่อไปนี้เท่านั้น
location

Location

จุดที่ระบุโดยใช้พิกัดทางภูมิศาสตร์ รวมถึงส่วนหัวที่ไม่บังคับ

place_id

string

รหัสสถานที่ของจุดที่น่าสนใจที่เชื่อมโยงกับการชี้ทาง