Teknik beklentiler

İnsanların teknik sistemlerden beklentileri beni her zaman şaşırtmayı başarıyor. Sanırım teknik deyince herkesin kafasında bir terminatör imgesi oluşuyor. Roketatarla da vursan vıjt vıjt diye çalışmaya devam etmesi gereken bir yazıcı nasıl olur da durup dururken bozulur? On yıldır sorunsuz çalışıyordu oysaki. “İnsanlar pat diye düşüp ölünce bu kadar şaşırmıyorsun da, şuncacık bir yazıcının büyük ihtimalle eceliyle ölmesi mi bütün sorunun?” cevabını verdiğimden beri Jürgen (72) bu konuda bir daha hiçbir şey sormadı bana. Korktuğu da başına gelmedi henüz, hala yaşıyor ve briç oynamaktan zevk alıyor.

Aslında teknik elemanların beklentileri de çok farklı değil. Geçen yıllarda makinelerde sabit disklerde çıkan problemler yüzünden “Neden bu kadar çok sabit disk değiştirmemiz gerekiyor ve buna karşı ne yapılabilir?” konulu bir toplantıda çalışanlardan bir sözü aldı ve “İstatistiklere göre her yıl şu oranda sabit sürücü hatası beklenir ve bizim hata oranımız da bu sınırlarda. Yani her şey normal. Bu sayıları azaltmak için de daha az makine satmayı deneyebiliriz.” dedi. Bu açıklama üzerine toplantı bitmişti.

Yazılım alanında karşılaştığım eğlenceli bir olay da hata mesajlarına inanmama eğilimi. Hata mesajlarını okumadan geçme değil bahsettiğim, gerçekten okuyoruz, hata mesajının ne demek istediğini anlıyoruz ve yine de hata mesajının hatalı olduğuna inanıyoruz. Sistemi satın alacak müşterinin inanmasını beklediğimiz hata mesajlarına biz inanmak istemiyoruz. Tabii ki, eğer hata tespit rutini hatalıysa hata mesajı o durumda yanlış olabilir ama bu o kadar sık karşılaşılan bir şey değildir, çünkü genelde bu tespit çok basit bir testten ibarettir. Bence tam da bu yüzden hatanın hata tespitinde olduğuna inanıyoruz, ya da inanmak istiyoruz, çünkü o zaman sorunu bulmak daha kolay olacak. Aksine hata mesajı haklıysa daha büyük bir alanda daha çeşitli rutinlerin test edilmesi gerekecek, yani daha çok iş. Tabii ki bu beklentiler de istatistikler tarafından cezalandırılır ve umduğumuz daha az iş pek gerçekleşmez.

Evet, yüksek teknoloji ürünlerini yapanlar bile bu kadar akıl dışı insanlarken, bu ürünleri satın alanlardan da daha fazlasını beklememek gerekir heralde.

Böyle bir şey olabilir mi yahu?

Annem bir gün bana yıllar önce köyde geçen şu olayı anlattı. Burada, insanların açık adını vermiyorum ama yeterince açıklar aslında.

C. ağlayarak eve gelir. Bu sırada da şöyle bağırmaktadır: “M. ağabey, N. beni ağactan zıçti.”

Evet, hikaye de bu kadardı. Saçma olduğu kadar beklenen de bir şeydi, bir çocuğun üzerine ağaçtan sıçmak gelse gelse N.’nin aklına gelirdi zaten.

Bu olaya bir süre güldükten sonra tabii ki bu hikayeyi diğer kaynaklarla karşılaştırmaya karar verdim. Sorduğum kuzenlerle konuşmalar hep şöyle geçiyordu:

+ Abi, şu hikayeyi biliyor musun? C. koşarak eve gelir ve “N. beni ağactan zıçti” diye bağırır.
– Bilmem mi? Ama C. değil M. söylemiş onu. Babam anlatmıştı.

Başka bir kuzene sorduğumda o da olayı onaylıyor ama C. yerine M. değil, A. diyordu mesela ama diğer bütün bilinmeyenlerde hemfikirdik. Bu absürt hikaye gitgide daha da garip olmaya başlamıştı. Sordukça çözümsüzlük de büyüyordu.

Bir gün babama da sorayım bari dedim. Olayı anlattım, kuzenlerden aldığım bilgileri de söyledim. Böyle saçma ve örneği zor bulunur bir olayın kişileri nasıl bu kadar karıştırılabilir ya da unutulabilir ki diye sordum. Babamın cevabı ile çözümün ne kadar basit olduğunu anladım:

Oğlum, hikayedeki isimler hep farklı çünkü bütün anlatılan şekiller doğru. N. o gün hepimizi ağacın altına toplamıştı. Güya bir şey gösterecekti. Sonra da üzerimize sıçtı.”

Evet, sonunda hikayeyi ikinci ağızların birine teyit ettirebilmiştim. Artık rahat rahat gülebilirim.

Cevabın kontrolü

Çocuklar birinci dereceden tek bilinmeyenli denklemleri öğreniyorlar. Daha doğrusu tekrar ediyorlar. Ne de olsa geçen yılın konusuydu. Örnek olarak

\(3\cdot{x} + 5 = 11 \)

