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 และเขียนลงใน Cloud Storage ในรูปแบบที่ผู้ใช้ระบุ เช่นเดียวกับเมธอด OptimizeTours OptimizeToursRequest แต่ละรายการจะมี ShipmentModel และแสดงผล OptimizeToursResponse ที่มีฟิลด์ ShipmentRoute ซึ่งเป็นชุดเส้นทางที่ยานพาหนะจะใช้เพื่อลดต้นทุนโดยรวม

ผู้ใช้สามารถสำรวจ operations.get เพื่อตรวจสอบสถานะของ LRO ได้โดยทำดังนี้

หากฟิลด์ LRO done เป็นเท็จ แสดงว่าระบบยังประมวลผลคำขออย่างน้อย 1 รายการอยู่ คำขออื่นๆ อาจดำเนินการเสร็จสมบูรณ์แล้วและผลลัพธ์จะอยู่ใน Cloud Storage

หากฟิลด์ done ของ LRO เป็นจริง แสดงว่าระบบได้ประมวลผลคำขอทั้งหมดแล้ว คำขอที่ประมวลผลสำเร็จจะมีผลลัพธ์อยู่ใน Cloud Storage คำขอที่ล้มเหลวจะไม่มีผลลัพธ์ใน Cloud Storage หากตั้งค่าฟิลด์ error ของ LRO ไว้ ฟิลด์นี้จะมีข้อผิดพลาดจากคำขอที่ไม่สำเร็จรายการใดรายการหนึ่ง

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

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

  • https://www.googleapis.com/auth/cloud-platform
สิทธิ์ IAM

ต้องมีสิทธิ์ IAM ต่อไปนี้ในทรัพยากร parent

  • routeoptimization.operations.create

ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับ IAM

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
สิทธิ์ IAM

ต้องมีสิทธิ์ IAM ต่อไปนี้ในทรัพยากร parent

  • routeoptimization.locations.use

ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับ IAM

OptimizeToursLongRunning

rpc OptimizeToursLongRunning(OptimizeToursRequest) returns (Operation)

นี่คือรูปแบบของOptimizeToursที่ออกแบบมาเพื่อการเพิ่มประสิทธิภาพที่มีค่าหมดเวลาสูง ควรใช้OptimizeToursแทนวิธีการเพิ่มประสิทธิภาพที่ใช้เวลานานกว่า 2-3 นาที

long-running operation (LRO) ที่แสดงผลจะมีชื่อในรูปแบบ <parent>/operations/<operation_id> และใช้เพื่อติดตามความคืบหน้าของการคำนวณได้ metadata ประเภทฟิลด์คือ OptimizeToursLongRunningMetadata response ประเภทฟิลด์คือ OptimizeToursResponse หากสำเร็จ

เวอร์ชันทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/otlr/make-request

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

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

  • https://www.googleapis.com/auth/cloud-platform
สิทธิ์ IAM

ต้องมีสิทธิ์ IAM ต่อไปนี้ในทรัพยากร parent

  • routeoptimization.operations.create

ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับ IAM

OptimizeToursUri

rpc OptimizeToursUri(OptimizeToursUriRequest) returns (Operation)

ซึ่งเป็นรูปแบบหนึ่งของเมธอด OptimizeToursLongRunning ที่ออกแบบมาเพื่อการเพิ่มประสิทธิภาพที่มีค่าการหมดเวลาและขนาดอินพุต/เอาต์พุตขนาดใหญ่

ไคลเอ็นต์จะระบุ URI ของ OptimizeToursRequest ที่จัดเก็บไว้ใน Google Cloud Storage และเซิร์ฟเวอร์จะเขียน OptimizeToursResponse ไปยัง URI ของ Google Cloud Storage ที่ไคลเอ็นต์ระบุ

ควรใช้วิธีนี้แทนวิธี OptimizeTours สำหรับการเพิ่มประสิทธิภาพที่ใช้เวลานานกว่า 2-3 นาทีและมีขนาดอินพุต/เอาต์พุตมากกว่า 8 MB แม้ว่าจะใช้กับการเพิ่มประสิทธิภาพที่สั้นกว่าและมีขนาดเล็กกว่าได้เช่นกัน

