Ben bir kurs projesi için bir karınca kolonisi simülatörü üzerinde çalışan bir öğrenciyim. Bunun için algoritma (açıkça) bir karınca kolonisi algoritmasıdır. Algoritmanın çeşitli biçimleri olduğunu biliyorum, ancak bunların hepsi bizim için çok matematiksel olarak ayrıntılıydı, bu yüzden sahip olduğumuz bir yaklaşımı aldık:
- Bir karınca kolonide doğar ve koloniyi sürdürebilmek için bir kaynaktan yiyecek toplaması gerekir.
- Bütün karıncalar benzer.
- Karınca hareket ettiği alan 1000x1000 ızgaradır, bu nedenle her ızgara noktası bir karıncanın işgal etmesi için geçerli bir nokta görevi görür. Şimdi, karşılaştığım tüm algoritmalar köşeleri ve kenarları ayrı ayrı ele almayı içeriyor ama karıncaların hareketini sadece dört yöne (yukarı, aşağı, sol, sağ) kısıtladığımız için sanırım feromonu nereye koyduğumuz önemli değil.
- Yukarıda belirtilen ızgara noktaları feromonu depolar.
- Bir karınca feromonu sadece yiyecek taşıyorsa düşürür.
- Bir pozisyondaki (i, j) bir karınca için, bitişik dört düğüm üzerindeki feromon miktarlarını basit bir olasılık formülünde dikkate alarak bir sonraki adımda nereye hareket edileceğine karar verir, yani bir düğüme seyahat etme olasılığı (özellikle bitişik düğümdeki feromon miktarı) / (bitişik 4 düğümdeki feromon miktarlarının toplamı).
- Bir karınca, geldiği konuma geri dönemez. Bunu ancak yiyeceği olan bir yerde veya kolonisinde ise yapabilir.
Şimdi benim endişem (ve programımızda gerçekte ne oluyor), FIRST bir karınca yiyecek olan ve onu alan bir konuma ulaştığında, algoritmamızın çalışmasıyla, herhangi bir yere hareket edebileceğidir! Çünkü sadece bir feromon izi bırakacak, daha önce değil ve bir kez yiyecek olduğunda ve ilk karınca olduğu için mevcut bir iz yok.
Eğer karınca herhangi bir yere gidebiliyorsa, gıda kaynağına ulaştıktan sonra ulaşan karıncalar da çoğunlukla onu takip etme eğilimindedirler. EĞER koloniye doğru ilerlemiyorsa. Bu, tüm algoritmanın amacını yener.
Yani sorularım
- Yukarıdaki endişe geçerli mi? Hayır ise neden? Evetse, bununla nasıl başa çıkılır?
- Algoritmanın gerçekten çalışması için temel anlayışımızda bazı değişiklikler yapmamız gerekiyor mu?
- Benim gibi yeni başlayanların bu durumda kaçırabileceği diğer ince ama önemli şeyler nelerdir?