Algoritma Dijsktra diterapkan untuk masalah salesman keliling

13

Saya seorang pemula (total pemula untuk teori kompleksitas komputasi) dan saya punya pertanyaan.

Katakanlah kita memiliki 'Traveling Salesman Problem', akankah aplikasi Algoritma Dijkstra berikut ini menyelesaikannya?

Dari titik awal kami menghitung jarak terpendek antara dua titik. Kami langsung ke intinya. Kami menghapus titik sumber. Kemudian kita menghitung titik jarak terpendek berikutnya dari titik saat ini dan seterusnya ...

Setiap langkah kita membuat grafik lebih kecil sementara kita memindahkan titik jarak terpendek berikutnya yang tersedia. Sampai kami mengunjungi semua poin.

Apakah ini akan menyelesaikan masalah penjual keliling.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
3
Perhatikan bahwa TSP adalah NP-complete dan algoritma Dijkstra memiliki runtime polinomial. Apa yang Anda usulkan akan menjadi solusi P = NP selanjutnya? pertanyaan, jadi tidak mungkin pendekatan Anda berhasil. Alasan semacam ini hanya heuristik, pikiran!
Raphael

Jawaban:

24

Algoritma Dijkstra mengembalikan pohon jalur terpendek, yang berisi jalur terpendek dari titik awal ke titik lainnya, tetapi tidak harus jalur terpendek antara titik lainnya, atau rute terpendek yang mengunjungi semua titik.

Berikut ini contoh contoh di mana algoritma serakah yang Anda uraikan tidak akan berfungsi:

contoh tandingan

Mulai dari , algoritma serakah akan memilih rute , tetapi rute terpendek dimulai dan berakhir pada adalah . Karena rute TSP tidak diperbolehkan untuk mengulang simpul, setelah algoritma serakah memilih , ia terpaksa mengambil ujung terpanjang untuk kembali ke kota awal.a[a,b,c,d,a]a[a,b,d,c,a]a,b,c,dd,a

Joe
sumber
8

Seperti yang ternyata di balasan lain, saran Anda tidak secara efektif menyelesaikan Masalah Traveling Salesman, izinkan saya menunjukkan cara terbaik yang dikenal di bidang pencarian heuristik (karena saya melihat algoritma Dijkstra agak terkait dengan bidang Kecerdasan Buatan) .

Algoritma heuristik dapat mengembalikan solusi optimal (meskipun ukuran yang dapat dikelola relatif kecil sebagai fakta) dan metode berikut ini disarankan oleh Richard Korf pada tahun 90-an. Sementara itu bekerja dengan sempurna untuk masalah salesman keliling simetris (di mana biaya edge sama dengan biaya edge yang sama ketika dilintasi pada arah yang berlawanan ), ia dapat dengan mudah disesuaikan dengan alternatif. kasus versi asimetris.(u,v)(v,u)

Pendekatan terbaik (saya sadar) terdiri dari menjalankan algoritma pencarian heuristik Depth-First Branch-and Bound di mana heuristik adalah biaya Minimum Spanning Tree (MST). Karena MST dapat dihitung dalam waktu polinomial dengan algoritma Prim atau algoritma Kruskal , maka dapat diharapkan untuk mengembalikan solusi dalam jumlah waktu yang wajar. Untuk diskusi yang luar biasa dari kedua algoritma ini, saya sangat menyarankan Anda untuk melihat The Algorithm Design Manual

Sebenarnya, izinkan saya menggarisbawahi bahwa karena pendekatan ini disarankan tidak banyak kemajuan yang terlihat di lapangan untuk mendapatkan batas optimal dari masalah ini sehingga saya menganggapnya sebagai pertanyaan panas di bidang pencarian kombinatorial.

Semoga ini membantu,

Carlos Linares López
sumber
2

Saya tidak tahu bagaimana orang di sini tidak memperhatikan bahwa penerapan algoritma Dijkstra akan sepenuhnya tidak diperlukan dalam kasus ini? Anda bisa menerapkan algoritma serakah ini dengan hanya memilih simpul terdekat, yang dikenal apriori. Algoritma Dijkstra digunakan untuk menemukan jalur, tetapi Anda hanya mengambil satu langkah setiap kali. Ini jelas tidak menemukan solusi optimal untuk TSP, tetapi banyak pendekatan yang sangat baik tidak menemukannya. Semua pencari solusi optimal untuk TSP sangat menuntut komputasi.

Luke Schwartzkopff
sumber
1

Jawabannya adalah tidak, itu bukan cara yang baik untuk menyelesaikan masalah TSP. Contoh penghitung yang baik adalah di mana semua titik berada pada satu garis, seperti berikut ini:

--5 ------------------ 3 ----- 1--0 --- 2 ---------- 4

menggunakan algoritma Dijsktra, akan membuat wiraniaga miskin mulai dari titik 0, pertama pergi ke 1 lalu ke 2 lalu ke 3 dll. mana yang tidak optimal.

Semoga itu bisa membantu. Lihat bab pertama dalam buku hebat Steven S. Skiena berjudul "The Algorithm Design" yang menjelaskan contoh ini secara lebih rinci.

Masalah TSP bukanlah menemukan jalan terpendek antara dua titik, tetapi dalam membuat rute antara semua titik yang optimal. Ketika Anda memiliki rute optimal, Anda dapat menggunakan Dijsktra untuk menemukan jalur terpendek antara setiap titik dalam rute.

Kim.Net
sumber
2
Dijkstra adalah algoritma jalur terpendek satu sumber, tetapi itu tidak akan "membuat" wiraniaga mulai dari 0, juga tidak akan mengembalikan rute. Ini hanya mengembalikan pohon jalur terpendek, yang berisi jalur terpendek ke setiap titik dari titik sumber yang diberikan.
Joe
Secara tradisional, masalah TSP [ en.wikipedia.org/wiki/… ] adalah "Diberikan daftar kota dan jarak berpasangannya, tugasnya adalah menemukan rute terpendek yang mengunjungi setiap kota tepat sekali dan kembali ke kota asal. " Secara teknis tidak mungkin untuk memenuhi persyaratan tersebut di jalur - Anda tidak boleh kembali ke kota awal, atau mengulang kota.
Joe
Namun, di jalan, jika kita mengendurkan salah satu dari kendala itu, maka masalahnya sepele.
Joe
Tentu saja, Dijkstra tidak akan membuat wiraniaga mulai dari 0. Tetapi algoritma yang diajukan dalam pertanyaan awal tidak menentukan titik awal; oleh karena itu, algoritma yang diusulkan dapat memaksa wiraniaga miskin untuk mulai dari 0. Jadi jawaban ini benar.
JeffE