eşitliğine bakalım. Hangi \(x\) değerlerinin bu eşitliği sağladığını bulmaya çalışıyoruz. Bu denklemlerin nasıl çözüldüğünden bahsetmeyeceğim ama. Bu seferki sorunumuz farklıydı. Sınavlarda denklemi çözün ve sonucu kontrol edin şeklinde sorular soruluyordu artık. Bu soru türünü seviyorum. Tabii ki çocuklar kontrol için zaman harcamak zorunda olduklarından bu adımı hiç sevmiyorlar. Gerçek hayattaki, projelerdeki hesapların bu kadar kısa olmadığını, bir hatayı ne kadar geç fark ederlerse onu düzeltmenin o kadar masraflı olacağı gibi tecrübeleri bu yaştaki çocuklara anlatma çabalarım da bir sonuç vermeyince kolaya kaçtım ve sonucu kontrol etmezseniz hoca puan kırar diye kestirip attım.

Çocuklar tabii ki biraz konunun yeni olmasından biraz da tembellikten bu kontrolü nasıl yapacaklarını sordular. “Çok kolay, bulduğunuz sonucu \(x\) değişkeninin yerine koyacaksınız ve eşitlik sağlanıyor mu diye bakacaksınız” dedim. Ve durdum. Bu kadar kolay değildi tabii. “Neyse sırayla gidelim bari” diye düşündüm. Soruların çoğu yukarıdaki örnekteki gibi tek çözümlü olacağından önce bu yöntemi ele aldık.

\(3\cdot{x} + 5 = 11 \)

Bu eşitliği çözersek \(S=\left\{ {2}\right\} \) çözüm kümesini buluruz. Bu kümenin tek elemanı 2 sayısıdır. Şimdi bu çözümü yerine koyduğumuzda eşitlik sağlanıyorsa doğru yapmışızdır.

\(3\cdot{2} + 5 = 6 + 5 = 11 \)

Demek ki çözümümüz doğruymuş.

Bu kontrolü çocuklar anladı ama benim içime sinmedi aslında. Büyük resme uymuyordu ama bir yerde kesmem gerekiyordu. Çocuklar bu denklemlerin bir çözümünün olduğunu varsayıyordu ve bu nedenle bu yöntem çok yeterli ve mantıklı geliyordu. Ben de bu aşamada kafamdaki asıl sorunlara girmekten kaçamayacağımı düşünüp devam ettim.

“Bu denklemlerin çözüm kümesinde bazen birden fazla eleman olur. Doğruyu söylemek gerekirse böyle durumda sonsuz tane çözüm vardır. Hatta bütün sayılar bu eşitliği sağlar.”

Tabii ki bunu nasıl anlayacaklarını sordular. “Eğlence (!) başlıyor” dedim.

“Örneğin şu denklemi alalım.”

\(3\cdot{x} + 5 =3\cdot{x} + 5 \)

“Çözün bakalım bu denklemi.”

Bir süre sonra \(0=0 \) sonucuna ulaştılar. Bu sonucun ne demek olduğunu sorduğumda da her türlü cevabı aldım.

“Çözüm 0’dır”

“Çözüm yoktur”

“Soru yanlış”

“Bütün sayılar çözümdür”

Bu karmaşayı duyunca önce sorumu daha farklı sormaya çalıştım. “Bu sonuç doğru mu yanlış mı?”. Tabii ki doğru dediler. “Peki son eşitlikte değişken nerede?”. Cevap tabii ki “yok” oldu. “Yani bu eşitlik değişken ne olursa olsun doğru”. Bu mantık yürütmeden çözüm kümesinin bütün sayılardan oluşmasına geçiş kolay olmadı. Belki yardımı olur diye denklemi çözerken son adım olarak aşağıdaki sonucu gösterdim.

\(x=x \)

Bir değişken her zaman kendine eşit olacağından çözüm kümesinin bütün sayıları içereceğini görmelerini umuyordum ama yine olmadı. Belki zamanla oturur diyerek bunu kural olarak anlattım ve asıl soruna geldim. Peki bu çözüm nasıl kontrol edilir?

Bütün sayıların eşitliği sağladığını bulduğumuza göre herhangi birini alıp denklemde yerine koyabiliriz. Peki hangisini almalı? Önemli bir soru, çünkü çocuklara anlatması da kolay olmalı. “Hangisini alırsan al” diyebilirdim ama ya çocuk 234893176 sayısını almaya kalkarsa? “En iyisi 0 sayısını al” dedim tabii ki.

Peki tek bir sayı almak yeterli mi? Ya denklemin tek bir çözümü vardı ve biz tesadüfen o çözümü denediysek? Bu nedenle çocuklara bu tür bir çözüm çıktığında iki değişik sayı ile denemelerini söyledim. Mesela 0 ve 1 ile. Eğer iki sayı ile de eşitlik sağlanıyorsa bu eşitlik her sayı ile sağlanacaktır.

Bu aşamayı da geçtim diyerek bir sonraki olasılığa geldim. Eğer denklemimizin hiçbir çözümü yoksa ne yapacağız? Daha da önemlisi denklemin hiçbir çözümünün olmadığını çocuklar nasıl anlayacak? Tabii ki çözerken yanlış bir sonuca, bir çelişkiye ulaşarak anlayacaklar. Bunun için de örnekler verdim:

\(1=2 \)