long-running operation (LRO) ที่แสดงผลจะมีชื่อในรูปแบบ <parent>/operations/<operation_id> และใช้เพื่อติดตามความคืบหน้าของการคำนวณได้ metadata ประเภทฟิลด์คือ OptimizeToursLongRunningMetadata response ประเภทฟิลด์คือ OptimizeToursUriResponse หากสำเร็จ

เวอร์ชันทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/otlr/make-request

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

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

  • https://www.googleapis.com/auth/cloud-platform
สิทธิ์ IAM

ต้องมีสิทธิ์ IAM ต่อไปนี้ในทรัพยากร parent

  • routeoptimization.operations.create

ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับ IAM

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>

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

performed_mandatory_shipment_count

int32

จำนวนการจัดส่งที่บังคับที่ดำเนินการ

ทดลอง: ลักษณะการทำงานหรือการมีอยู่ของฟิลด์นี้อาจมีการเปลี่ยนแปลงในอนาคต

performed_shipment_penalty_cost_sum

double

ผลรวมของ Shipment.penalty_cost ของการจัดส่งที่ดำเนินการ

ทดลอง: ลักษณะการทำงานหรือการมีอยู่ของฟิลด์นี้อาจมีการเปลี่ยนแปลงในอนาคต

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 ซึ่งจะแสดงใน Long Running Operation หลังจากที่การดำเนินการเสร็จสมบูรณ์

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 ชั่วโมง" ตัวอย่างดังกล่าวจะแปลเป็นFrequencyConstraintดังนี้

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

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

ในทางปฏิบัติ FrequencyConstraint อาจมีผลกับช่วงพักที่ไม่ต่อเนื่อง เช่น ตารางเวลาต่อไปนี้จะตรงกับตัวอย่าง "1 ชั่วโมงทุก 12 ชั่วโมง"

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
ช่อง
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_below_soft_max

double

ต้นทุนต่อกิโลเมตรที่เกิดขึ้น โดยเพิ่มขึ้นสูงสุด soft_max_meters ด้วยสูตรต่อไปนี้

  min(distance_meters, soft_max_meters) / 1000.0 *
  cost_per_kilometer_below_soft_max.

route_distance_limit ไม่รองรับต้นทุนนี้

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 เป็น false ในโมเดล)

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.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours]

ช่อง
data_format

DataFormat

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

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

GcsSource

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

ตำแหน่ง

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

ช่อง
lat_lng

LatLng

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

heading

int32

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

OptimizeToursLongRunningMetadata

ประเภทนี้ไม่มีฟิลด์

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

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

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

