Gezgin Satıcı Problemini (TSP) çözmek için kesin çözümler sunan kaba kuvvet aramasından, hızlı ve etkili 2-Opt yerel iyileştirme ve yaklaşıklık algoritmalarına kadar geniş bir spektrumu inceler.
Gezgin Satıcı Problemi (TSP), verilen n adet şehirden her birine tam olarak birer kez uğrayıp başlangıç noktasına dönen en kısa yolu bulma problemidir. NP-Zor yapısıyla bilinir.
Kapsamlı Arama (Exhaustive Search), tüm olası (n-1)! / 2 turları inceleyerek kesin çözümü bulur, ancak n > 12 için pratik değildir. Bu sebeple pratikte sezgisel (heuristics) ve yaklaşıklık (approximation) algoritmaları tercih edilir.
Yerel Arama (Local Search) yöntemlerinden en popüleri olan 2-Opt algoritması, mevcut bir turun kesişen veya verimsiz iki kenarını çıkarıp yolları ters çevirerek birleştirir. Bu işlem lokal iyileştirme yapılamayana kadar sürdürülür. En Yakın Komşu (Nearest Neighbor) ise başlangıç noktasına en yakın şehri seçerek ilerleyen açgözlü bir yaklaşıklık algoritmasıdır.
Aşağıdaki uygulamalar PDF kaynaklarındaki pseudo kod akışını modern veri yapılarıyla ifade eder. Kenar durumları görünür bırakıldığı için örnekler doğrudan test edilebilir.
1function getDistance(x1: number, y1: number, x2: number, y2: number): number {2 return Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2);3}45export function calculateTotalDistance(tour: number[], pts: [number, number][]): number {6 let dist = 0;7 for (let i = 0; i < tour.length; i++) {8 const p1 = pts[tour[i]];9 const p2 = pts[tour[(i + 1) % tour.length]];10 dist += getDistance(p1[0], p1[1], p2[0], p2[1]);11 }12 return dist;13}1415export function twoOpt(pts: [number, number][]): number[] {16 const n = pts.length;17 // Initialize with a simple 0..n-1 tour18 let tour = Array.from({ length: n }, (_, i) => i);19 let improved = true;20 21 while (improved) {22 improved = false;23 for (let i = 1; i < n - 1; i++) {24 for (let j = i + 1; j < n; j++) {25 // 2-opt swap: reverse segment from i to j26 const newTour = [...tour.slice(0, i), ...tour.slice(i, j + 1).reverse(), ...tour.slice(j + 1)];27 if (calculateTotalDistance(newTour, pts) < calculateTotalDistance(tour, pts)) {28 tour = newTour;29 improved = true;30 break;31 }32 }33 if (improved) break;34 }35 }36 return tour;37}Şehir koordinatlarını girerek 2-Opt yerel iyileştirmesi ve Kapsamlı Aramayı karşılaştırın.
Şehir koordinatlarını girerek 2-Opt yerel iyileştirmesi ve Kapsamlı Aramayı karşılaştırın.
En İyi Durum: O(n^2) - Basit sezgisel
Ortalama Durum: O(k * n^2) - 2-Opt iyileştirmesi
En Kötü Durum: O(n!) - Kapsamlı Arama
O(n) - Tur dizisi saklama - Bu algoritmanın karmaşıklığı belirtilmemiş.
Gezgin Satıcı ve Yerel Arama (Traveling Salesman & Local Search) Algoritması ile benzer veya alternatif olarak değerlendirilebilecek diğer başlıklar: