Package google.maps.routeoptimization.v1

ดัชนี

RouteOptimization

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

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

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

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

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

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

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

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

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

rpc OptimizeTours(OptimizeToursRequest) returns (OptimizeToursResponse)

ส่ง OptimizeToursRequest ที่มี ShipmentModel และส่งกลับ OptimizeToursResponse ที่มี ShipmentRoute ซึ่งเป็นชุดเส้นทางที่ยานพาหนะจะต้องลดต้นทุนโดยรวม

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

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

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

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

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

AggregatedMetrics

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

ช่อง
performed_shipment_count

int32

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

travel_duration

Duration

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

wait_duration

Duration

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

delay_duration

Duration

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

break_duration

Duration

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

visit_duration

Duration

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

total_duration

Duration

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

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

double

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

max_loads

map<string, VehicleLoad>

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

BatchOptimizeToursMetadata

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

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

BatchOptimizeToursRequest

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

ช่อง
parent

string

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

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

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

model_configs[]

AsyncModelConfig

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

AsyncModelConfig

ข้อมูลสําหรับการแก้ปัญหารูปแบบการเพิ่มประสิทธิภาพ 1 รูปแบบแบบไม่พร้อมกัน

ช่อง
display_name

string

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

input_config

InputConfig

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

output_config

OutputConfig

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

BatchOptimizeToursResponse

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

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

BreakRule

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

  • ระหว่างการเดินทางระหว่างการเข้าชมสองครั้ง (ซึ่งรวมถึงเวลาก่อนหรือหลังการเข้าชมทันที แต่ไม่ได้ในระหว่างการเข้าชม) ในกรณีนี้ ระบบจะขยายเวลาขนส่งที่สอดคล้องกันระหว่างการเข้าชมเหล่านั้น
  • หรือก่อนที่รถจะสตาร์ท (รถอาจไม่สตาร์ทขณะพัก) ซึ่งในกรณีนี้จะไม่ส่งผลต่อสตาร์ทรถ
  • หรือหลังจากท้ายรถ (ตามด้วยเวลาสิ้นสุดของยานพาหนะ)
ช่อง
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_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 เวลาเริ่มต้น/สิ้นสุดการเข้าชมจะได้รับการผ่อนปรน แต่การเข้าชมแต่ละครั้งจะยังคงผูกกับยานพาหนะเดียวกันและต้องปฏิบัติตามลำดับการเข้าชม นั่นคือไม่สามารถแทรกการเข้าชมไปมาระหว่างทั้ง 2 อย่างหรือก่อนหน้าได้
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.RouteoptimizerService.BatchOptimizeTours]

ช่อง
data_format

DataFormat

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

ช่องการรวม source ต้องระบุ source ต้องเป็นค่าใดค่าหนึ่งต่อไปนี้
gcs_source

GcsSource

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

ตำแหน่ง

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

ช่อง
lat_lng

LatLng

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

heading

int32

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

OptimizeToursRequest

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

ช่อง
parent

string

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

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

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

timeout

Duration

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

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

model

ShipmentModel

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

solving_mode

SolvingMode

โดยค่าเริ่มต้น โหมดแก้ปัญหาคือ DEFAULT_SOLVE (0)

search_mode

SearchMode

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

injected_first_solution_routes[]

ShipmentRoute

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

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

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

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

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

injected_solution_constraint

InjectedSolutionConstraint

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

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

refresh_details_routes[]

ShipmentRoute

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

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

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

หาก 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) ยกเว้น troubleshooting_mode=VALIDATE_ONLY: โปรดดูช่อง OptimizeToursResponse.validation_errors ค่าเริ่มต้นคือ 100 และจํากัดอยู่ที่ 10,000 รายการ

SearchMode

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

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

SolvingMode

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

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

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

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

OptimizeToursResponse

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

ช่อง
routes[]

ShipmentRoute

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

request_label

string

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

skipped_shipments[]

SkippedShipment

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

validation_errors[]

OptimizeToursValidationError

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

metrics

Metrics

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

เมตริก

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

ช่อง
aggregated_route_metrics

AggregatedMetrics

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

skipped_mandatory_shipment_count

int32

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

used_vehicle_count

int32

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

earliest_vehicle_start_time

Timestamp

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