ตั้งแต่เดือนพฤศจิกายน 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 (resp. 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

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

use_geodesic_distances

bool

หากเป็นจริง ระบบจะคำนวณระยะทางการเดินทางโดยใช้ระยะทาง Geodesic แทนระยะทางของ Google Maps และจะคำนวณเวลาเดินทางโดยใช้ระยะทาง Geodesic ที่มีความเร็วซึ่งกำหนดโดย 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 แก้โมเดล คำเตือนอาจออกใน [OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors]
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 ว่างไว้

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

TRANSFORM_AND_RETURN_REQUEST

โหมดนี้จะทำงานได้ก็ต่อเมื่อ ShipmentModel.objectives ไม่ว่างเปล่า คำขอไม่ได้รับการแก้ไข โดยจะได้รับการตรวจสอบและกรอกข้อมูลค่าใช้จ่ายที่สอดคล้องกับวัตถุประสงค์ที่ระบุเท่านั้น ดูเอกสารประกอบของ ShipmentModel.objectives ด้วย ระบบจะแสดงผลคำขอที่ได้เป็น OptimizeToursResponse.processed_request

ทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request

OptimizeToursResponse

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

ช่อง
routes[]

ShipmentRoute

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

request_label

string

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

skipped_shipments[]

SkippedShipment

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

validation_errors[]

OptimizeToursValidationError

รายการข้อผิดพลาดในการตรวจสอบทั้งหมดที่เราตรวจพบได้โดยอิสระ ดูคำอธิบาย "ข้อผิดพลาดหลายรายการ" สำหรับข้อความ OptimizeToursValidationError แทนที่จะเป็นข้อผิดพลาด ระบบจะรวมคำเตือนไว้ในกรณีที่ solving_mode เป็น DEFAULT_SOLVE

processed_request

OptimizeToursRequest

ในบางกรณี เราจะแก้ไขคำขอที่เข้ามา ก่อนที่จะแก้ปัญหา เช่น การเพิ่มค่าใช้จ่าย หาก solving_mode == TRANSFORM_AND_RETURN_REQUEST ระบบจะแสดงคำขอที่แก้ไขแล้วที่นี่

ทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request

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

total_cost

double

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

OptimizeToursUriMetadata

ประเภทนี้ไม่มีฟิลด์

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

OptimizeToursUriRequest

คำขอที่ใช้โดยเมธอด OptimizeToursUri

ช่อง
parent

string

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

รูปแบบ:

  • projects/{project-id}
  • projects/{project-id}/locations/{location-id}

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

input

Uri

ต้องระบุ URI ของออบเจ็กต์ Cloud Storage ที่มี OptimizeToursRequest

output

Uri

ต้องระบุ URI ของออบเจ็กต์ Cloud Storage ที่จะมี OptimizeToursResponse

OptimizeToursUriResponse

การตอบกลับที่เมธอด OptimizeToursUri แสดงผล

ช่อง
output

Uri

ไม่บังคับ URI ของออบเจ็กต์ Cloud Storage ที่มี OptimizeToursResponse ซึ่งเข้ารหัสเป็น JSON หรือ Textproto หากเข้ารหัสออบเจ็กต์เป็น JSON นามสกุลของชื่อออบเจ็กต์จะเป็น .json หากเข้ารหัสออบเจ็กต์เป็น Textproto ส่วนขยายของชื่อออบเจ็กต์จะเป็น .txtpb

คุณใช้ crc32_checksum ของทรัพยากรเพื่อยืนยันว่าเนื้อหาของทรัพยากรไม่ได้ถูกแก้ไข

OptimizeToursValidationError

อธิบายข้อผิดพลาดหรือคำเตือนที่พบเมื่อตรวจสอบ OptimizeToursRequest

ช่อง
code

int32

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

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

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

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

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} }

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

error_message

string

สตริงที่มนุษย์อ่านได้ซึ่งอธิบายถึงข้อผิดพลาด code และ error_message มีการแมปแบบ 1:1 (เมื่อรหัส != "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

ชื่อฟิลด์ เช่น "vehicles"

sub_field

FieldReference

ฟิลด์ย่อยที่ซ้อนกันแบบเรียกซ้ำ หากจำเป็น

ฟิลด์ Union index_or_key

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

index

int32

ดัชนีของฟิลด์หากซ้ำ

key

string

คีย์หากฟิลด์เป็นแผนที่

OutputConfig

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

ช่อง
data_format

DataFormat

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

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

GcsDestination

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

RouteModifiers

แคปซูลชุดเงื่อนไขที่ไม่บังคับเพื่อตอบสนองเมื่อคำนวณเส้นทางของยานพาหนะ ซึ่งคล้ายกับ RouteModifiers ใน Routes Preferred API ของ Google Maps Platform ดูที่ https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers

ช่อง
avoid_tolls

bool

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

avoid_highways

bool

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

avoid_ferries

bool

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

avoid_indoor

bool

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

การจัดส่ง

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

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

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

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

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

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

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

หากมีการระบุทั้งขีดจำกัดแบบสัมพัทธ์และแบบสัมบูรณ์ในการจัดส่งเดียวกัน ระบบจะใช้ขีดจำกัดที่จำกัดมากกว่าสำหรับคู่การรับ/นำส่งที่เป็นไปได้แต่ละคู่ ตั้งแต่เดือนตุลาคม 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

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

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

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

หากมีการระบุทั้งขีดจำกัดแบบสัมพัทธ์และแบบสัมบูรณ์ในการจัดส่งเดียวกัน ระบบจะใช้ขีดจำกัดที่จำกัดมากกว่าสำหรับคู่การรับ/นำส่งที่เป็นไปได้แต่ละคู่ ตั้งแต่เดือนตุลาคม 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 ที่เกี่ยวข้อง

avoid_u_turns

bool

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

ทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request

ShipmentModel

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

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

Shipment

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

vehicles[]

Vehicle

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

objectives[]

Objective

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

ทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request

global_start_time

Timestamp

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

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

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

global_end_time

Timestamp

หากไม่ได้ตั้งค่า ระบบจะใช้ 00:00:00 UTC, 1 มกราคม 1971 (เช่น วินาที: 31536000, นาโน: 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 โดยใช้เมทริกซ์ "fast"
  • คำขอเข้าชมเพื่อรับสินค้า 1 รายการที่ locC
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) ไปยังการเข้าชมอื่นๆ ในเมทริกซ์ i

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

duration_distance_matrix_dst_tags[]

string

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

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

transition_attributes[]

TransitionAttributes

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

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

ชุด shipment_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

วัตถุประสงค์

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

ทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request

ช่อง
type

Type

ประเภทของวัตถุประสงค์

weight

double

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

ประเภท

ประเภทวัตถุประสงค์ที่จะแมปกับชุดค่าใช้จ่าย

Enum
DEFAULT ระบบจะใช้ชุดค่าใช้จ่ายเริ่มต้นเพื่อให้มั่นใจว่าโซลูชันมีความสมเหตุสมผล หมายเหตุ: คุณสามารถใช้วัตถุประสงค์นี้ได้ด้วยตัวเอง แต่ระบบจะเพิ่มวัตถุประสงค์นี้โดยมีน้ำหนักเป็น 1.0 เสมอเป็นพื้นฐานให้กับวัตถุประสงค์ที่ผู้ใช้ระบุ หากยังไม่มีวัตถุประสงค์นี้
MIN_DISTANCE วัตถุประสงค์ "MIN" ลดระยะทางรวมที่เดินทาง
MIN_WORKING_TIME ลดเวลาทำงานทั้งหมดที่รวมกันของยานพาหนะทั้งหมด
MIN_TRAVEL_TIME เหมือนกับด้านบน แต่เน้นที่เวลาเดินทางเท่านั้น
MIN_NUM_VEHICLES ลดจำนวนยานพาหนะที่ใช้

PrecedenceRule

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

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

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

ช่อง
first_is_delivery

bool

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

second_is_delivery

bool

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

offset_duration

Duration

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

first_index

int32

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

second_index

int32

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

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

โปรดทราบว่าเราแยกความแตกต่างระหว่าง

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

ค่าคงที่:

  • หากมีการเข้าชม 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 ในระหว่างการเปลี่ยนผ่านกัน

  • โดยทั้ง 2 ส่วนจะไม่ทับซ้อนกัน
  • DELAY ต้องไม่ซ้ำกันและต้องเป็นระยะเวลาต่อเนื่องก่อนการเข้าชมครั้งถัดไป (หรือสิ้นสุดยานพาหนะ) ดังนั้น คุณเพียงแค่ทราบระยะเวลาการเลื่อนเพื่อทราบเวลาเริ่มต้นและเวลาสิ้นสุด
  • ช่วงพักคือช่วงเวลาที่ต่อเนื่องกันและไม่ทับซ้อนกัน การตอบกลับจะระบุเวลาเริ่มต้นและระยะเวลาของช่วงพักแต่ละช่วง
  • สถานะ 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     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
ช่อง
vehicle_index

int32

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

vehicle_label

string

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

vehicle_start_time

Timestamp

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

vehicle_end_time

Timestamp

เวลาที่รถสิ้นสุดเส้นทาง

visits[]

Visit

ลําดับการเข้าชมที่เรียงตามลําดับซึ่งแสดงเส้นทาง visits[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 ทั้งหมด โดยขึ้นอยู่กับบริบท

vehicle_fullness

VehicleFullness

VehicleFullness เพื่อคำนวณว่าเมตริกที่จำกัดนั้นใกล้เคียงกับขีดจำกัดของยานพาหนะที่เกี่ยวข้องมากน้อยเพียงใด ฟิลด์ของเมตริกนี้คืออัตราส่วนระหว่างฟิลด์เมตริกที่มีการจำกัด (เช่น AggregatedMetrics.travel_distance_meters) กับขีดจำกัดของยานพาหนะที่เกี่ยวข้อง (เช่น Vehicle.route_distance_limit)

ทดลอง: ลักษณะการทำงานหรือการมีอยู่ของฟิลด์นี้อาจมีการเปลี่ยนแปลงในอนาคต

route_costs

map<string, double>

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

route_total_cost

double

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

พัก

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

ช่อง
start_time

Timestamp

เวลาเริ่มต้นของช่วงพัก

duration

Duration

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

EncodedPolyline

การแสดงเส้นประกอบที่เข้ารหัส ดูข้อมูลเพิ่มเติมเกี่ยวกับการเข้ารหัส Polyline ได้ที่ 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 เป็น "จริง"

route_token

string

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

vehicle_loads

map<string, VehicleLoad>

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

การโหลดในช่วงการเปลี่ยนผ่านครั้งแรกคือการโหลดเริ่มต้นของเส้นทางยานพาหนะ จากนั้นหลังจากการเข้าชมแต่ละครั้ง ระบบจะload_demandsเพิ่มหรือลบ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

injected_solution_location_token

int32

โทเค็นทึบแสงที่แสดงข้อมูลเกี่ยวกับสถานที่ที่เข้าชม

ระบบอาจป้อนข้อมูลในช่องนี้ในการเข้าชมเส้นทางผลลัพธ์เมื่อตั้งค่า VisitRequest.avoid_u_turns เป็นจริงสำหรับการเข้าชมนี้ หรือหากตั้งค่า ShipmentModel.avoid_u_turns เป็นจริงในคำขอ OptimizeToursRequest

ทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request

ShipmentTypeIncompatibility

ระบุความไม่เข้ากันระหว่างการจัดส่งโดยขึ้นอยู่กับ shipment_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 รายการที่มีประเภทไม่เข้ากันจะอยู่ในยานพาหนะเดียวกันพร้อมกันไม่ได้

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

ShipmentTypeRequirement

ระบุข้อกำหนดระหว่างการจัดส่งตาม shipment_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 หากเราไม่เข้าใจว่าเหตุใดจึงข้ามการจัดส่ง ระบบจะไม่ตั้งค่าเหตุผล

penalty_cost

double

นี่คือสำเนาของShipment.penalty_cost ซึ่งรวมไว้ที่นี่เพื่อให้ดูความรุนแรงของการจัดส่งที่ข้ามได้ง่ายขึ้น

ทดลอง: ลักษณะการทำงานหรือการมีอยู่ของฟิลด์นี้อาจมีการเปลี่ยนแปลงในอนาคต

estimated_incompatible_vehicle_ratio

double

อัตราส่วนโดยประมาณของยานพาหนะที่ไม่สามารถทำการจัดส่งนี้ได้เนื่องจากเหตุผลอย่างน้อย 1 ข้อด้านล่าง หมายเหตุ: จะกรอกข้อมูลนี้ก็ต่อเมื่อเหตุผลเกี่ยวข้องกับยานพาหนะเท่านั้น

ทดลอง: ลักษณะการทำงานหรือการมีอยู่ของฟิลด์นี้อาจมีการเปลี่ยนแปลงในอนาคต

เหตุผล

หากเราอธิบายได้ว่าทำไมจึงข้ามการจัดส่ง ระบบจะแสดงเหตุผลไว้ที่นี่ หากเหตุผลไม่เหมือนกันสำหรับยานพาหนะทั้งหมด 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) ยานพาหนะอย่างน้อย 1 คันจะบรรทุก "ลูกแพร" เกินความจุ (รวมถึงยานพาหนะ 3) และยานพาหนะอย่างน้อย 1 คันจะเดินทางเกินขีดจำกัดระยะทาง (รวมถึงยานพาหนะ 1)

ช่อง
code

Code

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

example_vehicle_indices[]

int32

เช่นเดียวกับ example_vehicle_index เว้นแต่ว่าเราจะแสดงรายการยานพาหนะหลายคันที่ระบุ รายการนี้เป็นเพียงตัวอย่างบางส่วนเท่านั้น ระบบจะกรอกข้อมูลนี้ก็ต่อเมื่อ [fill_example_vehicle_indices_in_skipped_reasons][] เป็นจริง

ทดลอง: ลักษณะการทำงานหรือการมีอยู่ของฟิลด์นี้อาจมีการเปลี่ยนแปลงในอนาคต

example_exceeded_capacity_type

string

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

example_vehicle_index

int32

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

รหัส

รหัสที่ระบุประเภทเหตุผล ลำดับที่แสดงไม่มีความหมาย โดยเฉพาะอย่างยิ่ง จะไม่มีการระบุว่าเหตุผลใดจะปรากฏก่อนในโซลูชัน หากทั้ง 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ของยานพาหนะ

หมายเหตุ: ระบบจะคำนวณเวลาเดินทางในกรณีที่ดีที่สุด นั่นคือ ระยะทางแบบ Geodesic 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 ของการจัดส่งไม่ว่างเปล่าและยานพาหนะนี้ไม่ได้เป็นของการจัดส่งดังกล่าว
VEHICLE_IGNORED

ฟิลด์ ignore ของยานพาหนะเป็นจริง

ทดลอง: ลักษณะการทำงานหรือการมีอยู่ของฟิลด์นี้อาจมีการเปลี่ยนแปลงในอนาคต

SHIPMENT_IGNORED

ฟิลด์ ignore ของการจัดส่งเป็นจริง

ทดลอง: ลักษณะการทำงานหรือการมีอยู่ของฟิลด์นี้อาจมีการเปลี่ยนแปลงในอนาคต

SKIPPED_IN_INJECTED_SOLUTION_CONSTRAINT

ระบบข้ามการจัดส่งใน injected_solution_constraint

ทดลอง: ลักษณะการทำงานหรือการมีอยู่ของฟิลด์นี้อาจมีการเปลี่ยนแปลงในอนาคต

VEHICLE_ROUTE_IS_FULLY_SEQUENCE_CONSTRAINED

การผ่อนปรนเส้นทางของยานพาหนะที่ระบุใน injected_solution_constraint ไม่อนุญาตให้แทรกการเข้าชม

ทดลอง: ลักษณะการทำงานหรือการมีอยู่ของฟิลด์นี้อาจมีการเปลี่ยนแปลงในอนาคต

ZERO_PENALTY_COST

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

ทดลอง: ลักษณะการทำงานหรือการมีอยู่ของฟิลด์นี้อาจมีการเปลี่ยนแปลงในอนาคต

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` <= `end_time` and
  0 <= `start_time` <= `soft_start_time` and
  0 <= `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 อย่างใดอย่างหนึ่งที่ไม่ว่างเปล่า

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 อย่างใดอย่างหนึ่งที่ไม่ว่างเปล่า

cost

double

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

cost_per_kilometer

double

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

distance_limit

DistanceLimit

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

ตั้งแต่เดือนมิถุนายน 2021 เป็นต้นไป ระบบจะรองรับเฉพาะขีดจำกัดแบบยืดหยุ่น

delay

Duration

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

ความล่าช้านี้จะเกิดขึ้นหลังจากการเข้าชมแหล่งที่มาเสร็จสิ้นและก่อนเริ่มการเข้าชมหน้า Landing Page เสมอ

อูรี

ตัวระบุทรัพยากรสากลที่ชี้ไปยังทรัพยากรที่ Route Optimization API อ่านและเขียนได้

ช่อง
uri

string

URI ของทรัพยากร ทรัพยากรอาจยังไม่มี

เนื้อหาของทรัพยากรจะได้รับการเข้ารหัสเป็น JSON หรือ Textproto ระบบรองรับเฉพาะทรัพยากร Google Cloud Storage หากทรัพยากรได้รับการเข้ารหัสเป็น JSON ชื่อทรัพยากรต้องลงท้ายด้วย .json หากมีการเข้ารหัสทรัพยากรเป็น Textproto ชื่อทรัพยากรต้องลงท้ายด้วย .txtpb เช่น URI ของ Google Cloud Storage ไปยังไฟล์ที่เข้ารหัส JSON อาจมีลักษณะดังนี้ gs://bucket/path/input/object.json

ยานพาหนะ

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

ช่อง
display_name

string

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

travel_mode

TravelMode

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

route_modifiers

RouteModifiers

ชุดเงื่อนไขที่ต้องปฏิบัติตามซึ่งส่งผลต่อวิธีคำนวณเส้นทางสำหรับยานพาหนะที่กำหนด

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>

ระบุแมปจากสตริง visit_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

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

เมื่อกำหนดฟิลด์ขีดจำกัดแบบยืดหยุ่นแล้ว คุณต้องกำหนดทั้งเกณฑ์สูงสุดแบบยืดหยุ่นและต้นทุนที่เกี่ยวข้องพร้อมกัน

ช่อง
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 ตามเส้นทางของยานพาหนะนี้ จะมีการลงโทษด้านต้นทุนดังต่อไปนี้ (ครั้งเดียวต่อยานพาหนะ) (น้ำหนักบรรทุก - soft_max_load) * cost_per_unit_above_soft_max ค่าใช้จ่ายทั้งหมดจะรวมกันและต้องอยู่ในหน่วยเดียวกันกับ Shipment.penalty_cost คุณกำหนดขีดจำกัดแบบยืดหยุ่นได้เฉพาะในประเภทที่มีผลกับการรับสินค้าเท่านั้นหรือการนำส่งเท่านั้นทั่วทั้งโมเดล

start_load_interval

Interval

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

end_load_interval

Interval

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

max_load

int64

ปริมาณการโหลดสูงสุดที่ยอมรับได้

cost_per_kilometer

LoadCost

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

ทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request

cost_per_traveled_hour

LoadCost

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

ทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request

ช่วงเวลา

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

ช่อง
min

int64

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

max

int64

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

LoadCost

ต้นทุนในการย้ายโหลด 1 หน่วยในระหว่าง Transition สำหรับภาระงานหนึ่งๆ ค่าใช้จ่ายคือผลรวมของ 2 ส่วนต่อไปนี้

  • min(load, load_threshold) * cost_per_unit_below_threshold
  • max(0, load - load_threshold) * cost_per_unit_above_threshold

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

load_limit {
  key: "weight"
  value {
    cost_per_kilometer {
      load_threshold: 15
      cost_per_unit_below_threshold: 2.0
      cost_per_unit_above_threshold: 10.0
    }
  }
}

และเส้นทางคือ start,pickup,pickup,delivery,delivery,end โดยมีการเปลี่ยนเส้นทางดังนี้

transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }

จากนั้นต้นทุนที่เกิดจาก LoadCost นี้คือ (cost_below * load_below * kilometers + cost_above * load_above * kms)

  • การเปลี่ยน 0: 0.0
  • การเปลี่ยน 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • การเปลี่ยน 2: 2.0 * 15 * 1.0 + 10.0 * (20 - 15) * 1.0 = 80.0
  • การเปลี่ยน 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • การเปลี่ยนฉาก 4: 0.0

ดังนั้น LoadCost ตลอดเส้นทางจึงเป็น 120.0

อย่างไรก็ตาม หากเส้นทางเป็น start,pickup,delivery,pickup,delivery,end โดยมีการเปลี่ยนผ่าน

transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }

จากนั้นค่าใช้จ่ายที่เกิดจาก LoadCost นี้คือ

  • การเปลี่ยน 0: 0.0
  • การเปลี่ยน 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • ทรานซิชัน 2: 0.0
  • การเปลี่ยน 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • การเปลี่ยนฉาก 4: 0.0

ในที่นี้ LoadCost ตลอดเส้นทางคือ 40.0

LoadCost ทำให้โซลูชันที่มีการเปลี่ยนฉากหนักๆ มีราคาแพงขึ้น

ทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request

ช่อง
load_threshold

int64

ปริมาณการโหลดที่สูงกว่านี้จะทำให้ต้นทุนในการย้ายหน่วยการโหลดเปลี่ยนจาก cost_per_unit_below_threshold เป็น cost_per_unit_above_threshold ต้องมีค่ามากกว่าหรือเท่ากับ 0

