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

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

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

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

ผู้ใช้สามารถโพล 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 หากสำเร็จ

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

ต้องใช้ขอบเขต 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 คือ OptimizeToursUriMetadata ประเภทฟิลด์ response คือ OptimizeToursUriResponse หากสำเร็จ

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

ต้องใช้ขอบเขต 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

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

ช่อง
display_name

string

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

input_config

InputConfig

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

output_config

OutputConfig

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

BatchOptimizeToursResponse

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

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

BreakRule

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

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

BreakRequest

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

frequency_constraints[]

FrequencyConstraint

FrequencyConstraintหลายรายการอาจมีผลบังคับใช้ BreakRequest ของ BreakRule นี้ต้องเป็นไปตามเงื่อนไขทั้งหมด ดูข้อมูลที่ FrequencyConstraint

BreakRequest

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

ช่อง
earliest_start_time

Timestamp

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

latest_start_time

Timestamp

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

min_duration

Duration

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

FrequencyConstraint

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

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

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

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

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

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

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

ช่อง
level

Level

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

threshold_time

Timestamp

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

threshold_visit_count

int32

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

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

ระดับ

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

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

Enum
LEVEL_UNSPECIFIED

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

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

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

InputConfig

ระบุอินพุตสำหรับ [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours]

ช่อง
data_format

DataFormat

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

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

GcsSource

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

ตำแหน่ง

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

ช่อง
lat_lng

LatLng

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

heading

int32

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

OptimizeToursLongRunningMetadata

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

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

OptimizeToursRequest

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

ช่อง
parent

string

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

รูปแบบ:

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

ระบบไม่รองรับค่า {location-id} ระดับภูมิภาค

timeout

Duration

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

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

model

ShipmentModel

โมเดลการจัดส่งที่ต้องการแก้ปัญหา

solving_mode

SolvingMode

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

search_mode

SearchMode

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

injected_first_solution_routes[]

ShipmentRoute

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

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

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

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

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

injected_solution_constraint

InjectedSolutionConstraint

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

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

refresh_details_routes[]

ShipmentRoute

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

ตั้งแต่เดือนพฤศจิกายน 2020 เป็นต้นมา ฟิลด์นี้จะสร้างเฉพาะเส้นประกอบของเส้นทางที่ไม่ว่างเปล่าและกำหนดให้ populate_polylines เป็นจริง

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

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

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

interpret_injected_solutions_using_labels

bool

หากเป็นจริง ให้ทำดังนี้

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

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

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

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

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

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

consider_road_traffic

bool

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

populate_polylines

bool

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

populate_transition_polylines

bool

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

allow_large_deadline_despite_interruption_risk

bool

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

use_geodesic_distances

bool

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

label

string

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

geodesic_meters_per_second

double

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

max_validation_errors

int32

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

SearchMode

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

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

SolvingMode

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

Enum
DEFAULT_SOLVE แก้ปัญหาโมเดล ระบบอาจออกคำเตือนใน [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>

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

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

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

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

offending_values

string

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

FieldReference

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

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

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

ช่อง
name

string

ชื่อของฟิลด์ เช่น "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

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

costs_per_vehicle[]

double

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

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

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

costs_per_vehicle_indices[]

int32

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

pickup_to_delivery_absolute_detour_limit

Duration

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

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

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

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

pickup_to_delivery_time_limit

Duration

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

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

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

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

โหลด

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

ช่อง
amount

int64

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

VisitRequest

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

ช่อง
arrival_location

LatLng

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

arrival_waypoint

Waypoint

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

departure_location

LatLng

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

departure_waypoint

Waypoint

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

tags[]

string

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

time_windows[]

TimeWindow

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

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

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

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

duration

Duration

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

cost

double

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

load_demands

map<string, Load>

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

visit_types[]

string

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

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

label

string

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

avoid_u_turns

bool

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

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

ShipmentModel

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

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

Shipment

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

vehicles[]

Vehicle

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

objectives[]

Objective

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

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

global_start_time

Timestamp

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

ระยะเวลาของโมเดลต้องน้อยกว่า 1 ปี กล่าวคือ global_end_time และ global_start_time ต้องอยู่ภายใน 31,536,000 วินาทีของกันและกัน

เมื่อใช้ช่อง 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 โดยใช้เมทริกซ์ "fast"
  • ยานพาหนะ 1 คันเริ่มเส้นทางที่ locB และสิ้นสุดที่ locB โดยใช้เมทริกซ์ "slow"
  • ยานพาหนะ 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 ที่ระบุต้องตรงกับแท็กเดียวในช่องนี้ โปรดทราบว่าแท็กต้นทาง แท็กปลายทาง และแท็กเมทริกซ์ของ 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 ที่ระบุต้องตรงกับแท็กเดียวในช่องนี้ โปรดทราบว่าแท็กต้นทาง แท็กปลายทาง และแท็กเมทริกซ์ของ 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

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

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

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

  • โดยจะไม่มีการทับซ้อนกัน
  • 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>

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

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

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

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

รหัส

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

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

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

โปรดทราบว่าเราใช้ระยะทางจีโอเดสิกในการคำนวณนี้

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT

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

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

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

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

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

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

อูรี

Uniform Resource Identifier (URI) ที่ชี้ไปยังทรัพยากรที่ Route Optimization API อ่านและเขียนได้

ช่อง
uri

string

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

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

ยานพาหนะ

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

ช่อง
display_name

string

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

travel_mode

TravelMode

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

route_modifiers

RouteModifiers

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

start_location

LatLng

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

start_waypoint

Waypoint

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

end_location

LatLng

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

end_waypoint

Waypoint

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

start_tags[]

string

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

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

end_tags[]

string

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

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

start_time_windows[]

TimeWindow

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

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

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

end_time_windows[]

TimeWindow

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

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

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

unloading_policy

UnloadingPolicy

มีการบังคับใช้นโยบายการนำออกในยานพาหนะ

load_limits

map<string, LoadLimit>

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

cost_per_hour

double

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

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

cost_per_traveled_hour

double

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

cost_per_kilometer

double

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

fixed_cost

double

ต้นทุนคงที่ที่ใช้หากใช้ยานพาหนะนี้เพื่อจัดการการจัดส่ง

used_if_route_is_empty

bool

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

หากเป็นจริง ยานพาหนะจะเดินทางจากจุดเริ่มต้นไปยังจุดสิ้นสุดแม้ว่าจะไม่ได้ให้บริการจัดส่งใดๆ และจะมีการพิจารณาต้นทุนด้านเวลาและระยะทางที่เกิดจากการเดินทางจากจุดเริ่มต้นไปยังจุดสิ้นสุด

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

route_duration_limit

DurationLimit

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

travel_duration_limit

DurationLimit

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

route_distance_limit

DistanceLimit

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

extra_visit_duration_for_visit_type

map<string, Duration>

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

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

break_rule

BreakRule

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

label

string

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

ignore

bool

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

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

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

travel_duration_multiple

double

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

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับ extra_visit_duration_for_visit_type ด้านล่าง

DurationLimit

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

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

ช่อง
max_duration

Duration

ขีดจำกัดที่เข้มงวดซึ่งจำกัดระยะเวลาให้ไม่เกิน max_duration

soft_max_duration

Duration

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

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

quadratic_soft_max_duration

Duration

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

หากตั้งค่า quadratic_soft_max_duration ไว้ จะต้องเป็นไปตามเงื่อนไขต่อไปนี้

  • โดยต้องไม่ติดลบ
  • ต้องกำหนด max_duration
  • quadratic_soft_max_duration ต้องน้อยกว่า max_duration
  • ความแตกต่างต้องไม่เกิน 1 วัน: max_duration - quadratic_soft_max_duration <= 86400 seconds
cost_per_hour_after_soft_max

double

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

  cost_per_hour_after_soft_max * (duration - soft_max_duration)

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

cost_per_square_hour_after_quadratic_soft_max

double

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

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

  cost_per_square_hour_after_quadratic_soft_max *
  (duration - quadratic_soft_max_duration)^2

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

LoadLimit

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

ช่อง
soft_max_load

int64

ขีดจำกัดแบบไม่เข้มงวดของภาระงาน ดูcost_per_unit_above_soft_max

cost_per_unit_above_soft_max

double

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

start_load_interval

Interval

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

end_load_interval

Interval

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

max_load

int64

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

cost_per_kilometer

LoadCost

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

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

cost_per_traveled_hour

LoadCost

ต้นทุนการเดินทางพร้อมหน่วยน้ำหนักบรรทุกในช่วง 1 ชั่วโมงสำหรับยานพาหนะนี้

เวอร์ชันทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ 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
    }
  }
}

และเส้นทางคือเริ่มต้น,รับ,รับ,นำส่ง,นำส่ง,สิ้นสุด โดยมีการเปลี่ยนผ่านดังนี้

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

อย่างไรก็ตาม หากเส้นทางคือ เริ่มต้น, รับ, นำส่ง, รับ, นำส่ง, สิ้นสุด โดยมีการเปลี่ยนผ่าน

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

โหมดยานพาหนะที่ยานพาหนะใช้ได้

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

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

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

UnloadingPolicy

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

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

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

VehicleFullness

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

ช่อง
max_fullness

double

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

distance

double

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

travel_duration

double

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

active_duration

double

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

max_load

double

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

active_span

double

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

จุดบอกทาง

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

ช่อง
side_of_road

bool

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

vehicle_stopover

bool

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

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

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

Location

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

place_id

string

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

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