ส่วนนี้จะอธิบายตัวเลือกบางรายการสําหรับเครื่องมือแก้โจทย์การกําหนดเส้นทาง
ขีดจํากัดการค้นหา
ขีดจํากัดการค้นหาจะทําให้เครื่องมือแก้โจทย์สิ้นสุดลงเมื่อถึงขีดจํากัดที่กําหนดไว้แล้ว เช่น ระยะเวลาสูงสุด หรือจํานวนโซลูชันที่พบ คุณสามารถกําหนดขีดจํากัดการค้นหา ผ่านพารามิเตอร์การค้นหาของเครื่องมือแก้โจทย์คณิตได้ โปรดดูขีดจํากัดเวลาเพื่อดูตัวอย่าง
ตารางต่อไปนี้จะอธิบายขีดจํากัดการค้นหาที่พบบ่อยที่สุด
ชื่อ | ประเภท | ค่าเริ่มต้น | คำอธิบาย |
---|---|---|---|
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. และ Wright, J.W. "การตั้งเวลายานพาหนะจากสถานีรถไฟกลางไปยังจุดนําส่งจํานวนหนึ่ง", ฝ่ายวิจัย, ฉบับที่ 12, 1964, หน้า 568-581 |
SWEEP
|
อัลกอริทึมการกวาด (Wren และ Holliday) อ้างอิงการกําหนดเวลาคอมพิวเตอร์ของ Anthony Wren และ Alan Holliday จาก Depot อย่างน้อย 1 แห่งไปยังจุดปฏิบัติการจํานวนหนึ่ง การวิจัย (1970-1977), ฉบับที่ 23, เลขที่ 3 (ก.ย., 1972), หน้า 333-344 |
CHRISTOFIDES
|
อัลกอริทึม Christofides (อันที่จริงอัลกอริทึมแบบต่างๆ ของ Christofides ใช้การจับคู่สูงสุดแทนการจับคู่สูงสุด ซึ่งไม่ได้รับประกันสัดส่วนประมาณ 3/2 ของพนักงานขายที่เดินทางแบบเมตริก) ทํางานได้บนโมเดลการกําหนดเส้นทางทั่วไปของรถ โดยขยายเส้นทางจนไม่สามารถแทรกโหนดได้ อ้างอิง Nicos Christofides การวิเคราะห์กรณีแย่ที่สุดของวิทยาการศึกษาปัญหาใหม่ของพนักงานขายที่ 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 (cf.constraint_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() เว้นแต่ว่าจะมีการเพิ่มประสิทธิภาพเครื่องในท้องที่ไม่สําเร็จ การเว้นเวลาเพิ่มเติมจะช่วยให้ปรับปรุงโซลูชันได้ |
3 |
ROUTING_FAIL : ไม่พบวิธีแก้ปัญหา |
4 |
ROUTING_FAIL_TIMEOUT : ครบเวลาที่จํากัดแล้วก่อนที่จะหาทางแก้ไข |
5 |
ROUTING_INVALID : โมเดล พารามิเตอร์โมเดล หรือแฟล็กไม่ถูกต้อง |
6 |
ROUTING_INFEASIBLE : ปัญหาที่พิสูจน์แล้วว่าไม่สามารถดําเนินการได้ |
ตัวเลือกการค้นหาในท้องถิ่น
ตารางต่อไปนี้แสดงตัวเลือกสําหรับกลยุทธ์การค้นหาในท้องถิ่น (หรือที่เรียกว่าเมตาริสติก) ดูการเปลี่ยนกลยุทธ์การค้นหา สําหรับตัวอย่างการตั้งค่าตัวเลือกเหล่านี้
ตัวเลือก | คำอธิบาย |
---|---|
AUTOMATIC |
เป็นการแก้โจทย์ปัญหา |
GREEDY_DESCENT |
ยอมรับเพื่อนบ้านในเครือข่ายการค้นหาในพื้นที่ที่มีการปรับปรุง (ลดค่าใช้จ่าย) จนกว่าจะถึงเกณฑ์ขั้นต่ําในเครื่อง |
GUIDED_LOCAL_SEARCH |
ใช้การค้นหาในท้องถิ่นที่มีคําแนะนําเพื่อหลีกหนีในเครื่อง (cf. Local Search Search) โดยทั่วไปเป็นการแพร่หลายที่มีประสิทธิภาพที่สุดสําหรับการกําหนดเส้นทางยานพาหนะ |
SIMULATED_ANNEALING |
ใช้การจําลองการหลบหนีเพื่อหลบหนีในพื้นที่ขนาดเล็ก (cf. Simulated Annealing) |
TABU_SEARCH |
ใช้การค้นหา Tabu เพื่อหลีกในเครื่องขั้นต่ํา (cf. Tabu Search) |
GENERIC_TABU_SEARCH |
ใช้การค้นหาในแท็บ "ค่า" ของวัตถุประสงค์ของโซลูชันเพื่อหลบหนีในเครื่องขั้นต่ํา |
การควบคุมการเผยแพร่
ชื่อ | ประเภท | ค่าเริ่มต้น | คำอธิบาย |
---|---|---|---|
use_full_propagation
|
บูลีน | จริง | ใช้ข้อจํากัดในการเผยแพร่เต็มรูปแบบใน รูปแบบการกําหนดเส้นทาง (แทนการเผยแพร่แบบเบาเท่านั้น) การขยายแบบเต็มรูปแบบจําเป็นเมื่อใช้การค้นหาแบบเจาะลึกเท่านั้นหรือสําหรับโมเดลที่จําเป็นต้องเผยแพร่ข้อมูลจํานวนมากเพื่อให้ค่าของตัวแปรรองสมบูรณ์ ในกรณีส่วนใหญ่ การเปลี่ยนการตั้งค่าเป็น true จะทําให้การค้นหาช้าลง ในกรณีส่วนใหญ่ และเพิ่มการใช้หน่วยความจําในทุกกรณี |