matematik olarak çalıştığını şuradan görebileceğiniz teori. bu benim yazdığım basit bir av-avcı simülasyonu. nasıl çalıştığından bahsedersem evrim teorisi ile alakası da ortaya çıkacak.
-
simülasyonda av (yuvarlak canlılar), avcı (kare canlılar) ve bitki (küçük yeşil noktalar) olmak üzere üç farklı tür var. av hayvanları bitkilerle besleniyor, avcılar da av hayvanları ile. bitkiler pasif yaratıklar, herhangi bir öz nitelikleri yok, sadece enerji veriyorlar.
-
her canlının belirli öz nitelikleri var (attributes), örneğin renk, hız, görüş mesafesi, yağlanma oranı, güç, agresyon, savunma vs.. bazı öz nitelikler ise çeşitli durumlara karşı ne zaman tepki vereceklerini belirliyor örneğin (av için) avcı ne kadar yakındaysa kaçmalı, ne zaman çiftleşmeli, etrafta yiyecek kalmadığında ne zaman gezi (patrol) moduna geçmeli vs. (canlıların üzerlerine tıklayarak özelliklerini, yaşını, enerji seviyesini vs. görebilirsiniz.)
-
her canlının öz nitelikleri canlının dna’sı tarafından belirleniyor, ilk başta ortaya çıkan tüm canlıların dna’ları rastlantısal olarak belirleniyor.
-
canlılar çiftleştiklerinde dna’ları iki boğumdan üç parçaya ayrılıyor ve ebeveynler arasında gen çaprazlaması oluyor. böylece gen çeşitliliği sağlanıyor.
-
arada bir de bir gende rastlantısal olarak mutasyon gerçekleşiyor. örneğin görüş alanı 20 iken birdenbire 80’e çıkabiliyor ya da tam tersi.
-
her canlının bir modu var. bunlar uyku, avlanma, kaçma, yiyecek arama ve çiftleşme modları. her modu canlının etrafındaki kenar renklerinin değişmesinden anlayabilirsiniz.
uyku: gri avlanma: mavi kaçma (tehlike): kırmızı yiyecek arama: turuncu çiftleşme: pembe
- her canlı her saniye o anki moduna göre belirli miktarda enerji kaybediyor.
uyku: 1 birim avlanma: 2 birim kaçma (tehlike): 2 birim yiyecek arama: 3 birim çiftleşme: 2 birim
-
çok fazla yemek yedikleri zaman 100 enerji biriminden fazlasını depoluyorlar, bu da canlıları şişmanlatıyor.
-
şişmanlayan canlının hızı şişmanlık oranına göre düşüyor.
-
ortamdaki bitkiler sürekli olarak yenileniyor fakat yenilenme süreleri sabit değil, yani bazen kıtlık yaşanabilir.
-
avcı, ava saldırdığında turn based ufak bir savaş gerçekleşiyor, şans faktörü de dahil olmak üzere saldırı ve savunma katsayılarına göre av kazanıyor ya da kaybediyor (frp’ciler bu kısma aşinadır). yani illa avcı kazanacak diye bir şey yok, örneğin bir farenin bir bizon’a saldırdığını düşünün. eğer avcı kaybederse, kendisi ölüyor, avın sadece enerjisi düşüyor. böyle bir kavgada enerji, saldırı ve savunma katsayılarının tamamı birer değişken.
-
çiftleşmek için iki birey de 10 birim enerji harcıyor. her çitleşmeden mutlaka yeni birey doğmuyor.
-
avcı ve av popülasyonu sınırlı (çünkü böyle bir uygulama için sınırlı cpu harcayabiliyoruz), her çiftleşmeden yeni döl oluşmamasının nedeni bu.
-
avcı, avlanma moduna geçtiğinde görebildiği en yakındaki ava saldırıyor, ancak o sırada başka bir av da yakınlardan geçiyorsa ona doğru da bir miktar yöneliyor. işte linger rate (takılma oranı) öz niteliği de aslında bunu belirliyor. bu orana göre bazı avcılar seçim yapmakta zorlanıyor ve sürekli başka başka avların peşinden koşuyorlar, bu da onları çok yoruyor. (sürüye saldıran aslanların bir ava odaklandıklarını düşünebilirsiniz bu örnek için)
-
canlının hangi moda gireceğini eşik değerleri (thresholds) belirliyor. örneğin açlık sınırı 53 ise ve canlının enerjisi 53 veya daha az ise avlanma moduna giriyor. çiftleşme için de aynısı geçerli, ancak modlar arasında hiyerarşi var. aç canlı çiftleşme moduna geçmiyor (eşik değerini aşmış olsa bile).
-
her canlının bir aile kodu var, renkleri değişik bile olsa aynı aileden olan bireyleri bu koddan takip edebilirsiniz.
-
bazen kıtlık oluyor ve önce avlar, sonra da avcılar yok oluyor. aslında burada simülasyonumuz sonlanıyor ama bunun önüne geçmek için sürekli olarak belirli aralıklarda popülasyon kontrolü yapılıyor ve azalan nüfusun yerini doldurmak için ratgele canlılar ortaya çıkıyor, bunların herhangi bir soyu yok, türlerinin ilk örneğiler.
gelelim programlama tekniğine. bu yapıda yapay sinir ağı (neural networks) kullanmadım, yani canlıların birer zekası vardır diyemeyiz, sadece genetik algoritma ile çiftleşme ve mutasyon uyguladım. zaten vadesi dolan bireylerin ölmesi ile de en güçlü bireyin hayatta kalması kendiliğinden sağlanmış oldu (survival of the fittest). yani bir fitness function ortada yok. baya kendiliklerinden ölüyorlar.
gözlemlerim:
-
normalde böyle bir durumda süper bir türün ortaya çıkmasını ve o türün simülasyon çalıştıkça varolmasını beklersiniz. örneğin çok hızlı, çok uzağı görebilen, çok güçlü bir avcı karşısında hiç bir şey duramaz değil mi? zaten duramıyor. duramadıkları için de tüm avlar yok oluyor. yani avcının çok iyi bir avcı olması kendi türü için çok da iyi bir durum değil. nitekim ihtiyacı olmadığı halde aşırı avlanma, türün kendi sonunu da getiriyor, çünkü kıtlık yaşanıyor. ben açıkcası böyle bir sonuç beklemiyordum, ancak bu simülasyonu ne zaman izlesem sonuç hep aynı, bir tür inanılmaz bir avcıya dönüşüyor, önüne çıkanı yokediyor ve ortada av kalmadığında hepsi patrol moduna geçiyor ve bir bir yokoluyorlar. bu da bana insan türünü anımsatıyor.
-
arada çok başarılı av canlıları ortaya çıkıyor. ben bunları bizonlara benzetiyorum çünkü çok güçlüler. bu tür görece olarak bana kalırsa en başarılı tür. çok hızlı olmalarına gerek yok. çok agresifler, dolayısıyla kavgada genellikle önce saldıran taraf oluyorlar. eğer o anda enerjileri de yüksek ise genelde avcıyı bir seferde öldürüyorlar. ancak bu türün de üstesinden gelenler oluyor elbette.
-
av hayvanları beslenirlerken eğer bitkilerin yakınında bir avcı varsa oraya fazla yaklaşmıyorlar (bunu etrafı kırmızı titreyen daireler olarak görebilirsiniz), bazılarının bu uzak durma (korku diyelim) katsayıları düşük olduğundan pek sallamıyorlar, aslanların etrafında aldırmadan beslenen porsuk gibi düşünebiliriz. çok çekingen olmak (kuşlar gibi) her zaman iyi değil, bazen cesaretini toplayıp otlamak gerekiyor, aksi halde açlıktan ölüyorlar. bu aynı zamanda nehirde timsah olduğunu bile bile su içmeye giden antilopları andırıyor.
-
versiyonların birinde çiftleşme katsayısına minimum bir sınır koymamıştım, bazı türlerin sınırı 1 olabiliyordu yani, bu durumda o tür inanılmaz çoğalıyordu (bakteriler gibi) ve birkaç saniye içinde baskın tür oluyorlardı, benim de sınırlı cpu gücüm olduğundan buna bir sınır koymak zorunda kaldım, yoksa ajan smith gibi çoğalıp duruyorlardı.
-
benim en hoşuma giden an bir anda bir kaç farklı türün oluştuğunu görmek. örneğin 5 mavi avcı + 10 yeşil avcı, 10 sarı av + 7 mor av + 8 kahverengi av. bu aslında habitatta bir denge oluştuğunun göstergesi. buradaki avcılar aşırı avlanmıyorlar demek. avlar ise kendi aralarında bir çeşitlilik sağlamışlar, onlar da aşırı otlanmıyorlar demek. yani kaos yok, avlanma oranları belli, dolayısıyla farklı türlerin aynı anda stabil olarak varolması mümkün oluyor. tabii bir kıtlık gelip bütün dengeleri alt üst edene kadar.
yazılımda varolmayan bazı şeylerden de bahsedeyim:
-
avcılar sosyal olamazlar, yani birlikte avlanma diye bir şey yok çünkü kendi farkındalıkları ya da tür farkındalıkları yok. ancak bazen buna benzer şeyler gözlenebiliyor, aynı anda aynı avın peşinde koşan birkaç avcı görebilirsiniz. ben böyle bir şey programlamadım.
-
av canlıları bir arada toplanmaya çalışamazlar yine yukarıdaki nedenden ötürü. bunu gözlemlerseniz yine: ben böyle bir şey programlamadım.
-
ebeveynler bakım üstlenmiyor, ırk/aile seçimi (kin selection) yapmıyorlar, birbirlerine destek olmak diye bir şey yok, en azından ben böyle bir şey yazmadım.
-
mutasyon sadece çiftleşmelerde gerçekleşiyor, varolan canlılar üzerinde mutasyon bu simülasyonda yok.
-
her ne kadar yukarıda aslanlardan, kuşlardan bahsettiysem de, simülasyondaki canlıların kapasiteleri belli ve çok çok sınırlı. ne kadar süper hareketler yapıyorlar gibi görünseler de ondan ötesine evrilemezler, kendi öz niteliklerine yeni nitelikler katamazlar. örneğin sonar ya da koku duyusu geliştiremezler. neden? çünkü çok sınırlı bir işlem gücümüz var. yani korkmayın, bilgisayardan çıkıp sizi yemezler. fakat bu demek değildir ki böyle bir şey asla yapılamaz, unutmayın ki tüm bu simülasyon bizlerin basit bilgisayarlarında bir web tarayıcısı üzerinden gerçekleşiyor. eğer bir network yaratsaydık ve simülasyonu daha temel kavramlar üzerine oturtsaydık, o zaman bizleri çok daha fazla şaşırtacak evrenler yaratabilirdik. bu da bana hep big bang’i hatırlatıyor. öyle bir temel kod yaz ki, bu koddan sonsuz büyük bir evren ortaya çıksın, kendi fizik kurallarını belirlesin ve bu kurallar çerçevesinde ortaya müthiş güzellikte bir dolu festival çıksın.
gelelim olayın düşünsel boyutuna. yukarıdaki deneye bakarak kesin olarak söyleyebileceğimiz tek şey var: “evrim teorisi çalışıyor”. ancak bu veri ile ne yapabilirsiniz? sanırım şunlar söylenebilir:
-
gördüğünüz gibi bu ortamın da bir tasarımcısı var, öyleyse bizim yaşadığımız evrenin de bir tasarımcısı olması gerekir.
-
gördüğünüz gibi hayat çok basit koşullarda tamamen rastlantısal olarak ortaya çıktığı başlangıç koşullarını değiştirebilir ve kendini geliştirebilir. dolayısıyla bir tasarımcıya ihtiyaç yok.
-
gördüğünüz gibi bizim evrenimizin de bir tasarımcısı var ancak bu tasarımcı bizim düşündüğümüzden çok farklı, sadece kendi eğlencesi için bile bu evreni yaratmış olabilir.
vs. nitekim hepimiz aynı fiziksel dünyaya bakarak bambaşka şeyler söylüyoruz, bu basit simülasyona da bakarak aynı şeyleri söyleyebiliriz. ancak söyleyemeyeceğimiz tek şey var “evrim teorisi diye bir şey yoktur”.
bu simülasyonun aslında herhangi bir amacı yok, bir problemi çözmeye falan da çalışmıyor. bu simülasyonu herhangi bir şeyi doğrulamak ya da yanlışlamak için de yapmadım. sadece duyduğum, okuduğum bazı programlama tekniklerinin gerçekten çalışıp çalışmadığını görmek için yaptım ve çalıştığını kendi gözlerimle gördüm. bu simülasyondan sonra da aklıma bir sürü farklı şey geldi, kafamda yaşama dair bir sürü soru cevaplandı ve açıkca söylemek gerekirse ufkum iki katına çıktı. bence ideolojilerden bağımsız olarak bilginin insan üzerinde bu türlü bir etkisinin olması kadar güzel bir şey olamaz. vaktim olduğu zaman çok daha genel kuralları olan ve kendi öz niteliklerini geliştirebilecek bir yapı üzerinde çalışmaya başlayacağım, eminim bu sefer ufkum çok daha fazla genişleyecek.
diğer bir takım notlar:
-
sizin simülasyonunuz server ile sürekli bağlantı halinde ve sizin dünyanızı sürekli olarak saklıyor. ancak başka birisi de aynı anda izliyorsa o da sizin dünyanızın üzerine yazıyor demektir. sayfayı yeni açtığınızda ise en son ne kaydedilmişse server’da ekranınıza o yükleniyor.
-
benim gördüğüm en yaşlı bireyler yaklaşık 300-400 yaşında oluyor ve genelde av canlıları daha çok yaşıyorlar gibi (bunun verisini tutmuyorum)
-
pure javascript ile yazdım, render için svg canvas kullandım. webgl kullanmak aslında en akıllıcası, yeni bir versiyona başlarsam webgl kullanacağım, böylece çok daha fazla bireyi bir anda barındırabileceğiz.
eğer enteresan şeylere tanık olursanız lütfen bana da haber verin.