จะใช้อัลกอริทึม TSP ใน Python ได้อย่างไร?

May 29, 2025ฝากข้อความ

เฮ้ ในฐานะซัพพลายเออร์ TSP (Tripolyphosphate) ฉันมักจะถูกถามเกี่ยวกับวิธีการใช้อัลกอริทึม TSP ใน Python มันเป็นหัวข้อที่ยอดเยี่ยมมากและฉันก็อยากแบ่งปันความรู้ของฉันกับคุณ

TSP คืออะไร?

ก่อนอื่นเรามาครอบคลุมสิ่งที่ปัญหาพนักงานขายการเดินทาง (TSP) อย่างรวดเร็ว ลองนึกภาพว่าคุณเป็นพนักงานขายที่ต้องการเยี่ยมชมเมืองมากมาย คุณต้องการค้นหาเส้นทางที่สั้นที่สุดที่เป็นไปได้ที่เยี่ยมชมแต่ละเมืองอย่างแน่นอนแล้วกลับไปที่เมืองเริ่มต้น มันอาจฟังดูง่าย แต่เมื่อจำนวนเมืองเพิ่มขึ้นการค้นหาทางออกที่ดีที่สุดจะกลายเป็นหัวจริง - ขูด นั่นคือสิ่งที่อัลกอริทึม TSP เข้ามา

ทำไม Python?

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

การใช้วิธีการที่ไร้เดียงสา

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

นี่คือตัวอย่างรหัส Python ที่เรียบง่ายเพื่อแสดงให้เห็นถึงวิธีการที่ไร้เดียงสา:

นำเข้าระยะทาง def itertools (City1, City2): # ที่นี่คุณจะคำนวณระยะห่างที่แท้จริงระหว่างสองเมือง # เพื่อความเรียบง่ายสมมติว่าเรามีระยะทางแบบยุคลิดแบบเรียบง่าย ((City1 [0] - City2 [0]) ** 2+ (City1 [1] - City2 [1]) ** 2) ** รายการ (itertools.permutations (เมือง)) min_distance = float ('inf') best_route = ไม่มีสำหรับเส้นทางใน all_permutations: total_distance = 0 สำหรับ i ในช่วง (len (เส้นทาง) - 1): total_distance += ระยะทาง Total_distance <min_distance: min_distance = total_distance best_route = เส้นทางกลับ min_distance, best_route # ตัวอย่างการใช้งานเมือง = [(0, 0), (1, 5), (2, 3)] min_dist, best_route = tsp_naive {best_route} ")

ปัญหาเกี่ยวกับวิธีการที่ไร้เดียงสาคือมันมีความซับซ้อนของเวลาของ o (n!) โดยที่ n คือจำนวนเมือง ซึ่งหมายความว่าเมื่อจำนวนเมืองเพิ่มขึ้นอัลกอริทึมจะช้ามาก

Disodium-PhosphateSTTP-as-Water-Retention-Agent

ใช้อัลกอริทึมเพื่อนบ้านที่ใกล้ที่สุด

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

def tsp_nearest_neighbor (เมือง): current_city = เมือง [0] unvisited = set (เมือง [1:]) route = [current_city] ในขณะที่ไม่ได้เข้าชม: ใกล้ที่สุด _city = min (Unvisited, Key = Lambda City: ระยะทาง Route.Append (เมือง [0]) # กลับไปที่เมือง Total_distance เริ่มต้น = 0 สำหรับ i ในช่วง (len (เส้นทาง) - 1): total_distance += ระยะทาง (เส้นทาง [i], เส้นทาง [i +1]) return_distance, เส้นทางการใช้งานที่ดีที่สุด (0, 0), (1, 5) พิมพ์ (f "ระยะทางขั้นต่ำคือ {min_dist} และเส้นทางที่ดีที่สุดคือ {best_route}"))

อัลกอริทึมเพื่อนบ้านที่ใกล้ที่สุดมีความซับซ้อนของเวลาของ O (n^2) ซึ่งดีกว่าวิธีที่ไร้เดียงสาสำหรับเมืองจำนวนมาก อย่างไรก็ตามมันไม่ได้ให้ทางออกที่ดีที่สุดเสมอไป

วิธีการเขียนโปรแกรมแบบไดนามิก

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

จาก functools นำเข้า lru_cache @lru_cache (maxsize = none) def tsp_dp (หน้ากาก, pos, dist_matrix): num_cities = len (dist_matrix) ถ้า mask == (1 << num_cities) - 1: กลับ dist_matrix (หน้ากาก & (1 << next_city)) == 0: new_mask = mask | (1 << next_city) new_cost = dist_matrix [pos] [next_city]+tsp_dp (new_mask, next_city, dist_matrix) ans = min (ans, new_cost) ส่งคืน ANS # CITYS = [0, 0), (1, 5) เมือง] สำหรับเมือง 1 ในเมือง] min_dist = tsp_dp (1, 0, tuple (แผนที่ (tuple, dist_matrix))) พิมพ์ (f "ระยะทางต่ำสุดคือ {min_dist}"))

วิธีการเขียนโปรแกรมแบบไดนามิกมีความซับซ้อนของเวลาของ o (n^2 * 2^n) ซึ่งดีกว่าวิธีที่ไร้เดียงสา แต่ก็ยังไม่เหมาะสำหรับเมืองจำนวนมาก

ผลิตภัณฑ์ TSP ของเรา

ในฐานะซัพพลายเออร์ TSP เรานำเสนอผลิตภัณฑ์ที่มีคุณภาพสูง ตัวอย่างเช่นเรามีโซเดียม tripolyphosphate 95% STPP เกรดอาหารเป็นตัวแทนเก็บน้ำ- ผลิตภัณฑ์นี้ใช้กันอย่างแพร่หลายในอุตสาหกรรมอาหารเป็นตัวแทนเก็บน้ำช่วยให้อาหารสดและชื้น

เรายังมีส่วนผสมอาหาร Monopotassium ฟอสเฟต MKP โมโนโพแทสเซียมฟอสเฟต- เป็นส่วนผสมอาหารที่สำคัญที่สามารถใช้ในการใช้งานอาหารต่างๆ

และของเราขายดีที่สุด Disodium Phosphate (DSP) เกรดอาหาร NA2HPO4 DSPเป็นผู้ขายชั้นนำที่รู้จักกันดีในเรื่องคุณภาพและประสิทธิผลในการแปรรูปอาหาร

ห่อหุ้ม

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

หากคุณสนใจผลิตภัณฑ์ TSP ของเราหรือมีคำถามใด ๆ เกี่ยวกับอัลกอริทึม TSP อย่าลังเลที่จะเข้าถึง เรายินดีที่จะช่วยเหลือ TSP ของคุณ - ความต้องการที่เกี่ยวข้องและหารือเกี่ยวกับโอกาสทางธุรกิจที่อาจเกิดขึ้น

การอ้างอิง

  • Cormen, TH, Leison, CE, Rivest, RL, & Stein, C. (2009) ความรู้เบื้องต้นเกี่ยวกับอัลกอริทึม ด้วยการกด
  • Skiena, SS (2020) คู่มือการออกแบบอัลกอริทึม สปริงเกอร์