Method: projects.optimizeToursLongRunning

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

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

คำขอ HTTP

POST https://routeoptimization.googleapis.com/v1/{parent=projects/*}:optimizeToursLongRunning

URL ใช้ไวยากรณ์การแปลงรหัส gRPC

พารามิเตอร์เส้นทาง

พารามิเตอร์
parent

string

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

รูปแบบ:

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

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

เนื้อความของคำขอ

เนื้อหาของคำขอมีข้อมูลซึ่งมีโครงสร้างดังต่อไปนี้

การแสดง JSON
{
  "timeout": string,
  "model": {
    object (ShipmentModel)
  },
  "solvingMode": enum (SolvingMode),
  "searchMode": enum (SearchMode),
  "injectedFirstSolutionRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "injectedSolutionConstraint": {
    object (InjectedSolutionConstraint)
  },
  "refreshDetailsRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "interpretInjectedSolutionsUsingLabels": boolean,
  "considerRoadTraffic": boolean,
  "populatePolylines": boolean,
  "populateTransitionPolylines": boolean,
  "allowLargeDeadlineDespiteInterruptionRisk": boolean,
  "useGeodesicDistances": boolean,
  "label": string,
  "geodesicMetersPerSecond": number,
  "maxValidationErrors": integer
}
ช่อง
timeout

string (Duration format)

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

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

model

object (ShipmentModel)

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

solvingMode

enum (SolvingMode)

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

searchMode

enum (SearchMode)

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

injectedFirstSolutionRoutes[]

object (ShipmentRoute)

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

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

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

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

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

injectedSolutionConstraint

object (InjectedSolutionConstraint)

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

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

refreshDetailsRoutes[]

object (ShipmentRoute)

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

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

ฟิลด์ routePolyline ของเส้นทางที่ส่งเข้ามาอาจไม่สอดคล้องกับเส้นทาง transitions

ห้ามใช้ฟิลด์นี้ร่วมกับ injectedFirstSolutionRoutes หรือ injectedSolutionConstraint

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

interpretInjectedSolutionsUsingLabels

boolean

หากเป็นจริง

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

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

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

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

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

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

considerRoadTraffic

boolean

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

populatePolylines

boolean

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

populateTransitionPolylines

boolean

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

allowLargeDeadlineDespiteInterruptionRisk

boolean

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

useGeodesicDistances

boolean

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

label

string

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

geodesicMetersPerSecond

number

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

maxValidationErrors

integer

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

เนื้อหาการตอบกลับ

หากทำสำเร็จ เนื้อหาการตอบกลับจะมีอินสแตนซ์ Operation

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

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

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

สิทธิ์ IAM

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

  • routeoptimization.operations.create

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