cost_per_unit_below_threshold

double

ต้นทุนในการย้ายหน่วยของภาระงานสำหรับแต่ละหน่วยระหว่าง 0 กับเกณฑ์ ต้องเป็นค่าที่สิ้นสุดและมากกว่าหรือเท่ากับ 0

cost_per_unit_above_threshold

double

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

TravelMode

โหมดการเดินทางที่ยานพาหนะใช้ได้

ซึ่งควรเป็นชุดย่อยของโหมดการเดินทางของ Google Maps Platform Routes API ดูที่ https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode

หมายเหตุ: WALKING เส้นทางอยู่ในเวอร์ชันเบต้าและบางครั้งอาจไม่มีทางเท้าหรือเส้นทางคนเดินที่ชัดเจน คุณต้องแสดงคำเตือนนี้ต่อผู้ใช้สำหรับเส้นทางเดินทั้งหมดที่แสดงในแอป

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

UnloadingPolicy

นโยบายเกี่ยวกับวิธีขนถ่ายยานพาหนะ ใช้กับการจัดส่งที่มีทั้งการรับและการนำส่งเท่านั้น

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

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

VehicleFullness

VehicleFullness คือเมตริกที่คำนวณว่ายานพาหนะเต็มหรือไม่ ฟิลด์ VehicleFullness แต่ละรายการอยู่ระหว่าง 0 ถึง 1 โดยคำนวณเป็นอัตราส่วนระหว่างฟิลด์เมตริกที่จำกัด (เช่น AggregatedMetrics.travel_distance_meters) กับขีดจำกัดของยานพาหนะที่เกี่ยวข้อง (เช่น Vehicle.route_distance_limit) หากมี มิฉะนั้น ระบบจะไม่ตั้งค่าอัตราส่วนความสมบูรณ์ หากขีดจํากัดเป็น 0 ระบบจะตั้งค่าช่องเป็น 1 หมายเหตุ: เมื่อเส้นทางมีปัญหาด้านการจราจร อัตราส่วนความหนาแน่นดิบบางรายการอาจเกิน 1.0 เช่น ยานพาหนะอาจเกินขีดจำกัดระยะทาง ในกรณีเหล่านี้ เราจะจำกัดค่าความสมบูรณ์ไว้ที่ 1.0

