ตัวเลือกการกําหนดเส้นทาง

ส่วนนี้จะอธิบายตัวเลือกบางรายการในการแก้ปัญหาการกำหนดเส้นทาง

ขีดจำกัดการค้นหา

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

ตารางต่อไปนี้อธิบายขีดจำกัดการค้นหาที่พบบ่อยที่สุด

ชื่อ ประเภท ค่าเริ่มต้น คำอธิบาย
solution_limit int64 kint64max จำกัดจำนวนโซลูชัน ในระหว่างการค้นหา
time_limit.seconds int64 kint64max จำกัดเวลาที่ใช้ หน่วยเป็นวินาที : ในการค้นหา
lns_time_limit.seconds int64 100 จำกัดเวลาเป็นวินาทีสำหรับ : การค้นหาที่สมบูรณ์สำหรับเพื่อนบ้านการค้นหาในท้องถิ่นแต่ละราย

กลยุทธ์โซลูชันแรก

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

ตัวเลือก คำอธิบาย
AUTOMATIC ให้เครื่องมือแก้โจทย์ทราบว่าจะใช้กลยุทธ์ใดตาม โมเดลที่กำลังแก้อยู่
PATH_CHEAPEST_ARC เริ่มต้นจากเส้นทาง "เริ่มต้น" ให้เชื่อมต่อโหนดกับ โหนดที่สร้างส่วนของเส้นทางที่ถูกที่สุด แล้วต่อขยายเส้นทางโดย การทำซ้ำในโหนดสุดท้ายที่เพิ่มลงในเส้นทาง
PATH_MOST_CONSTRAINED_ARC คล้ายกับ PATH_CHEAPEST_ARC แต่เส้นโค้งจะ ประเมินด้วยตัวเลือกที่อิงตามการเปรียบเทียบ ซึ่งจะสนับสนุน ที่โค้งมนก่อน ในการกำหนดตัวเลือกให้กับโมเดลการกำหนดเส้นทาง ให้ใช้ ArcIsMoreConstrainedThanArc()
EVALUATOR_STRATEGY คล้ายกับ PATH_CHEAPEST_ARC ยกเว้นต้นทุนของเส้นโค้ง ได้รับการประเมินโดยใช้ฟังก์ชันที่ส่งไปยัง SetFirstSolutionEvaluator()
SAVINGS อัลกอริทึมการออมเงิน (Clarke &Wright) การอ้างอิง Clarke, G. & ไรต์, J.W. "การกำหนดยานพาหนะจาก Central Depot ไปยังจุดนำส่งจำนวนหนึ่ง" , การวิจัยเชิงปฏิบัติการ, ฉบับ 12, 1964, หน้า 568-581
SWEEP อัลกอริทึมการกวาด (Wren และ Holliday) อ้างอิง Anthony Wren และ การจัดตารางยานพาหนะโดย Alan Holliday คอมพิวเตอร์ จาก Depot อย่างน้อย 1 แห่งไปยังจุดนำส่งที่ใช้งานได้ Research รายไตรมาส (1970-1977), ฉบับ 23, ฉบับที่ 3 (ก. ย., 1972) หน้า 333-344
CHRISTOFIDES อัลกอริทึม Christofides (ซึ่งเป็นตัวแปรของ อัลกอริทึม Christofides ใช้การจับคู่สูงสุดแทนการใช้การจับคู่สูงสุด ซึ่งไม่ได้รับประกันถึงปัจจัย 3/2 ของการประมาณค่า เมตริกการท่องเที่ยวของพนักงานขาย) ใช้ได้กับการกำหนดเส้นทางยานพาหนะทั่วไปโดย ขยายเส้นทางจนกว่าจะไม่สามารถแทรกโหนดได้ อ้างอิงจาก Nicos Christofides, การวิเคราะห์แบบ Worst-case of a new heuristic for ปัญหาพนักงานขายขณะเดินทาง, รายงาน 388, บัณฑิตวิทยาลัยอุตสาหกรรม บริหาร, CMU, 1976
ALL_UNPERFORMED ทำให้โหนดทั้งหมดไม่ทำงาน ค้นหาวิธีแก้ปัญหาในกรณีที่โหนดเท่านั้น ไม่บังคับ (เป็นองค์ประกอบของข้อจำกัดการแยกที่มีค่าโทษแน่นอน)
BEST_INSERTION สร้างโซลูชันซ้ำโดยการแทรกโซลูชันต้นทุนต่ำที่สุด โหนดที่ตำแหน่งที่ถูกที่สุด ต้นทุนของการแทรก ขึ้นอยู่กับ ฟังก์ชันต้นทุนของโมเดลการกำหนดเส้นทาง เริ่มตั้งแต่วันที่ 2/2012 ใช้ได้กับโมเดลที่มี โหนดที่ไม่บังคับ (พร้อมค่าปรับตามขีดจำกัด)
PARALLEL_CHEAPEST_INSERTION สร้างโซลูชันซ้ำๆ โดยการแทรกฟิลด์ โหนดที่ถูกที่สุดในตำแหน่งที่ถูกที่สุด ต้นทุนของการแทรก ขึ้นอยู่กับ ฟังก์ชันต้นทุนโค้ง เร็วกว่า BEST_INSERTION
LOCAL_CHEAPEST_INSERTION สร้างโซลูชันซ้ำโดยแทรกแต่ละโซลูชัน โหนดที่ตำแหน่งที่ถูกที่สุด ค่าใช้จ่ายในการแทรกจะขึ้นอยู่กับกราฟ ฟังก์ชันต้นทุน แตกต่างจาก PARALLEL_CHEAPEST_INSERTION ตามโหนด สำหรับการแทรก ที่นี่จะได้รับการพิจารณาตามลำดับ งานสร้างสรรค์ เร็วกว่า PARALLEL_CHEAPEST_INSERTION
GLOBAL_CHEAPEST_ARC เชื่อมต่อ 2 โหนดที่เหมือนกันซึ่งสร้างฟิลด์ ส่วนของเส้นทางที่ถูกที่สุด
LOCAL_CHEAPEST_ARC เลือกโหนดแรกที่มีตัวสืบทอดที่ไม่มีการเชื่อมโยง เชื่อมต่อกับโหนดซึ่งสร้างส่วนของเส้นทางที่ถูกที่สุด
FIRST_UNBOUND_MIN_VALUE เลือกโหนดแรกที่มีตัวสืบทอดที่ไม่มีการเชื่อมโยง และเชื่อมต่อกับโหนดแรกที่ใช้ได้ ซึ่งเทียบเท่ากับ รวมกลยุทธ์ CHOOSE_FIRST_UNBOUND กับ ASSIGN_MIN_VALUE (เช่น Controls_solver.h)

สถานะการค้นหา

คุณแสดงสถานะการค้นหาได้โดยใช้เมธอด status ของโมเดลการกำหนดเส้นทาง นี่คือโค้ด Python สำหรับพิมพ์สถานะการค้นหา

print("Solver status: ", solver.status())

วิธีนี้จะพิมพ์จำนวนเต็มที่มีความหมายต่อไปนี้

ค่า คำอธิบาย
0 ROUTING_NOT_SOLVED: ปัญหายังไม่ได้รับการแก้ไข
1 ROUTING_SUCCESS: แก้ไขปัญหาเรียบร้อยแล้ว
2 ROUTING_PARTIAL_SUCCESS_LOCAL_OPTIMUM_NOT_REACHED: แก้ปัญหาแล้ว สำเร็จแล้วหลังจากเรียก RoutingModel.Solve() ยกเว้นในกรณีที่ ยังไม่ถึง Optimum การสละเวลาให้มากขึ้นจะช่วยให้ โซลูชัน
3 ROUTING_FAIL: ไม่พบวิธีแก้ปัญหา
4 ROUTING_FAIL_TIMEOUT: หมดเวลาก่อนที่จะค้นหาวิธีแก้ปัญหา
5 ROUTING_INVALID: โมเดล พารามิเตอร์โมเดล หรือแฟล็กไม่ถูกต้อง
6 ROUTING_INFEASIBLE: พิสูจน์แล้วว่าโจทย์นี้เป็นไปได้

ตัวเลือกการค้นหาในท้องถิ่น

ตารางต่อไปนี้แสดงตัวเลือกสำหรับกลยุทธ์การค้นหาในท้องถิ่น (หรือที่เรียกว่า metaheuristics) ดูการเปลี่ยนกลยุทธ์การค้นหา เพื่อดูตัวอย่างการตั้งค่าตัวเลือกเหล่านี้

ตัวเลือก คำอธิบาย
AUTOMATIC ให้เครื่องมือแก้โจทย์เลือกเมตาฮิวริสติก
GREEDY_DESCENT ยอมรับการค้นหาเพื่อนบ้านในท้องถิ่นที่ปรับปรุง (ลดต้นทุน) จนถึงท้องถิ่น ถึงจำนวนขั้นต่ำแล้ว
GUIDED_LOCAL_SEARCH ใช้การค้นหาในเครื่องแบบมีคำแนะนำเพื่อหลีกหนีค่าต่ำสุดของในเครื่อง (เช่น การค้นหาในท้องถิ่นที่แนะนำ) ระบบนี้มักจะเป็นกลไกควบคุมการทรงตัวที่มีประสิทธิภาพมากที่สุดสำหรับการกำหนดเส้นทางของยานพาหนะ
SIMULATED_ANNEALING ใช้การหลอมเหลวจำลองเพื่อหลีกหนีจากความละเอียดต่ำสุดในเครื่อง (cf. การจำลองการอบเหนียว)
TABU_SEARCH ใช้การค้นหา Tabu เพื่อหลีกหนีค่าขั้นต่ำในเครื่อง (cf. Tabu Search)
GENERIC_TABU_SEARCH ใช้การค้นหาแบบ Tabu กับค่าวัตถุประสงค์ของโซลูชันเพื่อให้สอดคล้องกับท้องถิ่น ขนาดเล็กสุด

การควบคุมการเผยแพร่

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