“Bu doğru mu yanlış mı?” diye sorduğumda neyse ki yanlıştır dediler. “İşte bu durumda bu denklemin çözümü yoktur” dedim. Sonuçta bulduğumuz şey yanlış bir ifade ve değişkenden de bağımsız. Demek ki değişkenin değeri ne olursa olsun bu eşitlik doğru olamaz. Tabii ki çocuklar bu ifadelere karşı da direnç gösterdi. Başka örnekler de vermek zorunda kaldım, çünkü çözüm sırasında çocuğun hangi sonuca ulaşacağını kestirmek kolay iş değil. Ayrıca ne kadar çok şey görürse o kadar iyi ve daha az sürpriz olur diye düşündüm.

\(x=x + 1 \)

“Bu da yanlış bir ifade. Bir sayı kendisinden daha büyük bir sayıya eşit olamaz”. Bunu da anladılar.

\(x=2\cdot{x} \)

“Bu ifade yanlış değil ama. Bunun çözümü vardır ve 0’dır. Bu tür şeylere dikkat edin”

Bu örnekleri verirken bir sonraki sorunun cevabını da düşünmeye çalışıyordum. Eğer denklemi çözerken sonuç olarak yanlış bir ifadeye ulaşırsak, yani denklemin çözümünün olmadığına inanıyorsak, bu sonucu nasıl kontrol ederiz? Hiçbir sayının bu denklemi sağlamadığını göstermek kolay bir iş değil. Sonsuz tane sayı denemek öğretici olabilir ama mantıklı bir hareket olmayacaktır. Peki kaç tane deneme gerekecek? İyice yorulduğumdan ve bunun iyi bir çözümünü bulamadığımdan “bir tane sayı deneseniz yeter” dedim. “En azından soruda istenen şeyi yapmış olursunuz, işe yaramasa da.”

Tam masadan kalkmak üzereydim ki çocuklardan günün sorusu geldi. Peki ya kontrolde yanlış bir sonuç çıkarsa? Yani eşitliği sağlaması beklenen sayı eşitliği sağlamadıysa, ya da eşitliğin sağlanmayacağını düşündüğümüz sayı birden eşitliği sağladıysa ne yapacağız? Kontrolü yeniden mi yapmak lazım?

Bu durumda hata ya çözümdedir ya da kontroldedir (ya da ikisinde birden). Hangi aşamada hata yapılmış olma ihtimali daha yüksekse, o işlem yeniden yapılmalıdır. Buna kendilerinin karar vermelerini söyledim. Ben genelde önce kontrolü tekrar yaparım, çünkü kontrolün bana yanlış yaptın demesine ilk anda pek inanmam. Psikolojik bir durum heralde. İkinci kez aynı sürprizle karşılaşırsam çözümümü tekrarlarım. Bunları çocuklara anlattım, umarım onlar da zamanla kendilerine uygun bir yöntemi benimserler.

Çocuklarla ders bitti sonra ama düşünmeler bitmedi tabii ki. Mesela, eğer denklemin tek çözümü var şeklinde bir sonuç bulduysak kontrolde sadece bu sayıyı kullanmak yeterli midir?

Kontrol kolayca yapılabiliyorsa bir başka sayı daha kontrol etmek iyi olabilir. Böylece bazı ihtimalleri yakalayabiliriz. Çözümü yanlış yaptıysak ve çözüm kümesi bütün sayıları içeriyorsa bu fazladan kontrolle bir terslik olduğunu bulabiliriz.

Tabii yukarıda çeşitli durumlarda önerdiğim fazladan kontroller, kontrolün kolay ve güvenilir yapıldığı durumlarda işe yarayacaktır. Eğer kontrol de zor bir işlemse (yani hata ihtimali yüksek ya da masraflı ise) fazladan adım sadece başarı şansını azaltacaktır.

Şahinler ve Güvercinler

Evrimsel oyunlarda programladığım ilk simulasyon bu oyun. Bu oyun John Maynard Smith’in de kitabında (Evolution and the Theory of Games) ele aldığı ilk örnek. Bu örneğe göre populasyonda iki tür strateji var.

  • Şahin: Kendisi yaralanana kadar ya da rakip kaçana kadar mücadeleyi kızıştıran bir strateji.
  • Güvercin: Rakip mücadeleyi kızıştırdığı an kaçan bir strateji.

Stratejiden kastedilen şey de oldukça genel bir özellik. Fenotip de olabilir, örneğin mavi göz ya da siyah göz gibi. Oyun için önemli olan bu özelliğin bir sonraki nesle aktarılması ve karşılaşmadan sonra üreme sıklığını etkilemesi.

Populasyondaki bireyler ikişer ikişer birbirleriyle ortak kaynaklar için mücadele edecekler. Bu mücadelede seçtikleri (daha doğrusu kalıtımsal olarak aldıkları) stratejileri uygulayacaklar. Mücadeleden sonra da uygunluk değerleri oyun ekranındaki tablodaki değerlere göre değişecek (ya da aynı kalacak). Bunu daha çok kaynak elde etmek ya da kaynak kaybetmek olarak düşünebiliriz. Örneğin daha çok yiyecek, ya da alan için mücadele ediliyor olabilir. Bütün mücadeleler bittiğinde bireyler uygunluk değerleri oranınca (ya da elde ettikleri kaynaklar) üreyebilecekler. Bu oyunda ortamdaki toplam kaynağın sınırlı olduğunu var sayarak her nesilde populasyon büyüklüğünü sabit tuttum. Bunu yaparken de bir sonraki nesilde sadece yeni doğan çocukları aldım, yani ebeveynler bir sonraki nesle kalmıyorlar.

