Selam! Bir TSP (Tripolifosfat) tedarikçisi olarak, genellikle Python'da TSP algoritmalarının nasıl uygulanacağı sorulur. Bu oldukça güzel bir konu ve bilgimi sizinle paylaşmak için stoklandım.
TSP nedir?
Öncelikle, seyahat eden satıcı probleminin (TSP) ne olduğunu hızlı bir şekilde ele alalım. Bir grup şehri ziyaret etmesi gereken bir satıcı olduğunuzu hayal edin. Her şehri tam olarak bir kez ziyaret eden ve daha sonra başlangıç şehrine geri dönen mümkün olan en kısa rotayı bulmak istiyorsunuz. Kulağa basit gelebilir, ancak şehir sayısı büyüdükçe, optimal çözümü bulmak gerçek bir kafa çizicisi haline gelir. TSP algoritmaları devreye giriyor.
Neden Python?
Python, TSP algoritmalarını uygulamak için harika bir dildir. Öğrenmesi çok kolaydır, bir ton kütüphaneye sahiptir ve çok fazla güçlük çekmeden karmaşık hesaplamalar yapabilir. İster yeni başlayan ya da deneyimli bir kodlayıcı olun, Python, TSP algoritmaları ile ellerinizi kirletmeyi nispeten basit hale getirir.
Saf yaklaşımı uygulamak
TSP'yi çözmenin en basit yolu saf yaklaşımdır. Bu yöntemde, şehirlerin tüm olası permütasyonlarını üretiyoruz ve her permütasyon için toplam mesafeyi hesaplıyoruz. Sonra sadece en kısa mesafeye sahip olanı seçiyoruz.
İşte saf yaklaşımı göstermek için basit bir Python kodu snippet:
İçe Aktar Itertools Def Mesafe (City1, City2): # Burada iki şehir arasındaki gerçek mesafeyi hesaplarsınız # sadelik için, basit bir Öklid mesafesi geri dönüşümüze ((City1 [0] - 0]) ** 2+(City1 [1] - City2]) ** 2+(City1] - City2 [1])*2) ** 0.5 def tsp_naive (all_permutions = liste (itertools.Permutations (şehirler)) min_distance = float ('inf') Best_route = All_permutations için hiçbiri: total_distance = 0 aralık (total_distance += mesafe (Len (rota) - 1): rota [rota [ - 1]) (rota [i +1]) total_distans += mesafe [rota [0]) total_distans += rota. total_distance <min_distance: min_distance = total_distance best_route = rota dönüşü Min_Distance, best_route # örnek kullanım şehirleri = [(2, 3)] min_dist, best_route = tsp_naive (citrits) baskı {best_route} ")
Naif yaklaşımla ilgili sorun, o (n!) Zaman karmaşıklığına sahip olmasıdır, burada n şehir sayısıdır. Bu, şehir sayısı arttıkça algoritmanın son derece yavaşlaştığı anlamına gelir.


En yakın komşu algoritmasını kullanarak
En yakın komşu algoritması, hızlı ama her zaman optimal olmayan bir çözüm sağlayan açgözlü bir algoritmadır. Rastgele bir şehirde başlar ve daha sonra tüm şehirler ziyaret edilene kadar en yakın ziyaretsiz şehri ziyaret eder. Sonunda, başlangıç şehrine geri döner.
def tsp_nearest_neighbor (şehirler): current_city = şehirler [0] visudied = set (şehirler [1:]) rota = [current_city] rota = min (en yakın_city: din (current_city (current_city, city) rota (en yakın_city)) Route.Append (şehirler [0]) # başlangıç şehrine geri dönün total_distance = 0 menzil (len (rota) - 1): total_distance += mesafe (rota [i], rota [i +1]) total_distance, rota # örnek kullanım şehirleri = [(0, 0), (1, 5), (2, 3)] min_dist (1, 5), (2, 3)] min_dist (1, 5) yazdırın (f "minimum mesafe {min_dist} ve en iyi rota {best_route}")
En yakın komşu algoritması, daha fazla sayıda şehir için saf yaklaşımdan çok daha iyi olan O (n^2) zaman karmaşıklığına sahiptir. Ancak, her zaman en uygun çözümü vermez.
Dinamik programlama yaklaşımı
Dinamik programlama, TSP'yi daha küçük problem boyutları için daha verimli bir şekilde çözmek için kullanılabilir. Temel fikir, sorunu daha küçük alt sorunlara ayırmak ve gereksiz hesaplamaları önlemek için çözümleri bu alt sorunlara saklamaktır.
Functools ithal lru_cache @lru_cache (maxSize = none) def tsp_dp (maske, pos, dist_matrix): num_cities = len (dist_matrix) - 1: return dist_matrix [pos] [0] ans = float ('inf') aralık ('inf') (Mass_CITITES (1 << next_city)) == 0: new_mask = maske | (1 << Next_City) new_cost = dist_matrix [pos] [next_city]+tsp_dp (next_mask, next_city, dist_matrix) ans = dk (ans, new_cost) dönüş ans # örnek kullanım şehirleri = [(0), (1, 5), (2, 3) için 3) dist_matrix = [5), (2, şehir (şehir (şehir) için)] City1 şehirlerde] Min_dist = tsp_dp (1, 0, tuple (harita (tuple, dist_matrix))) print (f "minimum mesafe {min_dist}")
Dinamik programlama yaklaşımı, saf yaklaşımdan daha iyi ancak yine de çok sayıda şehir için uygun olmayan bir O (n^2 * 2^n) zaman karmaşıklığına sahiptir.
TSP ürünlerimiz
Bir TSP tedarikçisi olarak, bir dizi yüksek kaliteli ürün sunuyoruz. Örneğin,Su tutma maddesi olarak sodyum tripolifosfat% 95 STPP gıda derecesi. Bu ürün, gıda endüstrisinde bir su tutma maddesi olarak yaygın olarak kullanılır ve yiyecekleri taze ve nemli tutmaya yardımcı olur.
Biz de varMonopotasyum fosfat gıda bileşeni mkp mono potasyum fosfat. Çeşitli gıda uygulamalarında kullanılabilen önemli bir gıda bileşenidir.
Ve bizimEn çok satan disodyum fosfat (DSP) gıda sınıfı NA2HPO4 DSPgıda işleme yüksek kalitesi ve etkinliği ile bilinen bir üst satıcıdır.
Sarmak
Python'da TSP algoritmalarının uygulanması eğlenceli ve ödüllendirici bir deneyim olabilir. İster saf yaklaşımı, ister en yakın komşu algoritmasını veya dinamik programlamayı kullanıyor olun, her yöntemin kendi artıları ve eksileri vardır. Şehir sayısı arttıkça, hem zaman karmaşıklığı hem de çözüm optimalliği açısından ihtiyaçlarınıza en uygun algoritmayı seçmeniz gerekir.
TSP ürünlerimizle ilgileniyorsanız veya TSP algoritmaları hakkında herhangi bir sorunuz varsa, ulaşmaktan çekinmeyin. TSP ile ilgili ihtiyaçlarınıza yardımcı olmaktan ve potansiyel iş fırsatlarını tartışmaktan her zaman mutluluk duyarız.
Referanslar
- Coren, Th, Leison, CE, Rivest, RL ve Stein, C. (2009). Algoritmalara giriş. Basın ile.
- Skiena, SS (2020). Algoritma Tasarım Kılavuzu. Springer.
