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

จำนวนการเข้าชมที่หรือหลังจากนั้นอาจใช้การผ่อนปรนได้ หาก threshold_visit_count เป็น 0 (หรือไม่ได้ตั้งค่า) อาจใช้ level ได้โดยตรงเมื่อรถเริ่มวิ่ง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 หมายถึง Heading ที่เป็นทิศเหนือ 90 หมายถึง Heading ที่เป็นทิศตะวันออก เป็นต้น

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" ฯลฯ หากคีย์ที่ระบุไม่ปรากฏในแผนที่ ระบบจะถือว่าโหลดที่เกี่ยวข้องเป็น Null

allowed_vehicle_indices[]

int32

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

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

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

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

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

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

pickup_to_delivery_time_limit

Duration

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

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

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

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

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

โหลด

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

ช่อง
amount

int64

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

VisitRequest

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

ช่อง
arrival_location

LatLng

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

arrival_waypoint

Waypoint

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

departure_location

LatLng

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

departure_waypoint

Waypoint

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

tags[]

string

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

time_windows[]

TimeWindow

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

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

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

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

duration

Duration

ระยะเวลาการเข้าชม เช่น เวลาที่ยานพาหนะใช้ระหว่างการมาถึงและการออกเดินทาง (จะเพิ่มลงในเวลาที่อาจต้องรอ ดู time_windows)

cost

double

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

load_demands

map<string, Load>

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

visit_types[]

string

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

ประเภทจะปรากฏได้เพียงครั้งเดียว

label

string

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

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

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

                               TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
  ||     |       |           |       |           |         |         ||
  ||  T  |   B   |     T     |       |     B     |         |    D    ||
  ||  r  |   r   |     r     |   W   |     r     |    W    |    e    ||
  ||  a  |   e   |     a     |   a   |     e     |    a    |    l    ||
  ||  v  |   a   |     v     |   i   |     a     |    i    |    a    ||
  ||  e  |   k   |     e     |   t   |     k     |    t    |    y    ||
  ||  l  |       |     l     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
ช่อง
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

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

visit_type

VisitType

ไม่บังคับ ระบุประเภทการเข้าชม ลบล้างฟิลด์ Visit.is_pickup

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

VisitType

ระบุว่าการเข้าชมเป็นการรับสินค้า การนำส่ง หรือการเข้าชม Stop การเข้าชม Stop จะใช้เมื่อเปิดใช้การเพิ่มประสิทธิภาพแบบมัลติโมดัลเท่านั้น

Enum
VISIT_TYPE_UNSPECIFIED ประเภทการเข้าชมที่ไม่ได้ระบุ
PICKUP_SHIPMENT การเข้าชมสอดคล้องกับการรับสินค้าที่จัดส่ง
DELIVER_SHIPMENT การเข้าชมจะสอดคล้องกับการนำส่งสินค้า

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_maxsoft_max_load ค่าใช้จ่ายทั้งหมดจะรวมกันและต้องอยู่ในหน่วยเดียวกันกับ 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 ทั้งหมด ระบบจะไม่ตั้งค่าฟิลด์นี้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 สำหรับการนำทางไปยังสถานที่นั้น เช่น รหัสสถานที่ที่แสดงถึงอาคารจะเหมาะสม แต่ไม่แนะนำให้ใช้รหัสสถานที่ที่แสดงถึงถนน