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.

  1. 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.

  2. 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.)

  3. 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.

  4. 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.

  5. 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.

  6. 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

  1. 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

  1. çok fazla yemek yedikleri zaman 100 enerji biriminden fazlasını depoluyorlar, bu da canlıları şişmanlatıyor.

  2. şişmanlayan canlının hızı şişmanlık oranına göre düşüyor.

  3. ortamdaki bitkiler sürekli olarak yenileniyor fakat yenilenme süreleri sabit değil, yani bazen kıtlık yaşanabilir.

  4. 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.

  5. çiftleşmek için iki birey de 10 birim enerji harcıyor. her çitleşmeden mutlaka yeni birey doğmuyor.

  6. 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.

  7. 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)

  8. 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).

  9. her canlının bir aile kodu var, renkleri değişik bile olsa aynı aileden olan bireyleri bu koddan takip edebilirsiniz.

  10. 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:

yazılımda varolmayan bazı şeylerden de bahsedeyim:

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:

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:

eğer enteresan şeylere tanık olursanız lütfen bana da haber verin.