이봐! TSP (Tripolyphosphate) 공급 업체로서, 나는 종종 파이썬에서 TSP 알고리즘을 구현하는 방법에 대한 질문을받습니다. 그것은 꽤 멋진 주제이며, 나는 당신과 내 지식을 공유 할 수 있습니다.
TSP는 무엇입니까?
먼저, 여행 세일즈맨 문제 (TSP)가 무엇인지 빠르게 다루겠습니다. 당신이 많은 도시를 방문 해야하는 세일즈맨이라고 상상해보십시오. 각 도시를 정확히 한 번 방문하는 가장 짧은 경로를 찾은 다음 출발 도시로 돌아갑니다. 간단하게 들릴지 모르지만 도시의 수가 증가함에 따라 최적의 솔루션을 찾는 것은 실제 머리 - 스크래퍼가됩니다. 그것이 TSP 알고리즘이 들어오는 곳입니다.
왜 파이썬?
Python은 TSP 알고리즘을 구현하기위한 멋진 언어입니다. 배우기 쉽고 다양한 라이브러리를 사용할 수 있으며 너무 많은 번거 로움없이 복잡한 계산을 처리 할 수 있습니다. 초보자이든 숙련 된 코더이든, Python은 TSP 알고리즘으로 손을 더럽히는 것이 비교적 간단하게 만듭니다.
순진한 접근법을 구현합니다
TSP를 해결하는 가장 간단한 방법은 순진한 접근법입니다. 이 방법에서는 도시의 가능한 모든 순열을 생성하고 각 순열의 총 거리를 계산합니다. 그런 다음 우리는 가장 짧은 거리를 가진 것을 선택합니다.
순진한 접근법을 설명하기위한 간단한 파이썬 코드 스 니펫이 있습니다.
Import IterTools def 거리 (City1, City2) : # 여기에서 두 도시 사이의 실제 거리를 단순화하기 위해 실제 거리를 계산합니다. 간단한 유클리드 거리 반환 ((City1 [0] -City2 [0]) ** 2+ (City1 [1] -City2 [1]) ** 2) ** 0.5 def tsp_naive (ities) : All_permutation = = All_permutation = list (itertools.permutations (도시)) min_distance = float ( 'inf') best_route = all_permutations의 경로에 대한 없음 : 범위 (len (route) -1) : total_distance += 거리 (Route [i], route [i +1]) total_distance (경로 [0]) <min_distance : min_distance = Total_distance Best_route = Route Return Min_distance, Best_route # 예제 사용 도시 = [(0, 0), (1, 5), (2, 3)] min_dist, best_route = tsp_naive (Cities) print (f "min_dist} 및 최고의 경로는 {min_dist})))).
순진한 접근법의 문제점은 O (n!)의 시간 복잡성이 있는데, 여기서 N은 도시 수입니다. 이는 도시의 수가 증가함에 따라 알고리즘이 매우 느려집니다.


가장 가까운 이웃 알고리즘 사용
가장 가까운 이웃 알고리즘은 빠르고 항상 최적의 솔루션을 제공하지 않는 탐욕스러운 알고리즘입니다. 임의의 도시에서 시작하여 모든 도시가 방문 될 때까지 가장 가까운 방문하지 않은 도시를 반복적으로 방문합니다. 마지막으로, 그것은 시작 도시로 돌아갑니다.
def tsp_nearest_neighbor (도시) : current_city = cities [0] unvisited = set (도시 [1 :]) 경로 = [Current_City]는 방문하지 않은 상태 : 가장 가까운 _city = min (unvisited, key = lambda city : disting (current_city, city)). Route.Append (Cities [0]) # 시작 도시로 돌아 가기 범위 (Len (route) -1) : total_distance += 거리 (Route [i], Route [i +1]) Return total_distance, Route # 예제 사용 예를 사용합니다. print (f "최소 거리는 {min_dist}이고 가장 좋은 경로는 {best_route}")입니다.
가장 가까운 이웃 알고리즘은 O (n^2)의 시간 복잡성을 가지고 있으며, 이는 더 많은 수의 도시에 대한 순진한 접근법보다 훨씬 낫습니다. 그러나 항상 최적의 솔루션을 제공하는 것은 아닙니다.
동적 프로그래밍 접근법
동적 프로그래밍을 사용하여 더 작은 문제 크기에 대해 TSP를보다 효율적으로 해결할 수 있습니다. 기본 아이디어는 문제를 더 작은 하위 문제로 나누고 중복 계산을 피하기 위해 이러한 하위 문제에 솔루션을 저장하는 것입니다.
funcTools에서 lru_cache @lru_cache (maxsize = none) def tsp_dp (mask, pos, dist_matrix) : num_cities = len (dist_matrix) if mask == (1 << num_cities) -1 : refly dist_matrix [pos] [ 'inf') : num_cities (1 inf ') : if (if) (if). next_city)) == 0 : new_mask = 마스크 | (1 << next_city) new_cost = dist_matrix [pos] [next_city]+tsp_dp (next_mask, next_city, dist_matrix) ans = min (ans, new_cost) return ans # 예제 사용 cities = [(0, 0), (1, 5), (2, 3)] dist_matrix = [City2) 도시의 City1] min_dist = tsp_dp (1, 0, tuple (map (tuple, dist_matrix))) print (f "최소 거리는 {min_dist}")
동적 프로그래밍 방식은 O (n^2 * 2^n)의 시간 복잡성을 가지고 있으며, 이는 순진한 접근법보다 낫지 만 여전히 많은 수의 도시에는 적합하지 않습니다.
우리의 TSP 제품
TSP 공급 업체는 다양한 고품질 제품을 제공합니다. 예를 들어, 우리는 가지고 있습니다물 보유 제로 나트륨 트리 폴리 포스페이트 95% STPP 식품 등급. 이 제품은 식품 산업에서 물 보유 제로 널리 사용되며 음식을 신선하고 촉촉하게 유지하는 데 도움이됩니다.
우리도 가지고 있습니다모노 추스 파산 식품 성분 MKP 모노 칼륨 포스페이트. 다양한 식품 응용 분야에서 사용할 수있는 중요한 식품 성분입니다.
그리고 우리베스트셀러 인산 인산염 (DSP) 식품 등급 NA2HPO4 DSP식품 가공의 고품질과 효과로 유명한 최고 판매자입니다.
마무리
파이썬에서 TSP 알고리즘을 구현하는 것은 재미 있고 보람있는 경험이 될 수 있습니다. 순진한 접근 방식, 가장 가까운 이웃 알고리즘 또는 동적 프로그래밍을 사용하든 각 방법에는 고유 한 장단점이 있습니다. 도시의 수가 증가함에 따라 시간 복잡성과 솔루션 최적 성 측면에서 귀하의 요구에 가장 적합한 알고리즘을 선택해야합니다.
TSP 제품에 관심이 있거나 TSP 알고리즘에 대해 궁금한 점이 있으면 언제든지 문의하십시오. 우리는 항상 당신의 TSP 관련 요구를 도와주고 잠재적 인 비즈니스 기회에 대해 논의하게되어 기쁩니다.
참조
- Cormen, Th, Leison, CE, Rivest, RL, & Stein, C. (2009). 알고리즘 소개. 프레스와 함께.
- Skiena, SS (2020). 알고리즘 디자인 매뉴얼. 뛰는 것.
