Dijsktra'nın algoritması gezici satıcı problemine uygulandı


13

Ben bir acemiyim (hesaplama karmaşıklığı teorisine tamamen yeni başlayan) ve bir sorum var.

Diyelim ki 'Gezgin Satıcı Sorunu' var, aşağıdaki Dijkstra Algoritmaları uygulaması bunu çözecek mi?

Bir başlangıç ​​noktasından, iki nokta arasındaki en kısa mesafeyi hesaplıyoruz. Konuya gidiyoruz. Kaynak noktayı siliyoruz. Sonra mevcut noktadan sonraki en kısa mesafe noktasını hesaplıyoruz ...

Her adımda grafiği bir sonraki kullanılabilir en kısa mesafe noktasını hareket ettirirken küçültüriz. Tüm noktaları ziyaret edene kadar.

Bu, seyahat eden satıcı problemini çözecek mi?


3
TSP'nin NP-tam olduğunu ve Dijkstra'nın algoritmasının polinom çalışma süresine sahip olduğunu unutmayın. Teklif ettiğiniz şey, P = NP'nin önemsiz çözümünün yanında mı? Bu nedenle, yaklaşımınızın işe yaraması pek olası değildir. Bu tür bir akıl yürütme sadece sezgisel bir akıl!
Raphael

Yanıtlar:


24

Dijkstra'nın algoritması, bir başlangıç ​​tepe noktasından birbirine tepe noktasına en kısa yolu içeren, ancak diğer köşeler arasındaki en kısa yolları veya tüm köşeleri ziyaret eden en kısa yolu içeren en kısa yol ağacını döndürür.

Açıkladığınız açgözlü algoritmanın çalışmadığı bir sayaç örneği:

Karşı Örnek

İtibaren güzergahı seçecektir Algoritma , ancak en kısa yol başlayan ve sona eren olduğunu . Yana TSP yol tekrar köşe izin verilmez Algoritma seçtiği bir kez, , en uzun kenarı almak zorunda olan başlangıç şehir dönün.[ a , b , c , d , a ] a [ a , b , d , c , a ] a , b , c , d d , aa[a,b,c,d,a]a[a,b,d,c,a]a,b,c,dd,a


8

Diğer cevaplarda zaten ortaya çıktığı için, öneriniz Seyahat eden Satıcı Sorunu'nu etkili bir şekilde çözmüyor, lütfen sezgisel arama alanında bilinen en iyi yolu belirteyim (Dijkstra'nın bu Yapay Zeka alanı ile ilgili bir şekilde algoritmasını gördüğüm için) .

Sezgisel bir algoritma en iyi çözümleri sağlayabilir (yönetebileceği boyutlar aslında nispeten küçük olsa da) ve 90'larda Richard Korf tarafından aşağıdaki yöntem önerildi. Simetrik gezici satıcı problemi için mükemmel bir şekilde çalışsa da (kenar maliyetinin ters yönde geçildiğinde aynı kenarın maliyetine eşit olduğu yerlerde ), alternatife kolayca uyarlanabilir asimetrik versiyon örneği.( v , u )(u,v)(v,u)

En iyi yaklaşım (farkında olduğum), sezginin Minimum Yayılma Ağacının (MST) maliyeti olduğu bir Derinlik-Birinci Dal-Bağlı sezgisel arama algoritması çalıştırmayı içerir . MST biriyle polinom sürede hesaplanabilmesi nedeniyle Prim algoritması veya Kruskal Algoritması , o zaman zaman makul bir miktarda çözümler dönmek için beklenebilir. Bu iki algoritmanın harika bir tartışması için Algoritma Tasarım El Kitabı'na göz atmanızı şiddetle tavsiye ediyorum.

Nitekim, bu yaklaşım önerildiğinden, bu sorunun optimal sınırlarını elde etmek için çok fazla ilerleme kaydedilmediğini vurgulayayım, böylece kombinatorik arama alanında sıcak bir soru olduğunu düşünüyorum.

Bu yardımcı olur umarım,


2

Burada kimse Dijkstra algoritması uygulamasının bu durumda tamamen gereksiz olacağını nasıl bilmiyordum hiçbir fikrim yok? Bu açgözlü algoritmayı apriori olarak bilinen en yakın düğümü seçerek uygulayabilirsiniz. Dijkstra'nın algoritması yolları keşfetmek için kullanılır, ancak her seferinde sadece tek bir adım atıyorsunuz. Bu açık bir şekilde TSP için en uygun çözümü bulamıyor, ancak birçok çok iyi yaklaşım da onu bulamıyor. TSP için tüm en uygun çözüm bulucuları hesaplama açısından oldukça zordur.


1

Cevap hayır, bu TSP sorununu çözmenin iyi bir yolu değil. İyi bir karşı örnek, aşağıdaki gibi tüm noktaların bir çizgi üzerinde olduğu durumlardır:

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

Dijsktra algoritmasını kullanarak, zayıf satıcıyı 0 noktasından başlatacak, önce 1'e sonra 2'ye, sonra 3'e gidecektir. ki bu optimal değil.

Umarım yardımcı olur. Steven S. Skiena'nın "Algoritma Tasarımı" adlı mükemmel kitabının ilk bölümüne bir göz atın, bu örneği daha ayrıntılı olarak açıklar.

TSP sorunu iki nokta arasında en kısa yolu bulmak değil, en uygun olan tüm noktalar arasında bir rota yapmaktır. Optimal rotanız olduğunda, rotadaki her nokta arasındaki en kısa yolu bulmak için Dijsktra'yı kullanabilirsiniz.


2
Dijkstra, tek kaynaklı en kısa yol algoritmasıdır, ancak satıcının 0'dan başlamasını ve bir rota döndürmesini sağlamaz. Sadece verilen kaynak tepe noktasındaki her bir tepe noktasına en kısa yolu içeren en kısa yol ağacını döndürür.
Joe

Geleneksel olarak, TSP sorunu [ en.wikipedia.org/wiki/… ] “Şehirlerin bir listesi ve ikili mesafeleri göz önüne alındığında, görev her şehri tam olarak bir kez ziyaret eden ve başlangıç ​​noktasına geri dönen mümkün olan en kısa yolu bulmaktır. " Teknik olarak bir yolda bu gereksinimleri karşılamak mümkün değildir - ya başlangıç ​​şehrine dönmemeli ya da şehirleri tekrarlamamalısınız.
Joe

Ancak, bir yolda, bu kısıtlamalardan herhangi birini gevşetirsek, sorun önemsizdir.
Joe

Tabii ki, Dijkstra satıcıyı 0'da başlatmayacaktı. Ancak orijinal soruda önerilen algoritma bir başlangıç ​​köşesi belirtmedi; Dolayısıyla, önerilen algoritma olabilir bu cevabın doğru olduğunu Yani 0'dan başlamak yoksul satıcı zorlar.
JeffE
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.