Method: projects.optimizeToursLongRunning

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

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

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

คำขอ 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)

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

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

ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย s เช่น "3.5s"

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)

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

ในเดือน 11/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

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

populateTransitionPolylines

boolean

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

allowLargeDeadlineDespiteInterruptionRisk

boolean

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

useGeodesicDistances

boolean

หากเป็นจริง ระบบจะคำนวณระยะทางในการเดินทางโดยใช้ระยะทางตามเส้นโค้งโลกแทนระยะทางของ Google Maps และคำนวณเวลาในการเดินทางโดยใช้ระยะทางตามเส้นโค้งโลกที่มีความเร็วที่กำหนดโดย 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