latest_vehicle_end_time

Timestamp

เวลาสิ้นสุดล่าสุดสำหรับยานพาหนะมือสอง ซึ่งคำนวณเป็นค่าสูงสุดสำหรับยานพาหนะมือสองทั้งหมดที่มีราคา ShipmentRoute.vehicle_end_time

costs

map<string, double>

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

total_cost

double

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

OptimizeToursValidationError

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

ช่อง
code

int32

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

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

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

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

REFERENCE: รายการคู่รหัสทั้งหมด (รหัสและชื่อ)

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

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

string

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

fields[]

FieldReference

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

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

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

error_message

string

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

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

offending_values

string

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

FieldReference

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

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

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

ช่อง
name

string

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

sub_field

FieldReference

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

ช่องการรวม index_or_key

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

index

int32

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

key

string

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

OutputConfig

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

ช่อง
data_format

DataFormat

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

ช่องการรวม destination ต้องระบุ destination ต้องเป็นค่าใดค่าหนึ่งต่อไปนี้
gcs_destination

GcsDestination

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

การจัดส่ง

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

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

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

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

costs_per_vehicle_indices[]

int32

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

pickup_to_delivery_absolute_detour_limit

Duration

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

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

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

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

pickup_to_delivery_time_limit

Duration

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

shipment_type

string

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

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

label

string

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

ignore

bool

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

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

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

penalty_cost

double

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

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

pickup_to_delivery_relative_detour_limit

double

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

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

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

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

โหลด

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

ช่อง
amount

int64

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

VisitRequest

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

ช่อง
arrival_location

LatLng

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

arrival_waypoint

Waypoint

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

departure_location

LatLng

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

departure_waypoint

Waypoint

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

tags[]

string

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

time_windows[]

TimeWindow

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

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

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

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

duration

Duration

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

cost

double

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

load_demands

map<string, Load>

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

visit_types[]

string

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

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

label

string

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

ShipmentModel

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

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

Shipment

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

vehicles[]

Vehicle

ชุดยานพาหนะที่ใช้เดินทางไปได้

global_start_time

Timestamp

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

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

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

global_end_time

Timestamp

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

global_duration_cost_per_hour

double

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

duration_distance_matrices[]

DurationDistanceMatrix

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

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

  • สถานที่ตั้งมี 2 แห่ง ได้แก่ locA และ locB
  • ยานพาหนะ 1 คันเริ่มออกเดินทางที่ LoA และสิ้นสุดที่ 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 คันเริ่มต้นเส้นทางที่ LoA และสิ้นสุดที่ locB โดยใช้เมทริกซ์ "เร็ว"
  • ยานพาหนะ 1 คันเริ่มต้นเส้นทางที่ locB และสิ้นสุดที่ locB โดยใช้เมทริกซ์ "ช้า"
  • ยานพาหนะ 1 คันเริ่มต้นเส้นทางที่ locB และสิ้นสุดที่ locB โดยใช้เมทริกซ์ "เร็ว"
  • คำขอเข้าชมการรับสินค้า 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) ถึงการเข้าชมอื่นๆ ในเมทริกซ์ 1

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

duration_distance_matrix_dst_tags[]

string

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

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

transition_attributes[]

TransitionAttributes

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

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

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

shipment_type_requirements[]

ShipmentTypeRequirement

ชุดข้อกำหนด shipment_type รายการ (ดู ShipmentTypeRequirement)

precedence_rules[]

PrecedenceRule

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

max_active_vehicles

int32

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

DurationDistanceMatrix

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

ช่อง
rows[]

Row

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

vehicle_start_tag

string

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

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

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

แถว

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

ช่อง
durations[]

Duration

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

meters[]

double

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

PrecedenceRule

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

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

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

ช่อง
first_is_delivery

bool

ระบุว่าตัวเลือก "รายการแรก" กิจกรรมคือการส่ง

second_is_delivery

bool

ระบุว่า "วินาที" กิจกรรมคือการส่ง

offset_duration

Duration

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

first_index

int32

ดัชนีการจัดส่งของ "รายการแรก" กิจกรรม ต้องระบุฟิลด์นี้

second_index

int32

ดัชนีการจัดส่ง "วินาที" กิจกรรม ต้องระบุฟิลด์นี้

ShipmentRoute

