Harita Tabanlı Teslimat Optimizasyonu
Merhaba, ben Deniz Aytaç. Bu yazımda sizlere stajım sırasında üzerinde çalıştığım projeyi ve bu projeyle neler başardığımı sizlerle paylaşmak istiyorum. Aslında projem, birden fazla teslimat noktasına sahip kullanıcıların, bu noktalar arasında en uygun ve en en kısa rotayı kolayca oluşturabileceği bir sistem geliştirmek üzerineydi. Bunu yaparken harita servisleriyle entegre çalışan, canlı olarak rota hesaplayıp gösteren bir uygulama ortaya çıkardım.
Projenin Amacı
Günümüzde lojistik ve teslimat işlerinde zaman ve mesafe yönetimi büyük önem arz ediyor. Bu yüzden ben de amacımı, kullanıcıların başlangıç noktalarını ve birden fazla varış adresini kolayca seçip sisteme aktarabileceği, sonra da bu varış noktalarının adresleri arasında en verimli rotayı hızlıca oluşturabileceği bir uygulama geliştirmek olarak belirledim.
Adreslerin sisteme girilmesi konusunda da kullanıcılara iki farklı yol sundum:İsterlerse klasik form üzerinden elle adresleri yazma olanağı, isterlerse harita üzerinden interaktif olarak varış noktalarını seçebilme olanağı. Böylece hem kolaylık sağlanıyor hem de kullanıcı deneyimi artıyor. Sonrasında Google Maps API’yi kullanarak gerçek zamanlı rota hesaplaması yapılıyor ve sonuç harita üzerinde anlık olarak gösteriliyor.
Kullanılan Araçlar
***HTML,CSS,JavaScript : Kullanıcı arayüzünü oluşturmak, formları işlemek ve harita ile etkileşimi sağlamak için kullanıldı.
***Python ve SQLite : Backend tarafında başlangıç ve varış noktalarını kaydetmek ve sunucu işlemleri için kullanıldı.
***Google Maps Directions API : Rota hesaplama, mesafe bilgisi, trafik bilgisi ve süre bilgisi alma ile canlı harita görselleştirmesi için kullanıldı.

Neden Nearest Neighboor Algoritmasını Tercih Ettim?
Teslimat noktaları arasında en kısa ve verimli rotayı bulmak, aslında bilgisayar bilimlerinde klasikleşmiş ve zorlayıcı bir problem olarak karşımıza çıkar. Bu problem, bilgisayar bilimleri terminolojisinde TSP(Travelling Salesman Problem) olarak bilinir. TSP‘ nin amacı, verilen birden çok noktayı sadece bir kez ziyaret ederek en kısa turu bulmaktır. Ancak bu problemde, noktalar sayısı yani varış noktası sayısı arttıkça bu hesaplamalar üssel şekilde büyür ve hesaplama süresi çok uzun süreler çıkabilir. TSP algoritmasının zaman karmaşıklığı O(n!)’ dir.
Örneğin, sadece 8 teslimat noktası için bile tam anlamıyla en kısa rotayı bulmak için tüm permutasyonların hesaplanması gerekir ki bu 5040 farklı rota demektir. Bu durum, gerçek zamanlı uygulamalar için pratik değildir çünkü bu 5040 farklı rotayı hesaplama süresi kullanıcının bekleyebileceği sürenin çok üstüne çıkabilir.
Bu nedenle, projede hızlı ve tatmin edici sonuçlar almak amacıyla daha basit ve sezgisel bir yöntem olan Nearest Neighbor algoritmasını tercih ettim. Bu algoritma, başlangıç noktasından yola çıkarak her adımda henüz ziyaret edilmemiş en yakın teslimat noktasını seçer ve böylece adım adım bir rota oluşturur. Nearest Neighbor algoritmasının en büyük avantajı, karmaşıklığının düşük olmasıdır(O(n2)). Hesaplama süresi, tam TSP çözümüne göre çok daha kısa olduğu için kullanıcı deneyimini olumsuz etkilemez. Bu sayede, harita üzerinde canlı ve etkileşimli bir şekilde rota oluşturmak projemde mümkün hale geldi. Ayrıca rota belirleme sürecinde yalnızca karayolu değil, Haversine formülü ile kuş uçuşu mesafeleri de hesaplanarak her iki ölçüm karşılaştırmalı olarak sunuluyor. Bu da algoritmanın farklı senaryolara göre nasıl davrandığını görmek adın değerli bir çıktı sağlıyor.
Sonuç olarak, projemin gereksinimlerini de göz önüne alarak, Nearest Neighbor algoritması benim için en uygun rota optimizasyon yöntemi olmuştur.
Google Maps Entegrasyonu ve Canlı Rota Gösterimi
Google Maps API Entegrasyonu, projenin en işlevsel ve kullanıcı dostu yönlerinden biri oldu. Sadece adres sıralaması yapmakla kalmadı, aynı zamanda bu noktalar harita üzerinde canlı olarak gösterilebildi. Böylece kullanıcılar, seçtikleri başlangıç ve varış noktalarını anında harita üzerinde görebiliyor, rota otomatik olarak çiziliyor. Harita üzerinde animasyonlu bir çizim ile rotanın oluştuğunu görmek kullanıcı açısından hem bilgilendirici hem de etkileyici bir deneyim sunuyor.Her rota segmentini farklı renklerle gösterilmesi ise görsel bütünlük sağlıyor.Ek olarak teslimat yapan kişilerin varış noktasını daha kolay tespit etmesi için siteye Street View özelliği de eklendi. Bu özellik sayesinde, teslimat yapılacak yerlerin çevresi önceden gözlemlenebiliyor, bu da teslimatın daha bilinçli ve güvenli yapılmasına yardımcı oluyor.Ayrıca Google Maps Directions API sayesinde rota ile ilgili:

***Toplam Mesafe
***Tahmini Süre
***Gerçek Zamanlı Trafik Durumu

***Kuş Uçuşu ile Yol Mesafesi Arasındaki Fark gibi bilgilerin de sunulması sağlandı.
Veri Saklama:SQLite ile Temel Adres Kaydı
Projede veri saklama ihtiyacı minimal seviyede tutuldu. Sadece kullanıcıların belirlediği başlangıç ve varış adreslerini kayıt altına almak yeterliydi. Bunun için Python ile geliştirdiğim küçük bir Flask uygulaması üzerinden SQLite veritabanına yazma işlemi gerçekleştirildi.
Bu yapı sayesinde, kullanıcıların daha önce girdiği adresler saklanabiliyor ve gerektiğinde tekrar kullanılabiliyor.
Projenin İşleyişi
- Kullanıcı, başlangıç ve varış adreslerini ister formdan ister harita üzerinden seçiyor.
- Google Maps API, adresleri koordinata çeviriyor.
- JavaScript üzerinde çalışan Nearest Neighbor algoritması rotayı hesaplıyor.
- Rota, harita üzerinde canlı olarak gösteriliyor; süre ve mesafe bilgileri kullanıcıya sunuluyor.
- Seçilen adresler backend’e gönderilerek SQLite veritabanında kaydediliyor.
- İsteyen kullanıcılar rotayı, mesafeleri ve süre bilgilerini bulunduran .txt uzantılı dosyalı sistemlerine indirebiliyor.
Deniz Aytaç
Konya Teknik Üniversitesi – Bilgisayar Mühendisliği Bölümü
denizaytac0202@gmail.com