ช่อง
max_fullness

double

ค่าสูงสุดของฟิลด์อื่นๆ ทั้งหมดในข้อความนี้

distance

double

อัตราส่วนระหว่าง AggregatedMetrics.travel_distance_meters กับ Vehicle.route_distance_limit หากไม่ได้ตั้งค่า Vehicle.route_distance_limit ระบบจะไม่ได้ตั้งค่าช่องนี้

travel_duration

double

อัตราส่วนระหว่าง [AggregatedMetrics.travel_duration_seconds][] กับ Vehicle.travel_duration_limit หากไม่ได้ตั้งค่า Vehicle.travel_duration_limit ระบบจะไม่ได้ตั้งค่าช่องนี้

active_duration

double

อัตราส่วนระหว่าง [AggregatedMetrics.total_duration_seconds][] กับ Vehicle.route_duration_limit หากไม่ได้ตั้งค่า Vehicle.route_duration_limit ระบบจะไม่ได้ตั้งค่าช่องนี้

max_load

double

อัตราส่วนสูงสุดใน [AggregatedMetrics.max_load][] ทุกประเภทและ Vehicle.load_limits ที่เกี่ยวข้อง หากไม่ได้ตั้งค่าฟิลด์ Vehicle.load_limits ทั้งหมด ระบบจะไม่ได้ตั้งค่าฟิลด์นี้

active_span

double

สัดส่วน (vehicle_end_time - vehicle_start_time) / (latest_vehicle_end_time - earliest_vehicle_start_time) สำหรับยานพาหนะที่กำหนด หากไม่มีตัวหาร ระบบจะใช้ (ShipmentModel.global_end_time - ShipmentModel.global_start_time) แทน

จุดบอกทาง

ห่อหุ้มจุดอ้างอิง จุดอ้างอิงจะทำเครื่องหมายตำแหน่งที่มาถึงและตำแหน่งที่ออกเดินทางของ VisitRequest รวมถึงตำแหน่งเริ่มต้นและตำแหน่งสิ้นสุดของยานพาหนะ

ช่อง
side_of_road

bool

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

vehicle_stopover

bool

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

ทดลอง: ลักษณะการทำงานหรือการมีอยู่ของฟิลด์นี้อาจมีการเปลี่ยนแปลงในอนาคต

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

Location

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

place_id

string

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

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