Hei ada! Sebagai pembekal TSP (tripolyphosphate), saya sering bertanya tentang cara melaksanakan algoritma TSP di Python. Ini topik yang cukup keren, dan saya tersentuh untuk berkongsi pengetahuan saya dengan anda.
Apa itu TSP?
Mula -mula, mari kita cepat tutup apa masalah jurujual perjalanan (TSP). Bayangkan anda seorang jurujual yang perlu melawat sekumpulan bandar. Anda ingin mencari laluan terpendek yang melawat setiap bandar dengan tepat sekali dan kemudian kembali ke bandar permulaan. Ia mungkin terdengar mudah, tetapi apabila bilangan bandar tumbuh, mencari penyelesaian yang optimum menjadi kepala yang sebenar. Di situlah algoritma TSP masuk.
Mengapa Python?
Python adalah bahasa yang hebat untuk melaksanakan algoritma TSP. Ia sangat mudah untuk dipelajari, mempunyai satu tan perpustakaan yang tersedia, dan boleh mengendalikan perhitungan kompleks tanpa terlalu banyak kerumitan. Sama ada anda seorang pemula atau pengkod yang berpengalaman, Python menjadikannya agak mudah untuk mendapatkan tangan anda kotor dengan algoritma TSP.
Melaksanakan pendekatan naif
Cara paling mudah untuk menyelesaikan TSP adalah pendekatan naif. Dalam kaedah ini, kami menjana semua permutasi yang mungkin di bandar -bandar dan mengira jarak keseluruhan bagi setiap permutasi. Kemudian kami hanya memilih satu dengan jarak terpendek.
Berikut adalah coretan kod python yang mudah untuk menggambarkan pendekatan naif:
Import Impor Jarak Def Def (City1, City2): # Di sini anda akan mengira jarak sebenar antara dua bandar # untuk kesederhanaan, mari kita anggap kita mempunyai jarak jauh Euclidean yang mudah ((City1 [0] - City2 [0]) ** 2+ (City1 [1] - City2 [1]) ** 2) Senarai (iTerTools.Permutations (bandar)) min_distance = float ('inf') terbaik_route = tiada untuk laluan di all_permutations: total_distance = 0 untuk i dalam julat (len (route) - 1): total_distance += jarak (laluan [i] total_distance <min_distance: min_distance = total_distance best_route = return return min_distance, best_route # Contoh penggunaan bandar = [(0, 0), (1, 5), (2, 3) {Best_Route} ")
Masalah dengan pendekatan naif adalah bahawa ia mempunyai kerumitan masa O (n!), Di mana n adalah bilangan bandar. Ini bermakna bahawa apabila bilangan bandar meningkat, algoritma menjadi sangat perlahan.


Menggunakan algoritma jiran terdekat
Algoritma jiran terdekat adalah algoritma tamak yang menyediakan penyelesaian yang cepat tetapi tidak selalu optimum. Ia bermula di sebuah bandar rawak dan kemudian berulang kali melawat bandar yang tidak diendahkan sehingga semua bandar telah dikunjungi. Akhirnya, ia kembali ke bandar permulaan.
def tsp_nearest_neighbor (bandar -bandar): current_city = bandar [0] unvisited = set (bandar [1:]) route = [current_city] while unvisited: terdekat_city = min (unvisited, kunci = lambda city: jarak (current_city) route route.append (bandar -bandar [0]) # kembali ke bandar permulaan total_distance = 0 untuk i dalam julat (len (route) - 1): total_distance += jarak (route [i], route [i +1]) kembali total_distance, laluan # Contoh penggunaan bandar = [0, 0) TSP_NEAREST_NEIGHBOR (bandar) cetak (f "Jarak minimum adalah {min_dist} dan laluan terbaik adalah {best_route}")
Algoritma jiran terdekat mempunyai kerumitan masa O (n^2), yang jauh lebih baik daripada pendekatan naif untuk bilangan bandar yang lebih besar. Walau bagaimanapun, ia tidak selalu memberikan penyelesaian yang optimum.
Pendekatan Pengaturcaraan Dinamik
Pengaturcaraan dinamik boleh digunakan untuk menyelesaikan TSP dengan lebih cekap untuk saiz masalah yang lebih kecil. Idea asas adalah untuk memecahkan masalah ke dalam sub -masalah yang lebih kecil dan menyimpan penyelesaian kepada sub -masalah ini untuk mengelakkan pengiraan berlebihan.
dari funcools import lru_cache @lru_cache (maxsize = none) def tsp_dp (topeng, pos, dist_matrix): num_cities = len (dist_matrix) jika topeng == (1 << num_cities) - 1: kembali dist_matrix [0] (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) bandar] untuk bandar1 di bandar] min_dist = tsp_dp (1, 0, tuple (peta (tuple, dist_matrix))) cetak (f "jarak minimum adalah {min_dist}")
Pendekatan pengaturcaraan dinamik mempunyai kerumitan masa O (n^2 * 2^n), yang lebih baik daripada pendekatan naif tetapi masih tidak sesuai untuk jumlah bandar yang sangat besar.
Produk TSP kami
Sebagai pembekal TSP, kami menawarkan pelbagai produk berkualiti tinggi. Contohnya, kita adaNatrium tripolyphosphate 95% gred makanan STPP sebagai ejen pengekalan air. Produk ini digunakan secara meluas dalam industri makanan sebagai ejen pengekalan air, membantu menjaga makanan segar dan lembap.
Kami juga adaMonopotassium Fosfat Bahan Makanan MKP Mono Potassium Phosphate. Ia adalah bahan makanan penting yang boleh digunakan dalam pelbagai aplikasi makanan.
Dan kamiDSP NA2HPO4 Gred Disodium Fosfat (DSP)adalah penjual atas, yang terkenal dengan kualiti dan keberkesanannya yang tinggi dalam pemprosesan makanan.
Membungkus
Melaksanakan algoritma TSP di Python boleh menjadi pengalaman yang menyeronokkan dan bermanfaat. Sama ada anda menggunakan pendekatan naif, algoritma jiran terdekat, atau pengaturcaraan dinamik, setiap kaedah mempunyai kebaikan dan keburukannya sendiri. Oleh kerana bilangan bandar meningkat, anda perlu memilih algoritma yang paling sesuai dengan keperluan anda dari segi kerumitan masa dan optimum penyelesaian.
Jika anda berminat dengan produk TSP kami atau mempunyai sebarang soalan mengenai algoritma TSP, jangan ragu untuk menjangkau. Kami sentiasa gembira dapat membantu dengan keperluan TSP anda dan membincangkan peluang perniagaan yang berpotensi.
Rujukan
- Cormen, Th, Leison, CE, Rivest, RL, & Stein, C. (2009). Pengenalan kepada Algoritma. Dengan tekan.
- Skiena, SS (2020). Manual Reka Bentuk Algoritma. Springer.
