Bu proje, bir metro ağında iki istasyon arasındaki en az aktarmalı ve en hızlı rotayı bulan bir simülasyon uygulamasıdır. Proje, graf veri yapısını kullanarak metro ağını modellemekte ve BFS ile A* algoritmalarını kullanarak rota optimizasyonu yapmaktadır.
- Python 3: Projenin ana programlama dili.
- collections:
defaultdictvedequekullanılarak sırasıyla hatlar için varsayılan liste ve BFS için kuyruk yapısı oluşturuldu. - heapq: A* algoritması için öncelik kuyruğu (priority queue) implementasyonu.
- typing: Tip anotasyonları için kullanıldı (örneğin,
Dict,List,Optional).
- Amaç: En az aktarmalı rotayı bulmak.
- Çalışma Mantığı: BFS (Breadth-First Search), graf üzerinde en kısa yolu bulur. Her istasyonu ziyaret ederken, komşularını bir kuyruk yapısına ekler ve hedef istasyona ulaşıldığında rotayı döndürür.
- Neden Kullanıldı?: BFS, graf üzerinde en kısa yolu (aktarma sayısı açısından) garanti eder.
- Amaç: En hızlı rotayı bulmak.
- Çalışma Mantığı: A* algoritması, bir öncelik kuyruğu kullanarak toplam süreyi minimize eder. Her adımda, toplam süreyi hesaplayarak en düşük süreye sahip rotayı seçer.
- Neden Kullanıldı?: A*, en hızlı rotayı bulmak için optimize edilmiş bir algoritmadır. Heuristic bir fonksiyon eklenebilir, ancak bu projede basit bir Dijkstra benzeri yaklaşım yeterli oldu.
Proje, üç test senaryosu ile test edilmiştir:
- AŞTİ'den OSB'ye:
- En az aktarmalı rota: AŞTİ -> Kızılay -> Kızılay -> Ulus -> Demetevler -> OSB
- En hızlı rota: Aynı rota, toplam 25 dakika.
- Batıkent'ten Keçiören'e:
- En az aktarmalı rota: Batıkent -> Demetevler -> Gar -> Keçiören
- En hızlı rota: Aynı rota, toplam 21 dakika.
- Keçiören'den AŞTİ'ye:
- En az aktarmalı rota: Keçiören -> Gar -> Gar -> Sıhhiye -> Kızılay -> AŞTİ
- En hızlı rota: Aynı rota, toplam 19 dakika.
- Gerçek bir metro ağını (örneğin, İstanbul Metrosu) kullanarak daha büyük bir graf üzerinde test etme.
- Rotaları görselleştirmek için bir grafik arayüz (örneğin,
matplotlibveyanetworkx) ekleme. - A* algoritması için bir heuristic fonksiyonu (örneğin, iki istasyon arasındaki tahmini süre) ekleyerek performansı artırma.
- Aktarma sürelerini dinamik olarak hesaplama (örneğin, hatlar arası aktarma sürelerini farklı değerlerle modelleme).
- Python 3 yüklü olduğundan emin olun.
- Proje dosyasını (
KadirCanakci_MetroSimulation.py) indirin. - Terminalde dosyayı çalıştırın: python KadirCanakci_MetroSimulation.py