เส้นทางของยานพาหนะสามารถแยกออกเป็นย่อยตามแกนเวลา ดังนี้ (เราถือว่ามีการขับรถผ่าน n ครั้ง):

  |            |            |          |       |  T[2], |        |      |
  | Transition |  Visit #0  |          |       |  V[2], |        |      |
  |     #0     |    aka     |   T[1]   |  V[1] |  ...   | V[n-1] | T[n] |
  |  aka T[0]  |    V[0]    |          |       | V[n-2],|        |      |
  |            |            |          |       | T[n-1] |        |      |
  ^            ^            ^          ^       ^        ^        ^      ^
vehicle    V[0].start   V[0].end     V[1].   V[1].    V[n].    V[n]. vehicle
 start     (arrival)   (departure)   start   end      start    end     end

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

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

ตัวแปร:

  • หากมีการเข้าชม n ครั้ง จะมี การเปลี่ยน n+1
  • การเข้าชมจะอยู่ภายในการเปลี่ยนเกิดขึ้นก่อน (ดัชนีเดียวกัน) และการเปลี่ยนตามหลัง (ดัชนี + 1) เสมอ
  • สตาร์ทรถจะตามด้วยการเปลี่ยนที่ 0 เสมอ
  • จุดสิ้นสุดของยานพาหนะอยู่ข้างหน้าด้วยการเปลี่ยน #n เสมอ

เมื่อซูมเข้า นี่คือสิ่งที่จะเกิดขึ้นระหว่างTransitionและVisit

---+-------------------------------------+-----------------------------+-->
   |           TRANSITION[i]             |           VISIT[i]          |
   |                                     |                             |
   |  * TRAVEL: the vehicle moves from   |      PERFORM the visit:     |
   |    VISIT[i-1].departure_location to |                             |
   |    VISIT[i].arrival_location, which |  * Spend some time:         |
   |    takes a given travel duration    |    the "visit duration".    |
   |    and distance                     |                             |
   |                                     |  * Load or unload           |
   |  * BREAKS: the driver may have      |    some quantities from the |
   |    breaks (e.g. lunch break).       |    vehicle: the "demand".   |
   |                                     |                             |
   |  * WAIT: the driver/vehicle does    |                             |
   |    nothing. This can happen for     |                             |
   |    many reasons, for example when   |                             |
   |    the vehicle reaches the next     |                             |
   |    event's destination before the   |                             |
   |    start of its time window         |                             |
   |                                     |                             |
   |  * DELAY: *right before* the next   |                             |
   |    arrival. E.g. the vehicle and/or |                             |
   |    driver spends time unloading.    |                             |
   |                                     |                             |
---+-------------------------------------+-----------------------------+-->
   ^                                     ^                             ^
V[i-1].end                           V[i].start                    V[i].end

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

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

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

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

int32

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

vehicle_label

string

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

vehicle_start_time

Timestamp

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

vehicle_end_time

Timestamp

เวลาที่รถวิ่งจนเสร็จสิ้น

visits[]

Visit

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

transitions[]

Transition

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

has_traffic_infeasibilities

bool

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

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

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

route_polyline

EncodedPolyline

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

breaks[]

Break

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

metrics

AggregatedMetrics

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

route_costs

map<string, double>

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

route_total_cost

double

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

พัก

ข้อมูลที่แสดงถึงการหยุดพัก

ช่อง
start_time

Timestamp

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

duration

Duration

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

EncodedPolyline

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

ช่อง
points

string

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

ทรานซิชัน

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

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

ช่อง
travel_duration

Duration

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

travel_distance_meters

double

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

traffic_info_unavailable

bool

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

delay_duration

Duration

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

break_duration

Duration

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

wait_duration

Duration

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

total_duration

Duration

ระยะเวลารวมของการเปลี่ยน เพื่อความสะดวก โดยมีค่าเท่ากับ

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

Timestamp

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

route_polyline

EncodedPolyline

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

vehicle_loads

map<string, VehicleLoad>

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

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

VehicleLoad

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

ช่อง
amount

int64

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

ไปที่

มีการเข้าชมระหว่างเส้นทาง การเข้าชมนี้เกี่ยวข้องกับการมารับที่ร้านหรือการจัดส่งของShipment