Bu simülasyonda üremelerin eşeysiz yapıldığını varsayacağız. Yani şahin stratejisine sahip bireylerin çocukları da şahin stratejisine sahip olacak, güvercin stratejisine sahip bireylerin çocukları da yine güvercin stratejisine.

Her bireyin çocuk sayısını belirlemek için de şöyle basit bir algoritma kullandım. Bireyleri uygunluk değerlerine göre sıraya dizdim. Ortalama uygunluk değerini hesapladım. Sonra uygunluk değeri bu ortalamadan yüksek her birey bir çocuk üretti. Her çocuk üreten bireyin uygunluk değerini de ortalama kadar azalttım.

Örnek:

Elimizde aşağıdaki tablodaki gibi 4 birey olsun. Her birinin uygunluk değerleri de tabloda verildiği gibi olsun.

[table id=1 /]

Önce bireyleri en yüksek uygunluktan en düşüğe doğru dizelim.

[table id=2 /]

Şimdi ortalama uygunluk değerini bulmak için uygunluk değerlerini toplayıp birey sayısına bölelim.

\(3+4+4+5=16 \)

\(16/4=4 \)

Şimdi de aşağıdaki tabloda ilk tur sonunda olacak çocukları görelim.

[table id=3 /]

Henüz 4 adet çocuğa ulaşamadığımızdan aynı adımı tekrarlayacağız fakat bütün bireylerin yeni uygunluk değerleri ortalamadan küçük olduğundan daha farklı bir adım uygulayacağız. Toplam çocuk sayısı 4 olana kadar en yüksek bireyden başlayarak en düşüğe kadar sırayla birer çocuk ekleyelim.

[table id=4 /]

Böylece bu örnekte 2 numaralı birey bir sonraki nesle 2 çocuk aktarmış oldu. İki çocuk da 2 numaralı bireyle aynı stratejiyi kullanacak. 3 ve 4 numaralı bireyler bir sonraki nesilde birer çocukla temsil edilecek. 1 numaralı birey ise üreme şansına sahip olmayacak.

Oyun sayfasında önce başlangıçta populasyonda mevcut bulunan güvercin stratejisi ve şahin stratejisini uygulayan bireylerin sayısını giriyoruz. Daha sonra da oyunun kaç nesil süreceğini.

Bu girişlerden sonra stratejilere göre uygunluk değerlerini güncellemek kurallarının tanımlandığı matrisi görüyoruz. Matrisi aşağıdaki örneğe göre okuyabiliriz:

[table id=5 /]

Güvercin stratejisi güvercin stratejisiyle karşılaşırsa iki bireyin uygunluk değerleri de 1 puan artırılıyor.

Güvercin stratejisi şahin stratejisiyle karşılaşırsa güvercin stratejili bireyin uygunluk değeri değişmiyor, şahin stratejili bireyin uygunluk değeri 2 artıyor.

Şahin stratejili iki birey karşılaşırsa ikisinin uygunluk değerleri de 1 puan artırılıyor.

Bu bölümden sonra da bireylerin doğum anındaki uygunluk değerleri tanımlanıyor. Bu parametreler ışığında simülasyon rastgele karşılaşmalar olacak şekilde çalıştırılıyor. Her nesilden sonra aşağıdaki bilgi alanları güncelleniyor. Eğer animasyon seçeneği seçilmişse mücadele aşamaları ve bireylerdeki değişimler de görsel olarak izlenebiliyor.

Bu oyunun amacı basit sistemlerdeki evrimsel kararlı stratejileri incelemek. Evrimsel kararlı stratejilerden kasıt da şu: Acaba populasyonda herkes aynı stratejiye sahip olsa, bu populasyon başka bir stratejiye sahip bir mutant tarafından işgal edilebilir mi? Yani, örneğin dokuz güvercin stratejili bireyden oluşan bir gruba bir şahin stratejili birey katılırsa (ya da mutasyonla oluşursa) şahin stratejisi güvercin stratejisine karşı avantaj sağlayabilir mi?

Oyun sayfasındaki matrise uygun değerler girerek bunu deneyebiliriz. Kitapta da aşağıdaki gibi bir formüller verilmiş.

Populasyondaki şahin stratejisi oranını p ile gösterelim. Yani p, 0 ile 1 arasında bir sayı.

\(W(H) \) şahin stratejili bireyin uygunluk değerini göstersin.

\(W(D) \) güvercin stratejili bireyin uygunluk değerini göstersin.

\(E(D, D) \) Güvercin stratejili bireyin güvercin stratejisiyle karşılaştığında uygunluk değerindeki değişim miktarı. Uygunluk değeri matrisinde birinci satır ve birinci sütundaki değer.

\(E(H, D) \) Şahin stratejili bireyin güvercin stratejisiyle karşılaştığında uygunluk değerindeki değişim miktarı. Uygunluk değeri matrisinde ikinci satır ve birinci sütundaki değer.

\(E(D, H) \) Güvercin stratejili bireyin şahin stratejisiyle karşılaştığında uygunluk değerindeki değişim miktarı. Uygunluk değeri matrisinde birinci satır ve ikinci sütundaki değer.

\(E(H, H) \) Şahin stratejili bireyin şahin stratejisiyle karşılaştığında uygunluk değerindeki değişim miktarı. Uygunluk değeri matrisinde ikinci satır ve ikinci sütundaki değer.

