ÖZEL EGE LİSESİ İZMİR İN GEZGİN SATICISI HAZIRLAYAN ÖĞRENCİLER: Aylin RAMYAR Doruk ÇAKMAKÇI DANIŞMAN ÖĞRETMEN: Serenay YILMAZ İZMİR 2014
İÇİNDEKİLER 1. PROJENİN AMACI... 3 2. GİRİŞ... 3 3. ÖN BİLGİLER... 4 3.1 Algoritma Nedir?... 4 3.2 Graf Teori... 4 3.3 Hamilton Turu... 4 4. GEZGİN SATICI PROBLEMİ... 5 4.1 Problemin Yapısı... 6 4.2 Gezgin Satıcı Problemi için Çözüm Yöntemleri... 6 4.3 Gezgin Satıcı Problemi için Bazı Sezgisel Algoritmalar... 7 4.3.1 Açgözlü algoritması... 7 4.3.2 En yakın komşu algoritması... 7 4.3.3 İki uçtan en yakın komşu algoritması... 8 5. GEZGİN SATICI PROBLEMİNİN ÇÖZÜMÜ İÇİN GELİŞTİRİLEN YENİ SEZGİSEL ALGORİTMA... 8 6. HESAPLAMA DENEMELERİ... 9 7. ALGORİTMALARIN KIYASLANMASI... 12 8.GEZGİN SATICI PROBLEMİNİN BİR UYGULAMASI... 13 9. SONUÇ... 18 KAYNAKLAR... 18 TEŞEKKÜR... 18 2
1. PROJENİN AMACI Bu projenin amacı, birçok uygulaması bulunan Gezgin Satıcı Problemi için yeni bir sezgisel algoritma önermek ve önerilen algoritmayı günlük hayatta uygulamaktır. Önerilen algoritma en yakın komşu algoritmasının bir genelleştirilmesi olarak geliştirilmiştir. 2. GİRİŞ Gezgin satıcı problemi (GSP) uygulama zenginliği nedeniyle en çok ilgi çeken problemlerden birisidir. Problem iki bilim adamı tarafından bağımsız olarak yaklaşık aynı zamanlarda ortaya koyulmuştur. Karl Menger 5 Şubat 1930 da Viyana da bir matematik kolokyumunda, Hassler Whitney ise 1934 yılında Princeton Üniversitesinde bir seminerde problemi tanımlamışlardır. Problemin ilk matematiksel programlama gösterimi ve çözüm önerisi Dantzig ve arkadaşları tarafından verilmiştir [3]. GSP verilen n tane şehir için, her şehre bir kez uğramak koşuluyla tekrar başlangıç şehrine geri dönen en kısa (en az maliyetli) turu bulma problemidir. Tanımlanma açısından kolay görünse de çözülmesi zor bir problemdir [1]. GSP nin çözümü için birçok algoritma önerilmiştir. GSP yi çözmek için üretilen yöntemleri kesin yöntemler ve sezgisel (heuristic) yöntemler olmak üzere iki gruba ayırabiliriz. Kesin yöntemler verilen problem için kesin çözüm üretmektedirler, ancak hesaplanabilirlik açısından pahalıdırlar. Yani şehirlerin sayısı 20 yi aştığında problemi çözmek zorlaşır (Bununla ilgili aşağıdaki bölümlerde detaylı şekilde bahsedilmiştir). Bu durumda sezgisel algoritmalar devreye girer. Sezgisel algoritmalar probleme tam olarak çözüm vermeseler de, yaklaşık bir çözüm verirler. Büyük boyutlu problemlerde sezgisel algoritmalar, kesin algoritmalara göre daha çok tercih edilmektedirler [3]. İşte biz de bundan yola çıkarak GSP için yeni bir sezgisel algoritma önerdik. Önerdiğimiz algoritma için C++ da program yazıp İzmir in ilçeleri üzerinde denemeler yaptık. Proje altı bölümden oluşmaktadır: Birinci bölümde projenin amacına değinilmiş, ikinci bölümde ise konuya giriş yapılmıştır. Üçüncü bölümde proje boyunca kullanılan, gerekli bilgilere yer verilmiştir. Dördüncü bölümde GSP ile ilgili bilgi verilip, bazı çözüm algoritmalarından bahsedilmiştir. Beşinci bölümde, GSP için önerilen yeni algoritmaya yer verilmiş, altıncı bölümde ise bu sezgisel algoritmanın bir uygulaması anlatılmıştır. Proje, Sonuç, Kaynaklar ve Teşekkür bölümleri ile sonlandırılmıştır. 3
3. ÖN BİLGİLER Bu bölümde bu projede kullanılan tanımlara (Algoritma, Graf Teori ve Hamilton turu) yer verilmiştir. Projenin diğer bölümlerinde bu tanımlardan yararlanılacaktır [3]. 3.1 Algoritma Nedir? Algoritma kavramı matematiğin en temel kavramlarından biridir. Algoritma bir problemin çözümünde izlenecek yol anlamına gelir ve problemin çözümünün adımlar halinde yazılmasıyla oluşturulur. Genellikle matematikte ve programlamada bir işi yapmak için tanımlanan, belli bir başlangıcı ve sonu olan, açıkça belirlenmiş basamaklardır [3]. Algoritmanın özellikleri aşağıdaki gibidir: 1) Başlangıcı olmalı 2) Basit olmalı 3) Problemin çözümünü, mümkün olan en az adım ile en kısa sürede gerçekleştirmeli 4) Sonu olmalı 3.2 Graf Teori Graf teorisi, bir olay ve ifadenin, tepe ve ayrıtlar kullanılarak gösterilmesi biçimidir. Kökleri 18. yüzyıla dayanan graf teorisi günümüzde bilgisayar uygulamalarında ve modellemelerde çokça kullanılmaktadır. Fizik, kimya gibi temel bilimlerde, mühendislik uygulamalarında ve tıp biliminde karşılaşılan çeşitli problemlerin çözümü ve modellenmesi graf teorisi temel alınarak yapılmaktadır. Graf teoride birçok problem sınıfı modern dünyada kendine yer bulmuştur. Bunlardan biri de gezgin satıcı problemidir. Graf Teori ile ilgili tanımlar aşağıdaki gibidir: Tanım 3.2.1 Bir G ( V, E) grafı, tepeler (vertices) denilen boş olmayan bir V sonlu objeler kümesi ile birlikte, ayrıtlar (edges) denilen G nin farklı tepe çiftlerinin düzensiz sıralanışı olan bir E (boş olabilir) kümesidir. Tanım 3.2.2 Bir G grafının bir tepesinden farklı bir tepesine varışta kullanılan her tepe ve her ayrıtı farklı olan yürüyüşe yol (path) denir. n tepeli bir yolda ayrıt sayısı n 1 dir. Tanım 3.2.3 Bir G ( V, E) grafında herhangi u, v tepeleri arasındaki uzaklık, u ile v tepelerini birbirine bağlayan en kısa yolun uzunluğudur ve d ( u, v) ile gösterilir. Tanım 3.2.4 G ( V, E) grafının her hangi iki tepesi arasında mutlaka bir ayrıt varsa bu graf tam graf (complete graph) olarak adlandırılır ve K n ile gösterilir. Tepe sayısı n iken ayrıt n ( n 1) sayısı da dir. 2 Tanım 3.2.5 G ( V, E) grafında her E kenarına bir ağırlık değeri atanmış ise graf, ağırlıklandırılmış graf olarak adlandırılır. 3.3 Hamilton Turu Bir graf üzerindeki her tepeden sadece bir kez geçen ve başladığı noktada biten tura Hamilton turu denir. 4
4. GEZGİN SATICI PROBLEMİ Gezgin Satıcı Problemi (GSP) (Traveling Salesman Problem (TSP)), matematik ve bilgisayar bilimleri alanlarında incelenen ve iyi bilinen bir en iyileme problemidir. GSP, aralarındaki uzaklıklar bilinen n adet noktanın (şehir, parça veya düğüm gibi) her birisinden yalnız bir kez geçen en kısa veya en az maliyetli turu bulmayı hedefleyen bir problemdir. Graf teorisinde ise, GSP Verilen bir ağırlıklı grafta (düğümler yani tepeler şehirleri; ayrıtlar ise şehirlerin arasındaki yolları göstermek; ağırlıklar da yolun maliyeti veya uzunluğu olmak üzere) en düşük maliyetli Hamilton Devresinin bulunması şeklinde tanımlanabilir [1]. Şekil 1. Ege bölgesi haritası Kısaca GSP, müşteriler, işler, şehirler, noktalar vb. için belirli bir güzergah ya da sıralama tayin etme problemidir. Nesnelerin minimum maliyet, uzaklık veya zaman alacak şekilde sıralanması gezgin satıcı problemlerine girmektedir. Tablo 1. Ege bölgesi şehirler arası mesafelerin gösterildiği tablo İzmir Aydın Manisa Muğla Denizli Uşak Kütahya Afyon İzmir 0 126 35 225 224 211 333 327 Aydın 126 0 155 99 126 273 408 346 Manisa 35 155 0 254 208 195 317 311 Muğla 225 99 254 0 145 295 430 368 Denizli 224 126 208 145 0 150 285 223 Uşak 211 273 195 295 150 0 139 116 Kütahya 333 408 317 430 285 139 0 100 Afyon 327 346 311 368 223 116 100 0 Yukarıdaki tablo bir gezgin satıcı problemi için şehirlerarası mesafelerin km cinsinden gösterildiği bir matris örneğidir. Bu projede kullanılan mesafeleri matris üzerinde gösterilmiştir. 5
4.1 Problemin Yapısı Gezgin satıcı problemi n tane şehir arasında, her şehre bir kez uğramak koşuluyla en kısa yolu kat edebilecek şekilde dolaşılacak turun bulunması mantığı ile oluşturulur. Her şehre bir kez uğramak koşulu ile denenebilecek bütün ihtimallerden oluşan şehir turları arasındaki en kısa mesafeli turu bulmak amaçlanmaktadır. Bunun için ilk denenen tur en kısa mesafeli olarak kabul edilir. Sırasıyla diğer güzergahların uzunluklarıyla karşılaştırılır. Sonuçta en küçük uzunluğa sahip tur en iyi tur olarak belirlenir. Problemin amacı, satıcıya bu en kısa yolu sunabilmektir. Satıcının ilk şehirde, n - 1 değişik şehir arasında seçim hakkı vardır, İkinci şehirde, n - 2 değişik şehir arasında seçim hakkı vardır, ( n 1)! Bulunan her bir Hamilton yolu ters sırada da ziyaret edilebileceğinden satıcının 2 ( 7 1)! değişik tur arasından seçim yapması yeterli olacaktır. Örnek olarak, 7 şehir için, 2 ( 8 1)! 8 şehir için ihtimal vb. gibi söz konusudur. Yani, şehir sayısı arttığında işlem 2 karmaşıklığı üstel olarak artmaktadır ki, bu da problemin çözümünü zorlaştırmaktadır [2]. 4.2 Gezgin Satıcı Problemi İçin Çözüm Yöntemleri GSP için kesin çözüm denildiğinde, ilk akla gelen yöntem tüm mümkün olasılıkların denendiği sayımlama yöntemidir. Şekil 2. a) Tüm Hamilton döngüleri b) Herhangi bir tur örneği Gezgin satıcı probleminde 15 şehre kadar kesin sonuçlar kolayca bulunabilmektedir. Çözüm karmaşıklığı şehir sayısına üstel olarak bağımlı olduğu için 16 şehirden sonra imkansız hale gelmektedir. Mesela, 2001 yılında Almanya nın 15112 adet şehrini gezen ve her şehirden yalnızca bir kez geçen en kısa yolu bulabilmek için Rice ve Princeton Üniversitelerindeki bilgisayarlar 22 yıldan daha fazla süre çalışarak yaklaşık 66000 km lik güzergahı bulmuşlardır [1]: 6
Şekil 3. Almanya nın tüm şehirlerini gezen ve her şehirden bir kez geçen en kısa tur Görüldüğü gibi bu problemde, olasılıkların tamamının taranmasını gerektiren çözüm yönteminde şehirlerin sayısının artması ile problemin çözümü imkansız hale gelmektedir. İlk aşamada çözülebilecek gibi görünen GSP problemi, belirli noktadan sonra çok uzun zaman gerektirmekte ve gittikçe çözülemez hale gelmektedir. Bu nedenle de problemin kısa zamanda değişik yaklaşımlarla çözümü düşünülmüş, çözüm uzayının yalnızca belirli bir kısmının tarandığı sezgisel yöntemler geliştirilmiştir. Çözüm uzayının tümü gözden geçirilmediği için sezgisel yöntemlerle optimum (gerçek) sonuca ulaşma garantisi yoktur. 4.3 Gezgin Satıcı Problemi İçin Bazı Sezgisel Algoritmalar 4.3.1 Açgözlü Algoritması (Greedy Algorithm) Açgözlü algoritmasında her defasında en kısa ayrıt seçilirek tura eklenir. Algoritmada ayrıtlar eklenirken eklenecek ayrıt, tura eklendiği zaman alt tur oluşturuyorsa bu ayrıt tura eklenmez ve bir sonraki kısa ayrıta geçilir [3]. GSP için algoritmanın adımları aşağıdaki gibi olacaktır: Adım1. Tüm ayrıtları küçükten büyüğe doğru sırala. Adım 2. Alt tur oluşturmayan en kısa ayrıtı seç ve tura ekle. Adım 3. Turda n tane ayrıtımız var mı? Cevap hayır ise, Adım 2 ye git. Adım 4. Algoritmayı sonlandır. 4.3.2 En Yakın Komşu Algoritması (NN Algorithm) En yakın komşu algoritması GSP için geliştirilmiş en basit ve en iyi bilinen sezgisel algoritmadır. Algoritmanın mantığı hep en yakın komşuya gitmeye dayanır. GSP için algoritmanın adımları aşağıdaki gibi olacaktır [1]: Adım 1. Rastgele şehir seç. Adım 2. Alt tur oluşturmayan, en yakın ziyaret edilmemiş şehri bul ve oraya git. Adım 3. Ziyaret edilmemiş şehir kaldı mı? Cevap evet ise, Adım 2 ye git. 7
Adım 4. Başlangıç şehre geri dön. Adım 5. Algoritmayı sonlandır. 4.3.3 İki Uçtan En Yakın Komşu Algoritması (NND Algorithm) İki uçtan en yakın komşu algoritmasına graftaki tepelerin herhangi birinden rastgele başlanır. Daha sonra algoritmaya bu tepeye en yakın olan ve daha önceden ziyaret edilmemiş tepeye giderek devam edilir. Elimizde iki uç tepe olacaktır. Bu iki uç tepeden daha önce ziyaret edilmemiş ve daha kısa olan ayrıt tura eklenerek devam edilir ve uç tepeler güncellenir. Algoritmaya bu şekilde devam ederek tüm tepeler gezildikten sonra sonlandırılır [3]. GSP için algoritmanın adımları aşağıdaki gibi olacaktır: Adım 1. Rastgele bir şehir seç. Adım 2. Önceden ziyaret edilmemiş en yakın şehri bul ve oraya git. Adım 3. Bu iki uç şehrin her birine en yakın olan ve daha önceden ziyaret edilmemiş şehirlerden uzaklığı en kısa olana uç şehirden git ve uç şehri güncelle. Adım 4. Ziyaret edilmemiş şehir kaldı mı? Cevap evetse Adım 3 e git. Adım 5. Bir uç şehirden diğerine git. Adım 6. Algoritmayı sonlandır. 5. GEZGİN SATICI PROBLEMİNİN ÇÖZÜMÜ İÇİN GELİŞTİRİLEN YENİ SEZGİSEL ALGORİTMA Yukarıda bahsedilen üç algoritmada da en küçük ayrıttan başlanarak tur oluşturulmaya çalışılır. Bu algoritmaların dezavantajı geriye zorunlu olarak seçim için büyük ayrıtların kalmasıdır. Geriye kalan ayrıtlar büyük oldukları için onların birbirlerinden farkları da büyük olacaktır. Bu dezavantajı göz önüne alarak, iki uçtan en yakın komşu algoritmasını başlatacağımız tepe, diğer tepelerden uzaklıklar toplamı en büyük olandır. O zaman önce en uzak tepeye bitişik en küçük ayrıtlar kullanılacaktır. Daha sonra önerdiğimiz algoritma ile biraz daha ileri gidilerek kullanılacak en uzak tepelerin sayısı arttırılır. Böylece yukarıdaki fikir daha etkin hale getirilir. Uzak tepelerin sayısı n/b (b 0 dan farklı değerler alabilir) parametresi ile ayarlanır. Hesaplama denemelerinde b parametresini değiştirerek çözüm iyileştirebilir. Algoritmayı uygulamaya başlamadan önce, tepeler arasındaki tüm mesafelerin belirtildiği bir matris oluşturulur. Önerdiğimiz algoritmanın adımları aşağıdaki gibidir: Adım 1. Satır toplamlarını bul. Adım 2. Satır toplamlarının ortalama değerini bul. Adım 3. Eğer ortalama değerden büyük satır toplamına sahip olan tepelerin sayısı n/b den küçükse o tepelerin hepsini K kümesine at, Adım 4. Eğer ortalama değerden büyük satır toplamına sahip olan tepe sayı n/b den büyükse satır toplamı en büyük olan n/b tane tepeyi K kümesine at. Adım 5. K kümesindeki elemanların bitişik olduğu alt tur oluşturmayacak en küçük ayrıtı bul ve çözüme ekle. Adım 6. Eklenen ayrıta göre K kümesini güncelle. Adım 7. Tur oluşana kadar iki üst adımı (Adım 5 ile Adım 6) tekrarla. 8
6. HESAPLAMA DENEMELERİ Önerdiğimiz algoritmayı bir örnek üzerinde deneyelim. Örnek: 6 şehir ve bunlar arasındaki mesafelerin verildiği örneğin graf üzerindeki gösterimi aşağıdaki gibidir: Şimdi şehirlerin ve şehirlerarası mesafelerin gösterildiği matrisi oluşturalım. 1 2 3 4 5 6 1 0 3 10 19 38 40 2 3 0 11 14 12 35 3 10 11 0 13 43 22 4 19 14 13 0 8 7 5 38 12 43 8 0 5 6 40 35 22 7 5 0 Şimdi ise yukarıdaki problemi en yakın komşu (NN) algoritması ile çözelim: Önce birinci tepeden başlayarak en yakın komşu (NN) algoritmasını uygulayalım. Güzergah: 1->2->3->4->6->5->1 Kat edilen mesafe: 3 + 11 + 13 + 7 + 5 + 38 = 77 Şimdi ikinci tepeden başlayarak en yakın komşu (NN) algoritmasını uygulayalım: Güzergah: 2->1->3->4->6->5->2 Kat edilen mesafe: 3 + 10 + 13 + 7 + 5 + 12 = 50 Şimdi üçüncü tepeden başlayarak en yakın komşu (NN) algoritmasını uygulayalım: Güzergah: 3->1->2->5->6->4->3 Kat edilen mesafe: 10 + 3 + 12 + 5 + 7 + 13 = 50 9
Şimdi dördüncü tepeden başlayarak en yakın komşu (NN) algoritmasını uygulayalım: Güzergah: 4->6->5->2->1->3->4 Kat edilen mesafe: 7 + 5 + 12 + 3 + 10 + 13 = 50 Şimdi beşinci tepeden başlayarak en yakın komşu (NN) algoritmasını uygulayalım: Güzergah: 5->6->4->3->1->2->5 Kat edilen mesafe: 5 + 7 + 13 + 10 + 3 + 12 = 50 Şimdi altıncı tepeden başlayarak en yakın komşu (NN) algoritmasını uygulayalım: Güzergah: 6->5->4->3->1->2->6 Kat edilen mesafe: 5 + 8 + 13 + 10 + 3 + 35 = 74 Yukarıdaki çözümlerden anlaşılacağı üzere, bu problem için en iyi sonuç 2, 3, 4 ve 5. tepelerden başlanıldığında 50 olarak elde edilir. En kötü sonuç ise 1. tepeden başlanıldığında 77, 6. tepeden başlanıldığında ise 74 olarak elde edilmiştir. Şimdi yukarıdaki örneği iki uçtan en yakın komşu (NND) algoritması ile çözelim: Önce birinci tepeden başlayarak iki uçtan en yakın komşu (NND) algoritmasını uygulayalım. Güzergah: 1->2->5->6->4->3->1 Kat edilen mesafe: 3 + 12 + 5 + 7 + 13 + 10 = 50 Şimdi ikinci tepeden başlayarak iki uçtan en yakın komşu (NND) algoritmasını uygulayalım: Güzergah: 2->1->3->4->6->5->2 Kat edilen mesafe: 3 + 10 + 13 + 7 + 5 + 12 = 50 Şimdi üçüncü tepeden başlayarak iki uçtan en yakın komşu (NND) algoritmasını uygulayalım: Güzergah: 3->1->2->5->6->4->3 Kat edilen mesafe: 10 + 3 + 12 + 5 + 7 + 13 = 50 Şimdi dördüncü tepeden başlayarak iki uçtan en yakın komşu (NND) algoritmasını uygulayalım: Güzergah: 4->6->5->2->1->3->4 Kat edilen mesafe: 7 + 5 + 12 + 3 + 10 + 13 = 50 10
Şimdi beşinci tepeden başlayarak iki uçtan en yakın komşu (NND) algoritmasını uygulayalım: Güzergah: 5->6->4->3->1->2->5 Kat edilen mesafe: 5 + 7 + 13 + 10 + 3 + 12 = 50 Şimdi altıncı tepeden başlayarak iki uçtan en yakın komşu (NND) algoritmasını uygulayalım: Güzergah: 6->5->4->3->1->2->6 Kat edilen mesafe: 5 + 8 + 13 + 10 + 3 + 35 = 74 Yukarıdaki problemi bir de açgözlü algoritması (Greedy Algorithm) ile çözelim: Bunun için önce ayrıtları (yani mesafeleri) sıralamamız gerekiyor. 1) 1->2 3 6) 2->3 11 11) 3->6 22 2) 5->6 5 7) 2->5 12 12) 2->6 35 3) 4->6 7 8) 3->4 13 13) 1->5 38 4) 4->5 8 9) 2->4 14 14) 1->6 40 5) 1->3 10 10) 1->4 19 15) 3->5 43 1) 1->2 3 2) 5->6 5 3) 4->6 7 4) 1->3 10 5) 2->5 12 6) 3->4 13 Çözüme girecek olan ayrıtlar ise aşağıda sıralanmıştır: Güzergah, 1->2->5->6->4->3->1 olarak bulunur. Sonuç olarak kat edilen mesafe 3 + 5 + 7 + 10 + 12 + 13 = 50 dir. Şimdi ise, kendi algoritmamızla problemi çözmeye çalışalım. Önce her bir satır için satır toplamlarını bulalım. Satır toplamlarının bulunduğu tablo aşağıda verilmiştir. Satır toplamları için ortalama değer 93.33 olarak bulunur. Göründüğü gibi 1, 3, 5 ve 6 satırların toplamları ortalama değerden büyüktür. 1 2 3 4 5 6 Toplam 1 0 3 10 19 38 40 110 2 3 0 11 14 12 35 75 3 10 11 0 13 43 22 99 4 19 14 13 0 8 7 61 5 38 12 43 8 0 5 106 6 40 35 22 7 5 0 109 11
Şimdi b yi 3 olarak kabul edip algoritmamızı uygulamaya başlayalım. b 3 den farklı değerler alabilmektedir ancak, denemelerimiz içinde en iyi sonuç b=3 olduğunda elde edilmiştir. Bu problemde (6/3=2 olduğu için) ortalama değerden büyük olan iki en büyük toplamın bulunduğu 1. ve 6. tepeleri alarak çözüme başlarız. Algoritmaya 1. ve 6. tepelere en yakın komşularını alarak devam ediyoruz. Yani 1. tepeden en yakın mesafe 1->2 (3) ve 6. tepeden en yakın mesafe 6->5 (5). Bu mesafelerden de en kısası 1->2 (3) olduğu için çözüme 1->2 ayrıtı girecektir. Şu andan itibaren elimizde 1, 2 ve 6 tepeleri vardır. Aynı işlemi bu tepelere uygulayarak devam ederiz. 1. tepeden en yakın mesafe 1->3 (10), 2. tepeden en yakın mesafe 2->3 (11) ve 6. tepeden en yakın mesafe 6->5 (5)tir. O halde çözüme en kısa olan, 6->5 (5) ayrıtı girecektir. Şu anda elimizde 1, 2, 5 ve 6 tepeleri ayrıca 1->2 ve 6->5 ayrıtları mevcuttur. Tur oluşuncaya kadar algoritmamıza devam edelim. 1. tepeden en yakın mesafe 1->3 (10), 2. tepeden en yakın mesafe 2->3 (11), 5. tepeden en yakın mesafe 5->4 (8), 6. tepeden en yakın mesafe 6->4 (7) dir. Açıktır ki, çözüme en kısa olan, 6->4 (7) ayrıtı girecektir. Şu andan itibaren elimizde 1, 2, 4, 5 ve 6 tepeleri ayrıca 1->2, 6->5 ve 6->4 ayrıtları mevcuttur. Tur oluşuncaya kadar algoritmamıza devam edelim. Alt tur oluşturan ayrıtlar çözüme girmeyecektir. 1. tepeden en yakın mesafe 1->3 (10), 2. tepeden en yakın mesafe 2->3 (11), 4. tepeden en yakın mesafe 4->3 (13) ve 5. tepeden en yakın mesafe 5->2 (12) dir. Açıktır ki, çözüme en kısa olan 1->3 (10) ayrıtı girecektir. Şu andan itibaren elimizde 1, 2, 3, 4, 5 ve 6 tepeleri ayrıca 1->2, 6->5, 6->4 ve 1->3 ayrıtları mevcuttur. Tur oluşuncaya kadar algoritmamıza devam edelim. 2. tepeden en yakın mesafe 2->5 (12), 3. tepeden en yakın mesafe 3->4 (13), 4. tepeden en yakın mesafe 4->3 (13) ve 5. tepeden en yakın mesafe 5->2 (12) dir. Açıktır ki, çözüme en kısa olan 5->2 (12) ayrıtı girecektir. Şu andan itibaren elimizde 1, 2, 3, 4, 5 ve 6 tepeleri ayrıca 1->2, 6->5, 6->4, 1->3 ve 5- >2 ayrtıları mevcuttur. Geriye turu kapatmak kalıyor. Bunu da 4->3 ayrıtını ekleyerek algoritmayı sonlandırırız. Sonuç olarak çözümümüz 1->2, 6->5, 6->4, 1->3, 5->2 ve 4->3 ten 50 olarak bulunur. Yani gezgin 1->2->5->6->4->3->1 gelerek avantajlı bir şekilde turunu tamamlamış olur. 7. ALGORİTMALARIN KIYASLANMASI 1. NN algoritmasında rastgele bir tepeden başlanıp en yakın komşu seçilerek tur oluşturulur. Bu algoritma n defa farklı tepeden denenerek sonuç iyileştirilebilir. 2. NND algoritmasında da rastgele bir tepeden başlanıp en yakın komşu seçilir ve sonra alınmış iki tepeden en yakın komşusu olan tepe seçilerek tur oluşturulur. Bu algoritmayı da n defa farklı tepeden başlatarak sonuç iyileştirilebilir. 3. Projemizde bu algoritmalar daha da geliştirilmiştir. K kümesindeki tepelerden başlayarak her bir tepenin en yakın komşusu bulunur. Daha sonra, bunların arasından alt tur oluşturmayan en yakın tepe seçilir ve K kümesine eklenir. Her adımdan sonra K kümesi güncellenir. Tur oluşana kadar algoritmaya devam edilir. 12
8. GEZGİN SATICI PROBLEMİNİN BİR UYGULAMASI Önerdiğimiz yeni algoritmayı b yi 2 olarak kabul edip İzmir in ilçeleri üzerinde uygulayalım. b 2 'den farklı değerler alabilmektedir, ancak denemelerimiz içinde b=2 olduğunda en iyi sonuç elde edilmiştir. Şekil 4. İzmir in ilçeleri İlçeler arası mesafelerin (km) gösterildiği bir tablo oluşturduk. Tablonun kesitleri aşağıdaki gibidir: Tablo 2. İzmir in ilçeler arası mesafelerinden oluşan tablo 13
14
30 (30 1) Bu tabloda 30 ilçe (yani 30 tepe), 15 29 435 mesafe (435 ayrıt) vardır. 2 29! 8841761993739701954543616000000 30 ilçe için farklı durum olacaktır. 2 2 Görüldüğü gibi bu hesaplanması zor bir durumdur. Çok olasılığı olan bu durumda avantajlı yolu seçmek zordur. İşte bu yüzden sezgisel algoritmaya ihtiyaç vardır. Yukarıdaki tablodan yararlanarak, İzmir in Konak ilçesinden başlayıp, tüm ilçelerini dolaşıp başlangıç ilçesine geri dönen turu, hem en yakın komşu algoritması ile, hem iki uçtan en yakın komşu algoritması ile (NND), hem açgözlü algoritması (Greedy) ile, hem de önerdiğimiz yeni algoritma ile bulalım. Açgözlü algoritması (Greedy algorithm) ile Konak ilçesinden başlayıp, diğer tüm ilçeleri dolaşıp Konak ilçesine geri dönen tur: Konak->Bornova->Bayraklı->Karşıyaka->Çiğli->Menemen->Aliağa->Foça->Dikili- >Bergama->Kınık->Karaburun->Çeşme->Urla->Seferihisar->Güzelbahçe->Narlıdere- >Kemalpaşa->Selçuk->Kiraz->Beydağ->Ödemiş->Tire->Bayındır->Torbalı->Buca- >Menderes->Gaziemir->Balçova->Karabağlar->Konak 15
şeklinde olup, toplam kat edilen mesafe 1140 km dir. Turu harita üzerinde gösterelim: Şekil 5. Açgözlü algoritması ile bulunan çözüm En yakın komşu algoritması (NN) ile Konak ilçesinden başlayıp, diğer tüm ilçeleri dolaşıp Konak ilçesine geri dönen tur: Konak->Karabağlar->Balçova->Gaziemir->Menderes->Buca->Bornova->Bayraklı- >Karşıyaka->Çiğli->Menemen->Aliağa->Foça->Bergama->Kınık->Dikili->Kemalpaşa- >Torbalı->Bayındır->Tire->Ödemiş->Beydağ->Kiraz->Selçuk->Seferihisar->Urla- >Güzelbahçe->Narlıdere->Çeşme->Karaburun->Konak şeklinde olup, toplam kat edilen mesafe 1130 km dir. Turu harita üzerinde gösterelim: Şekil 6. En yakın komşu (NN) algoritması ile bulunan çözüm Şimdi NND algoritması ile elde edilen sonuca bakalım. İki uçtan en yakın komşu algoritması (NND) ile Konak ilçesinden başlayıp, diğer tüm ilçeleri dolaşıp Konak ilçesine geri dönen tur: 16
Konak->Karabağlar->Balçova->Gaziemir->Menderes->Buca->Torbalı->Bayındır->Tire- >Ödemiş->Beydağ->Kiraz->Selçuk->Seferihisar->Urla->Güzelbahçe->Narlıdere- >Çeşme->Karaburun->Dikili->Kınık->Bergama->Foça->Aliağa->Menemen->Çiğli- >Kemalpaşa->Bornova->Karşıyaka->Bayraklı->Konak şeklinde olup, toplam kat edilen mesafe 1170 km dir. Turu harita üzerinde gösterelim: Şekil 7. İki uçtan en yakın komşu (NND) algoritması ile bulunan çözüm Şimdi ise önerdiğimiz yeni sezgisel algoritma ile Konak ilçesinden başlayıp, diğer tüm ilçeleri dolaşıp Konak ilçesine geri dönen turu bulalım. Güzergah, Konak->Karabağlar->Balçova->Gaziemir->Menderes->Buca->Bornova->Bayraklı- >Karşıyaka->Çiğli->Menemen->Aliağa->Foça->Dikili->Bergama->Kınık->Kiraz->Beydağ- >Ödemiş->Tire->Bayındır->Torbalı->Kemalpaşa->Selçuk->Karaburun->Çeşme->Urla- >Seferihisar->Güzelbahçe->Narlıdere->Konak şeklinde olup, toplam kat edilen mesafe 1128 km dir. Turu harita üzerinde gösterelim. Şekil 8. Önerdiğimiz algoritma ile bulunan çözüm 17
Tablodaki verilerden yararlanarak önerdiğimiz sezgisel algoritma ile bir ilçeden başlayarak tüm ilçeleri dolaşıp başlangıç ilçesine geri dönen avantajlı yolu hesapladık. Bu bulduğumuz yolu bir kargo şirketi arabasının ürün dağıtımı için izlediği yolun bulunmasında ve birçok alanda kullanabiliriz. Tüm güzergahları Konak tepesinden başlayarak oluşturduk. Algoritmaların bulduğu sonuçları karşılaştırdık. Açgözlü (Greedy) algoritması 1140 km, En yakın komşu algoritması (NN) 1130 km, İki uçtan en yakın komşu algoritması (NND) 1170 km ve bizim önerdiğimiz algoritma 1128 km bulmuştur. Bu verilere göre önerdiğimiz algoritma daha iyi sonuç vermiştir. 9. SONUÇ Projenin gerçekleştirilmesi sonucunda mevcut olan sezgisel algoritmalardan daha verimli ve daha makul zamanda problemi çözebilen yeni bir algoritma üretilmiştir. Üretilen algoritmanın bilinen diğer algoritmalarla kıyaslaması yapılmış, paket programı oluşturulmuştur. Hazırlanan paket program İzmir in Konak ilçesinden başlayarak tüm ilçeleri dolaşıp başlangıç ilçesine geri dönen turun bulunması için kullanılmıştır. Ayrıca bulunan turun İzmir in tüm ilçelerini dolaşacak bir kargo şirketinin ürün dağıtımında kullanılabileceğini düşünmekteyiz. KAYNAKLAR [1] Haldun Sural, Gezgin Satıcı Problemi, Matematik Dünyası Dergisi, 2003-GÜZ, Sayı I ss.37-40. [2] Ertan Kaya, KOMBİNATORİK Saymadan Saymak, Matematik Olimpiyatlarına Hazırlık, Altın Nokta Yayınları, İzmir 2012. [3] Vasif Nabiyev, Algoritmalar Teoriden Uygulamalara, Seçkin Yayınları, Ankara, 2011. TEŞEKKÜR Proje çalışmamızın her aşamasının yönlendirilmesi ve sonuçlandırılmasında büyük emeği geçen, proje danışmanımız Serenay YILMAZ a, Bilim Kurulu Eş Başkanı (Matematik) Gizem GÜNEL AÇIKSÖZ e, bugüne dek yetişmemizde katkısı olan değerli öğretmenlerimize, her zaman yanımızda olan ve bizi destekleyen, yüreklendiren ailelerimize teşekkür ederiz. Aylin RAMYAR Doruk ÇAKMAKÇI İzmir-2014 18