ช่อง
shipment_index

int32

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

is_pickup

bool

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

visit_request_index

int32

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

start_time

Timestamp

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

load_demands

map<string, Load>

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

detour

Duration

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

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

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

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

string

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

visit_label

string

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

ShipmentTypeIncompatibility

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

ช่อง
types[]

string

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

incompatibility_mode

IncompatibilityMode

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

IncompatibilityMode

รูปแบบที่กำหนดลักษณะการจัดส่งที่เข้ากันไม่ได้ในเส้นทางเดียวกัน

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

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

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

ShipmentTypeRequirement

ระบุข้อกำหนดระหว่างการจัดส่งตามชนิดของการจัดส่ง [delivery_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 รายการ ในยานพาหนะของตน ณ เวลาไปรับ

"ผู้พึ่งพา" จุดรับพัสดุจึงต้องมีอย่างใดอย่างหนึ่งต่อไปนี้

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

SkippedShipment

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

ช่อง
index

int32

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

label

string

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

reasons[]

Reason

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

เหตุผล

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

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

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

ช่อง
code

Code

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

example_exceeded_capacity_type

string

หากรหัสเหตุผลคือ DEMAND_EXCEEDS_VEHICLE_CAPACITY โปรดบันทึกประเภทขีดจำกัดที่เกินมา 1 ประเภท

example_vehicle_index

int32

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

รหัส

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

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

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

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

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT

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

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

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

TimeWindow

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

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

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

Timestamp

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

end_time

Timestamp

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

soft_start_time

Timestamp

Soft Start ของกรอบเวลา

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 ที่แน่นอน 1 รายการ

dst_tag

string

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

excluded_dst_tag

string

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

cost

double

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

cost_per_kilometer

double

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

distance_limit

DistanceLimit

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

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

delay

Duration

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

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

ยานพาหนะ

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

ช่อง
display_name

string

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

travel_mode

TravelMode

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

start_location

LatLng

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

start_waypoint

Waypoint

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

end_location

LatLng

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

end_waypoint

Waypoint

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

start_tags[]

string

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

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

end_tags[]

string

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

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

start_time_windows[]

TimeWindow

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

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

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

end_time_windows[]

TimeWindow

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

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

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

unloading_policy

UnloadingPolicy

นโยบายการขนย้ายที่บังคับใช้กับรถ

load_limits

map<string, LoadLimit>

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

cost_per_hour

double

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

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

cost_per_traveled_hour

double

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

cost_per_kilometer

double

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

fixed_cost

double

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

used_if_route_is_empty

bool

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

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

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

route_duration_limit

DurationLimit

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

travel_duration_limit

DurationLimit

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

route_distance_limit

DistanceLimit

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

extra_visit_duration_for_visit_type

map<string, Duration>

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

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

break_rule

BreakRule

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

label

string

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

ignore

bool

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

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

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

travel_duration_multiple

double

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

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

ดูextra_visit_duration_for_visit_typeด้านล่างด้วย

DurationLimit

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

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

ช่อง
max_duration

Duration

ขีดจำกัดแบบเข้มงวดซึ่งจำกัดระยะเวลาอยู่ที่ max_duration

soft_max_duration

Duration

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

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

quadratic_soft_max_duration

Duration

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

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

max_duration - quadratic_soft_max_duration <= 86400 seconds

cost_per_hour_after_soft_max

double

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

  cost_per_hour_after_soft_max * (duration - soft_max_duration)

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

cost_per_square_hour_after_quadratic_soft_max

double

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

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

  cost_per_square_hour_after_quadratic_soft_max *
  (duration - quadratic_soft_max_duration)^2

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

LoadLimit

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

ช่อง
soft_max_load

int64

ขีดจำกัดชั่วคราวของการโหลด ดูcost_per_unit_above_soft_max

cost_per_unit_above_soft_max

double

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

start_load_interval

Interval

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

end_load_interval

Interval

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

max_load

int64

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

ช่วงเวลา

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

ช่อง
min

int64

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

max

int64

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

TravelMode

รูปแบบการเดินทางที่ยานพาหนะสามารถใช้ได้

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

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

UnloadingPolicy

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

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

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

จุดบอกทาง

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

ช่อง
side_of_road

bool

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

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

Location

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

place_id

string

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