Mücadeleye giren her bireyin yeni uygunluk değerinin ortalama olarak aşağıdaki formüllere göre değişmesi beklenmektedir.

\(W(H)=W_0+p\cdot{E(H,H)}+(1-p)\cdot{E(H,D)} \)

\(W(D)=W_0+p\cdot{E(D,H)}+(1-p)\cdot{E(D,D)} \)

Bu formüllerde \(W_0 \) bireylerin başlangıçtaki uygunluk değerleridir. Oyun sayfasında bu değer kullanıcı tarafından belirleniyor ve her yeni birey oyuna bu değerle başlıyor. Yani üremeden sonra çocuklar da bu sabit değere sahipler.

Bu formüller eşliğinde kitapta evrimsel kararlı strateji için verilen şartlar şöyle:

\(E(H,D)>E(D,D) \) veya \(E(H,D) = E(D,D)\wedge{E(H,H)>E(D,H)} \)

ise şahin stratejisi kararlı bir stratejidir. Güvercin stratejisinin evrimsel kararlı strateji olması için de

\(E(D,D)>E(H,D) \) veya \(E(D,D) = E(H,D)\wedge{E(D,H)>E(H,H)} \)

şartı gerekliymiş (Maynard Smith ve Pierce, 1973,”The logic of Animal Conflict”). Bu şartları çıkarmak çok da zor değil aslında ama o kadar detaya girmeyeceğim şimdi. Çıkarım için \(p \) değerinin \(1-p \) değerine göre çok daha küçük olduğunu görmek yeter.

Bu şartları şimdi simülasyonda deneyelim. Simülasyonu rahat takip edebilmek için toplam popülasyon büyüklüğünü 10 yapmak iyi olabilir. Bu durumda nesiller alt alta gösterilecek ve bütün bireyler ekrana sığacaktır.:

\(E(H,D)>E(D,D) \) : Şahin stratejinin güvercin stratejisine karşı kazancının güvercin stratejisinin güvercin stratejisine karşı kazancından büyük olduğu durumda şahin stratejisinin populasyonu işgal edeceği öngörülüyor.

[table id=6 /]

Bu değerlerle şahin stratejisi tek bir bireyle bile populasyonu işgal edebiliyor. İlk adımda bir şahin bir güvercinle karşılaşacaktır. Geri kalan karşılaşmalar da güvercinler arasında olacaktır. Eğer şahinin güvercine karşı avantajı güvercinlerin kendi aralarındaki avantajlara göre daha üstünse karşılaşmalar sonunda şahin bireyin uygunluk değeri diğer bütün güvercinlerden daha yüksek olacaktır. Bu durumda bir sonraki nesle iki şahin geçecektir. Şahinler birbirleriyle karşılaşmadığı sürece şahin nüfusu artışını sürdürecektir ve bir süre sonra bütün popülasyonu ele geçirecektir. Yukarıdaki tabloya göre şahinler birbiriyle karşılaşması ile güvercinlerin birbiriyle karşılaşması herkesin uygunluk değerini aynı miktarda artırdığından şahin nüfusu asla geri gitmeyecektir. Yani şahinler sürekli birbiriyle karşılaşsa bile nüfuslarını koruyacak ve güvercinlerle karşılaştıklarında da nüfusları artacaktır.

\(E(H,D) = E(D,D)\wedge{E(H,H)>E(D,H)} \) : Şahin stratejinin güvercin stratejisine karşı kazancının güvercin stratejisinin güvercin stratejisine karşı kazancına eşit olduğu ve şahin stratejisinin şahin stratejisine karşı kazancının güvercin stratejisinin şahin stratejisine karşı kazancından fazla olduğu durumda şahin stratejisinin populasyonu işgal edeceği öngörülüyor.

[table id=7 /]

Bu değerlerle şahin stratejisinin populasyonu ele geçirmesi için en az iki şahin gerekli. Aksi durumda populasyon olduğu gibi kalıyor çünkü burada avantaj sağlayan tek durum şahin stratejisiyle şahin stratejisinin karşılaşması ve bunun için de şahin stratejili iki bireye ihtiyaç var. İki şahinle başlandığında şahin nüfusu bu tabloya göre gerileyemiyor ama başlangıçta şahin nüfusu az olduğundan nüfus artışı da yavaş oluyor, çünkü şahinlerin birbiriyle karşılaşma ihtimali az. Şahin nüfusu arttıkça bu ihtimal artıyor ve nüfus artışı da hızlanıyor.

[table id=8 /]

Kitaptaki birinci şartı denerken aklıma bu ihtimal de geldi. Burada şahin stratejisi güvercin stratejisiyle karşılaştığında avantajlı oluyor. Eğer ilk popülasyonda şahin stratejisi az ise bu şahin stratejisi nüfusunu artıracaktır. Fakat aynı zamanda şahin stratejileri birbirleriyle karşılaştıklarında bundan zararlı çıkıyorlar. Güvercin stratejilerinin kendileriyle karşılaşmaları daha avantajlı. Burada hesap yapmadım ama denemelerime göre şahin stratejileri başlangıçta yok olma tehlikesiyle karşı karşıya. Örneğin popülasyonda sadece iki şahin stratejili birey varsa ve bu ikisi birbirleriyle karşılaşırlarsa bir sonraki nesilde hiç şahin stratejisi görülmeyecektir. Bu tehlikeler aşılınca ileride bir denge durumuna erişiliyor. Bunu daha rahat görebilmek için popülasyon büyüklüğünü yüksek (100) seçtim ki şahinlerin başlangıçta birbirleriyle karşılaşma ihtimalleri daha düşük olsun.

Oyun linki

Evrimsel oyunlar

Bir süre önce tekrarlı tutsak ikilemi oyunuyla ilgili yazılar okuduğumda bilinen en iyi çözümlerin de zaten insanların çoğunlukla kullandığı davranışlar olduğunu görüp şaşırmıştım. Demek ki evrim bu problemi bir şekilde çözmüş diye düşündüm. Bunun üzerine kafamda bu oyunları internet ortamında programlama projesi belirdi. Bu sayede hem oyunları anlayabilecek hem de HTML5 öğrenebilecektim. Bir taşla birden fazla kuş! Neden olmasın?

Tabii ki bu projeye hemen yukarıdaki oyunla başlamadım. John Maynard Smith’in Evolution and the Theory of Games adlı kitabını alıp okumaya başladım. Önce sadece oyunu programladım. Sonra anlaşılırlığı nasıl artırabilirim diye düşünmeye başladım. Sonra ara adımları göstermek için javascrip animasyon kütüphaneleri kullanmaya başladım. Bu aşamada bana oldukça yardımcı olan Ersin Başaran’a da teşekkürü borç bilirim.

İlerideki yazılarda hazır (?) olan simulasyonları açıklayıp nasıl kullanılacağını anlatacağım. Programların tamamen bir internet tarayıcı içinde çalışmasına uğraşıyorum. Çıkan sorunları ve değişiklik önerilerini bana bildirirseniz sevinirim.

Facebook testleri

Bu soruyu Tanya Khovanova’nın çok beğendiğim blog sayfasından aldım.

Her zamanki gibi hiçbir bilginiz olmayan bir konuda bir facebook testi yapıyorsunuz. Bu testte 30 tane doğru/yanlış leklinde soru var. Testi bitirince sadece kaç soruyu doğru yaptığınızı öğreniyorsunuz, doğru cevapları öğrenemiyorsunuz ama testi istediğiniz kadar tekrarlayabiliyorsunuz. Bütün soruları doğru cevaplamak için testi kaç kere çözmeniz yeterli?

Test 5 sorudan ya da 8 sorudan oluşsaydı kaç deneme yapmanız yeterli olurdu?

Biliyorum ama söylemem (çözüm)

Aslında Ayşe’nin Ahmet’i sihirli kelimeyi bildiği konusunda ikna etmesi oldukça kolay. İkisi beraber mağaraya girer, yol ayrımına kadar beraber giderler. Yol ayrımında Ahmet bekler, Ayşe yukarıdaki yoldan devam eder ve aşağıdaki yoldan Ahmet’in yanına geri döner. Ahmet sihirli kelimeyi öğrenememiştir ama artık Ayşe’nin bunu bildiğinden emin olabilir. Yalnız bu çözüm Ayşe’nin ikinci isteğini yerine getirmiyor, yani Ahmet’ten başka kimse Ayşe’nin bu sırrı bildiğini öğrenemesin. Eğer Ahmet bu çözümü gizlice videoya kaydederse videoyu gören herkes Ayşe’nin bu sırrı bildiğinden emin olacaktır. Ayşe’nin bunu hiçbir şekilde inkar etmesi mümkün olmayacaktır.

Çözüm için yukarıdaki denemeyi temel alalım ve bazı düzeltmeler yapalım. Demek ki Ahmet Ayşe’nin hangi yolu seçtiğini bilememeli (ya da görememeli, kaydedememeli) fakat Ayşe’nin hangi yoldan döndüğünü görmeli. O zaman Ayşe mağaraya yalnız girip bir yola gidecek ve geri dönmeden önce Ahmet de mağaraya girip yol ağzında bekleyecek. Sonra Ayşe Ahmet’in yanına gelecek. Ayşe böyle bir çözümde hep geldiği yoldan geri dönebilir, Ahmet sonuçta Ayşe’nin nereden gittiğini bilmiyor. Bu durumda Ayşe Ahmet’i ikna edemez.

Bunu düzeltmek için Ahmet yol ağzına geldiğinde Ayşe’ye yukarıdan mı aşağıdan mı gelmesi gerektiğini bağırsın. Ayşe de dönüşte söylenen yoldan gelsin. Eğer Ayşe giderken zaten bu yolu seçmişse dönerken kapıdan geçmesine gerek yok, yani yüzde elli ihtimalle sihirli kelimeyi kullanmasına gerek olmayacak. Böylece Ahmet sadece Ayşe’nin bu sihirli kelimeyi bildiğinden yüzde elli ihtimalle emin olabilir. Bu kadar bilgiden ikna olacak milyonlarca insan olmasına rağmen Ahmet böyle kolay pes etmeyecektir.

Bu işlemi birbirinden bağımsız şekilde tekrar edersek ne olur? Her adımda Ayşe’nin gittiği yoldan geri gelme şansı yüzde elli olduğundan, bütün denemelerde Ahmet’in Ayşe’nin gittiği yolları istemeden de olsa (istese de aynı aslında) tahmin etme şansı yüzde elli olasılığın kendisiyle deneme sayısı kadar çarpılması olacaktır. Yani iki deneme sonrasında olasılık \(\frac{1}{2}\cdot{\frac{1}{2}}=\frac{1}{4}=0.25\) olacaktır. Üç deneme sonrasında \(\frac{1}{2}\cdot{\frac{1}{2}}\cdot{\frac{1}{2}}=\frac{1}{8}=0.125\). On deneme sonrasında ise \(\left(\frac{1}{2}\right)^{10}=0.0009765625\) olmaktadır. Görüldüğü üzere deneme sayısı arttıkça Ayşe’nin sihirli kelimeyi kullanmadan Ahmet’i kandırma şansı gitgide azalmakta. Ahmet’in ikna olması için Ayşe’nin en az bir kere kapıdan geçmiş olması yeterli, çünkü kapıdan geçmiş olmak için sihirli kelimeyi kullanmak şart. En az bir kere kapıdan geçme olasılığı da \(1-\left(\frac{1}{2}\right)^{n}\) ile verilecektir. Burada \(n\) deneme sayısıdır. Yani deneme sayısı arttıkça Ahmet’in ikna olma olasılığı 1’e çok yaklaşacaktır.

Deneme sayısı yeterince artırıldığında Ayşe’nin numara yapıyor ihtimali sıfıra çok yaklaşır. Bir süre sonra Ahmet Ayşe’nin sihirli kelimeyi bildiğine inanacaktır. Peki Ahmet gizlice kayıt yaparsa başka insanları da ikna edebilir mi? Kayıtta sadece Ahmet’in seçtiği yolu bağırması ve Ayşe’nin bu yoldan geri dönmesi olacağından diğer insanların ikna olması mümkün değil. Ahmet’in seçeceği yolu daha önce Ayşe ile anlaşmış olma ihtimali yüzünden Ayşe bu ispatı üçüncü kişilere karşı inkar edebilir (hem de başarıyla).

Peki Ahmet seçimini yazı tura atarak yaparsa ve yazı tura atışını da kayıt etse ne olur? O zaman üçüncü kişiler bu video kaydından ikna olabilirler. Ayşe seçimlerin önceden planlandığını, prova edildiğini iddia edemez. Yoksa edebilir mi? Yazı tura kaydının ikna edici olabilmesi için üçüncü kişilerin kullanılan paranın hilesiz olduğundan emin olmaları lazım. Video üzerinden bunu göstermek zor. Bu durumda Ayşe paranın hileli olduğunu ve prova ettikleri sırayı üretecek bir para olduğunu iddia edecektir.

Sıkça yazılan yanlışlar

Geçen gün bir yazı yazarken bir kelimenin yazılımını kontrol etmek için TDK sayfasına baktım. Bağlandığım sayfada sağdan sola doğru kayan yazılar şeklinde sıkça yanlış yazılan kelimeler ve doğruları geçiyordu.

Birinci sırada fortmanto vardı. Çok da sık kullanılmıyordur diye düşündüm ve diğerlerini bekledim.

Çok tanıdık olanları atladım. P harfine gelince bombardıman da başladı. Palyaço sıklıkla palyanço diye yazılıyormuş.

Bu iki örnekten sonra TDK’nun ne tür yazılar okumaya başladığını merak etmeye başladım. Bazı kullanımları daha önce gördüğümü, duyduğumu hatırlamıyordum. Neyse, TDK’ndan daha mı iyi bileceğim diyerek devam ettim.

Panaroma yanlışmış, doğrusu panoramaymış. Bunu yüzde elli ihtimalle ben de yanlış kullanıyormuşum (bazen emin olmadığım kelimeleri bir öyle bir böyle kullanırım da).

Panik oldum demek yanlışmış. Doğrusu panik olmak ya da paniğe kapılmakmış. Ben panik olmak garip geldiğinden panik oldum kullanımındaki hatayı hala anlayabilmiş değilim. Umarım TDK (ya da başka biri) beni bu konuda aydınlatabilir.

Bu kelimeyi çocukken doğru, üniversitede yanlış yazıyormuşum. Pantalon. Artık doğru şekilde pantolon diye yazmaya başlayacağım.

Bir başka yanlış yazım pardesüymüş. Anlaşılan TDK bunu benden görmüş. Doğrusu pardösü.

Bir iki yıl öncesine kadar yanlış yazdığım bir kelime de parende. Doğru yazması atması kadar zor değilmiş: Perende.

Her zaman yanlış yazdığım bir başka kelime de : Peştemal. Doğru yazılışı peştamal olacak.

Şimdi geldik yanlış yazma konusunda rakipsiz kelimemize. Poğaça diye okunur ama anlaşılan poaça, poça ya da boğça diye yanlış yazılırmış.

Daha eğlenceli bir şey çıkmaz derken profü diye bir kelime başladı. Profüsür filan bekliyordum, yanıldım. Tahmin edin bakalım! İlk ipucu: Profütür.

İkinci ipucu: Prolüfütür.

Heralde artık bilmişsinizdir. Hala bulamayan biri varsa bir ipucu daha, belki bunu görmüştür: Profütürül.

Evet, tabii ki profiterol.

Son olarak da psikiyatrist. Hayır efendim, bu yanlış yazılımı. İngilizcesi gibi değil Almancası gibi olacakmış, yani psikiyatr.

Aşağıdaki tabloda seçtiğim kelimeleri topluca listeledim.

Yanlış                                 Doğru

fortmanto                              portmanto
palyanço                               palyaço
panaroma                               panorama
panik oldum                            panik olmak, paniğe kapılmak
pantalon                               pantolon
pardesü                                pardösü
parende                                perende
peştemal                               peştamal
poaça, poça, boğça                     poğaça
profütür, prolüfütür, profütürül       profiterol
psikiyatrist                           psikiyatr

Not: Her bağlandığımda TDK sayfasında değişik bir liste geliyor sanki. Bu da hemen hemen sınırsız eğlence demek olabilir.

Astroloji ve mantık

Geçenlerde yıllar sonra görüştüğüm bir arkadaşımın evindeydik. Neler yapıyorsun görüşmeyeli filan derken konu birden astrolojiye geldi. Arkadaşım astrolojiye merak salmış ama öyle tanıdığım kökten astrologlar gibi değil. E ben de zaten astrolojiye inanmam. O zaman eğlenceli bir muhabbet için her şey hazırdı.

Arkadaş: Dur senin yıldız haritanı çıkaralım, çok eğlenceli bak.

Ben: Çıkar bakalım, kaç gün sürer bu iş?

Arkadaş: Hemen çıkar, bu işi artık bilgisayar programları yapıyor. Astrologlar sadece yorum işine yoğunlaşıyor. Ben de ucundan öğreniyorum işte. Arkadaşlarımın yıldız haritalarını kaydediyorum. Hadi seninkini de yapalım. Doğum tarihini söyle!

Ben: Sekiz Eylül 1973.

Arkadaş: Demek başak burcusun.

Ben: Bu kadarını ben bile biliyorum. Yok mu başka bir şey?

Arkadaş: Harita için doğum yeri ve saati de lazım. Saatin tam olması lazım.

Ben: Yer kolay da koordinatları bilmiyorum. Trabzon desek yeter mi? Yoksa google’dan koordinatlara mı bakayım?

Arkadaş: Yeter, yeter. Programda her yer kayıtlı. O koordinatları kendi alır. Doğum saatini söyle hadi.

Ben: Doğum saatini anneme sormam lazım. (Tap tap tap. Umarım bunlar doğru dokunmatik ekran sesidir.) … 12 ile 14 arasıymış. Tam saat de kayıtlıymış da onu bulamamış henüz.

Arkadaş: Ortasını alalım. (Klik klik klik) Yükselenin yaymış. Hmmm ama bir sorun var. Doğum saatin yanlış olmalı.

Ben: Nasıl yani? Anneme sordum şimdi.

Arkadaş: Yükseleni yay olanların boyu çok uzun olurmuş. Senin boyun da gördüğün kadar işte. Demek ki yay olamazsın.

Ben: Mantıklı. Ne yapacağız o zaman? Eğlence bitti mi?

Arkadaş: Dur. Yaydan çıkmaya çalışalım şimdi. Varsayalım saat üçte doğdun. Yeni haritaya bakalım. Hah, yükselenin oğlak şimdi. Sor bakalım annene üç gibi doğmuş olabilir misin?

Ben: (Tap tap tap) Hahaha, annem, “tamam, üçtü” dedi ya. Anlaşılan şu an ne desek kabul edecek. Var mı anneme söylemek istediğin bir şey?

Ben: Dur, dur! İstanbul’dan gol haberi var galiba. Annem yazıyor. Evet, tam saat 16:25 imiş.

Arkadaş: Tamam! (Klik klik klik) Oğlakmış. Harita tamamdır. Şimdi senin …

Bundan sonrası açıkçası benim için beyaz gürültü fonunda bazı tanıdık kelimelerden ibaretti. Merkür, Güneş, hava, ateş, toprak filan. Yüzde elli civarında toprak çıktım. Somut bir şeyler üretiyormuşum galiba. Üç vakte kadar da benden bir halt olmazmış.

 

Küçük bir optimizasyon

Olay bir kafede geçmektedir. Kahramanlarımız çok zamanı olan bir müşteri ve bir garson:

Çay var mı?

Var efendim.

İki tane lütfen.

Tabii efendim.

Sürekli duyduğum bu konuşma örneği nedense son tatilimde dikkatimi çekmeyi başardı. Yazılımdan gelen alışkanlıkla düşünmeye başladım. Daha az konuşmayla aynı iletişim yapılamaz mıydı? Örneğin:

İki çay lütfen.

Tabii efendim.

Peki ya çay yoksa ne olacak?

İki çay lütfen.

Çayımız yok (ya da kalmadı).

O zaman iki kahve (ya da başka neyiniz var?).

...

Çay olsa da olmasa da konuşma orijinal konuşmadan daha kısa sürecektir.

Peki neden bazı insanlar birinci yolu seçiyorlar? Tabii ki bunun cevabını bilmiyorum. Bilsem yazılımcı olmazdım. Belki, ‘Çay var mı?’ sorusuna verilebilecek olumsuz cevaptan sonra diğer olasılıklara daha kolay geçebiliyorlardır. Ayrıca ‘İki çay lütfen’ bir soru değil. Verilecek olumsuz bir tepki belki de beyinde daha uzun, yorucu işlemlere yol açıyordur. Yine de bence bir kafede çay olmama ihtimalinin çok küçük olduğunu (epsilon kadar?) varsayabiliriz. Bu da bulunduğumuz yerde neredeyse kesin olarak çay olacaktır demek. Yani ‘var mı’ diye sormak gereksizdir.