Ali ile Veli tutukludur. Bir gün gardiyan gelir ve bir oyun oynayacaklarını, eğer kazanırlarsa serbest bırakılacaklarını söyler. Oyunun kuralları şöyle:
Gardiyan sabah gelip Ali’yi bir odaya götürecek. Veli başka bir odada bekleyecek. Ali’nin getirildiği odada birden dörde kadar numaralanmış dört adet boş kutu olacak. Ali bu kutuları görürken gardiyan bir kutuya cebinden çıkardığı bir kağıdı koyacak. Ali kağıdın hangi kutuya koyulduğunu bilecek yani. Sonra gardiyan cebinden dört adet hilesiz madeni para çıkaracak ve sırayla yazı tura atıp her bir parayı birer kutunun üzerine koyacak. Ali hangi paranın yazı ya da tura geldiğini ve hangisinin hangi kutu üzerinde olduğunu da bilecek. Sonra gardiyan Ali’ye bir parayı seçmesini söyleyecek. Alinin seçtiği para yazı ise turaya, tura ise de yazıya döndürülecek ve Ali odadan çıkarılacak.
Ardından Veli odaya alınacak. Veli kutuların içini göremeyecek ama üzerindeki paraların durumunu görecek. Veli odaya girdikten sonra bir kutuyu seçecek. Eğer doğru kutuyu seçerse ikisi de serbest bırakılacak, bulamazsa tutukluluk devam edecek.
Ali kutuların olduğu odaya girdikten sonra Veli ile aralarında paralar dışında başka hiçbir iletişim olmayacak. Bütün bu bilgiler doğrultusunda Ali ve Veli oyun başlamadan önce beraberce bir strateji belirleyebilecekler. Serbest kalmalarını garantileyecek strateji nasıl olmalıdır?
Martin Nowak evolutionary dynamics kitabında üremeyi şöyle basitçe modeller:
\(\dot{x} = \frac{dx}{dt} = r\cdot x \)
Burada \(x \) değişkeni türün nüfusunu belirtiyor. Dolayısıyla \(\dot{x} \) terimi de türün nüfusunun zamana göre değişimini gösteriyor, yani zaman geçtikçe nüfusunun ne kadar arttığını ya da azaldığını ifade ediyor. Bu artış ya da azalış da o anki nüfusun sabit bir \(r \) sayısıyla çarpımına eşit olduğu bir modelle gösterilsin diyor. Bu arada doğum ve ölüm oranlarının çoğalma katsayısında olduğunu da unutmamak lazım. Yani aradaki fark çoğalmayı veriyor ve bu fark aslında nüfusun azalması da demek olabilir.
Bu şekildeki bir modelde nüfus artışı tabii ki üssel bir davranış gösterecektir.
\(r = 1.1 \) değeri için yukarıdaki grafiği elde ettim. Toplamda yirmi adım bile gidilmeden nüfus bir milyonu geçti. Böyle bir ortamda bütün türler aynı hızda çoğalırdı ama. Nowak hemen sonra gelen seçilim kısmının başında “seçilim değişik türlerin bireyli değişik oranlarda çoğalırsa meydana gelir” diyor. Eğer her tür aynı oranda çoğalsaydı nüfuslarını birbirlerinden ayıran tek fark başlangıçtaki nüfusları olacaktı. Diğer bir deyişle nüfusların başlangıçtaki oranları nesiller geçtikçe hiç değişmeyecekti. Bu durumda gerçekten de bir seçilimden bahsetmek zor olabilir.
İkinci cümlede ise seçilim olması için en az iki tür olmalıdır diyor. Bu da seçimden bahsedilebilmesi için anlaşılır bir varsayım hatta tanım bile olabilir.
O zaman iki türden oluşan modeli şöyle veriyor:
\(\dot{x} = a\cdot {x}\)
\(\dot{y} = b\cdot {y}\)
Burada \(a > b \) ise birinci tür ikinci türden çok daha hızlı üreyecektir ve zaman geçtikçe birinci türün nüfusunun ikinci türün nüfusuna oranı sürekli artacaktır. \(b > a \) olduğu durumda da tersi senaryo gözlenecektir.
Tabii ki her türün sınırsız büyüdüğü modeller pek gerçekçi değil. Ekosistemimizin maksimum birey sayısına sahip olduğunu varsayalım ve modelimizi buna uygun hale getirelim. Bu modelde toplam bir sayıdan bahsetmek yerine nüfus oranları kullanılacak. Yine aynı değişkenleri kullanıyoruz ama artık \(x \) değişkeni birinci türün nüfusunu değil de birinci türün nüfusunun toplam birey sayısına oranını veriyor. Bu oranlar haliyle minimum 0 ve maksimum 1 değerine sahip olabilirler.
Kitapta bunun için şu model veriliyor:
\(\dot{x} = a\cdot {(x-\phi)}\)
\(\dot{y} = b\cdot {(y- \phi)}\)
Buradaki \(\phi \) teriminin görevi türlerin nüfuslarının oranlarının toplamını 1 değerinde sabit tutmak. Bunu sağlamak için de
\(\phi = a\cdot {x} + b\cdot{y} \)
eşitliğinin sağlanması gerekiyor. Yani her adımda \(\phi \) değeri o adımdaki nüfusların oranına göre tekrar hesaplanıyor.
Aşağıdaki python programıyla bu modeli denedim.
import numpy as np
import matplotlib.pyplot as plt
a = 1.1
b = 1.3
number_of_iterations = 100
def constrainedA(x, phi) :
return x*(a - phi)
def constrainedB(y, phi) :
return y*(b - phi)
def phi(x, y):
return a*x + b*y;
x = 0.5
y = 0.5
x_population = np.array([[0, x]])
y_population = np.array([[0, y]])
total = np.array([[0, x+y]])
for i in range(0, number_of_iterations):
phi_value = phi(x, y)
delta_x = constrainedA(x, phi_value)
delta_y = constrainedB(y, phi_value)
x += delta_x
y += delta_y
x_population = np.append(x_population, np.array([[i, x]]), axis = 0)
y_population = np.append(y_population, np.array([[i, y]]), axis = 0)
total = np.append(total, np.array([[i, x+y]]), axis = 0)
plt.plot(x_population[:, 0], x_population[:, 1])
plt.plot(y_population[:, 0], y_population[:, 1])
plt.plot(total[:, 0], total[:, 1])
plt.xlabel("zaman")
plt.ylabel("nüfus")
#plt.plot(y_population[:, 0], y_population[:, 1])
plt.show()
Sonuç olarak da şu grafiği elde ettim:
Bu programda adım sayısını 20’den 100’e yükselttim. Bu sayede türlerin birinin diğerini ekosistemden nasıl sildiğini görebiliyoruz. Kırmızı çizgiyle gösterilen türün çoğalma katsayısı 1.3, mavi çizgiyle gösterilen türünkü ise 1.1 idi. Yeşi çizgi de nüfus oranlarının toplamını gösteriyor ve sürekli 1 değerine sahip.
Martin Nowak bu modeli daha iyinin hayatta kalmasına (Survival of the fitter) örnek olarak veriyor. Gerçekten de bu modelde daha iyi çoğalma yeteneğine kalan tür hayatta kalıyor ve diğeri yok oluyor. Sonra aynı modeli ikiden fazla tür için kurup bu sefer de en iyinin hayatta kalması (Survival of the fittest) fikrini gösteriyor. Bu modelde iki genellemeye gidiyor:
\(\phi = \sum_{i=1}^{n} x_{i} \cdot {f_{i}} \)
\(\dot{x_{i}} = x_{i} \cdot (f_{i} – \phi) \)
Bu modelde \(x_{i}\) i numaralı türün nüfus oranını \(f_{i}\) de aynı türün çoğalma fonksiyonunu (fitness) gösteriyor. Modelin gerisi aynı şekilde çalıştırılıyor.
Bu noktadan sonra Nowak iki yeni durum için modelimiz nasıl olmalı diye bir soru soruyor:
Ekosistemdeki ilk mevcut tür daha sonradan gelen tür ne kadar iyi olursa olsun mücadeleyi kazansın (Survival of the first)
Ekosistemdeki her tür hayatta kalsın (Survival of all)
Bu durumda Nowak doğrusal fitness fonksiyonu şartından vazgeçmemiz gerekir diyor ve şu modeli sunuyor:
\(\dot{x} = a\cdot {x^c}-\phi \cdot {x}\)
\(\dot{y} = b\cdot {y^c}- \phi \cdot {y}\)
Bu modelde nüfus oranlarının toplamını sabitlemek için şu eşitliğe ihtiyacımız var:
\(\phi = a\cdot{x^c} + b\cdot {y^c} \)
Modeldeki \(c \) sabitinin birden büyük seçersek 1. olasılığı modellemiş oluyoruz. 1. senaryonun aklıma takılan kısmı bunu nasıl programlayacağımdı. Bu senaryoda söylenen şey şu: Mesela bütün toplam nüfus sadece \(x \) türünden oluşuyorsa sisteme ekleyeceğimiz bir \(y \) türü bireyi çoğalma potansiyeli diğer türden yüksek olsa bile yok olmaya mahkumdur. Yani programda ilk anda \(x = 1 \) ile başlamam gerekecek. Ardından sisteme minimum bir \(y \) değeri eklemem lazım. Bunun yerine başlangıçta minimum \(y \) ile başlamayı seçtim.
import numpy as np
import matplotlib.pyplot as plt
a = 1.1
b = 2.0
c = 1.3
number_of_iterations = 20
def constrainedA(x, phi) :
return a*pow(x, c) - x*phi
def constrainedB(y, phi) :
return b*pow(y, c) - y*phi
def phi(x, y):
return a*pow(x, c) + b*pow(y, c);
x = 0.999
y = 0.001
x_population = np.array([[0, x]])
y_population = np.array([[0, y]])
for i in range(0, number_of_iterations):
phi_value = phi(x, y)
delta_x = constrainedA(x, phi_value)
delta_y = constrainedB(y, phi_value)
x += delta_x
y += delta_y
x_population = np.append(x_population, np.array([[i, x]]), axis = 0)
y_population = np.append(y_population, np.array([[i, y]]), axis = 0)
plt.plot(x_population[:, 0], x_population[:, 1])
plt.plot(y_population[:, 0], y_population[:, 1])
plt.show()
Bu sefer programda toplam nüfus oranlarını göstermek istemedim, çünkü o zaman birinci türün çok çabuk 1 değerine ulaşması net gözükmüyordu.
Grafikte çok net görülmüyor ama daha ilk adımda birinci tür bütün popülasyonu ele geçirdi.
Bu senaryo tabii ki her başlangıç değeri için bu sonucu vermiyor. Örneğin aynı \(c \) sabiti için \(x \) türünü nüfusun yüzde sekseni olacak şekilde başlatınca bu sonuç çıkıyor.
Görüldüğü gibi daha iyi fitness fonksiyonuna sahip olan \(y \) yok olmadığı gibi bütün ekosistemi de ele geçirdi.
Eğer \(c < 1 \) olacak şekilde bir seçim yaparsak iki tür de yok olmadan beraber yaşama şansını yakalayabiliyor.
Bunun denemesini de aşağıdaki programla yaptım.
import numpy as np
import matplotlib.pyplot as plt
a = 1.2
b = 0.8
c = 0.5
number_of_iterations = 20
def constrainedA(x, phi) :
return a*pow(x, c) - x*phi
def constrainedB(y, phi) :
return b*pow(y, c) - y*phi
def phi(x, y):
return a*pow(x, c) + b*pow(y, c);
x = 0.5
y = 0.5
x_population = np.array([[0, x]])
y_population = np.array([[0, y]])
for i in range(0, number_of_iterations):
phi_value = phi(x, y)
delta_x = constrainedA(x, phi_value)
delta_y = constrainedB(y, phi_value)
x += delta_x
y += delta_y
x_population = np.append(x_population, np.array([[i, x]]), axis = 0)
y_population = np.append(y_population, np.array([[i, y]]), axis = 0)
plt.plot(x_population[:, 0], x_population[:, 1], label='x')
plt.plot(y_population[:, 0], y_population[:, 1], label='y')
plt.legend()
plt.show()
Grafikte de görüldüğü gibi iki tür de yok olmadı.
Heralde bu özellikleri sağlayan daha başka modeller de vardır ama konuya bu şekilde girilmesi hoşuma gitti. Bir modelin olası sonuçlarından çok, istenen sonucu açıklayabilecek bir model sunma tekniği ilgimi çekti. Çalışmalarıma biraz da bu kitaptan devam edeyim, belki şansım bu sefer döner.
Bilim tarihiyle azıcık ilgilenen herkes deney tasarlamanın ne kadar zor olduğunu bilir. Bundan daha da zor olanı bu deneyin sonuçlarını yorumlamak olabilir.
Benim de herkes gibi kafamda bir ChatGPT tasviri var. Internetteki bilgileri bir şekilde harmanlamış ve bunları iyi cümlelerle paketleyip sunan bir yardımcı. Yalnız kendisiyle yazışırken arada kendimi onunla tartışırken bulduğum da çok oldu. Demek ki içten içe onu düşünen bir varlık olarak da hayal etmek istiyorum. Öyle olmadığını bilsem de. Düşünmenin tanımı ya da sınırları bizim için de çok zor olmalı ama, bu durumda hiç düşünemiyor da diyemem heralde.
Bugün şirketteki işlerim biraz iyi gidince dinlenmek için onunla bir deney yapayım dedim. Standard sorulara çok iyi cevaplar verdiğini biliyordum. Daha geçenlerde yazdığım bir oyun programı için bir algoritma sormuştum ve önerdiği şeyi programlayıp çalıştırınca istediğim gibi çalıştığını görmüştüm. Sorduğum şey de standard bir algoritmaydı ama bu durumda iyi bir yardımcı olduğunu inkar edemem şimdi.
Deney için bilinen bir bilmeceyi aldım ve parametreleri biraz değiştirdim. Böylece sorunun şekli ve çözüm algoritması dışında tam bu sorunun çözümüyle eğitilmiş olamayacaktı. Acaba bu çözüm yolunu bu yeni parametrelere uydurabilecek miydi? Ya da en azından deneyecek miydi?
Şimdi yazışmamıza bir bakalım:
Sorduğum soruyu doğru anladığını düşünüyorum. Yani anlamaktan kastım, kurallarını çözdü ve eğitildiği verilerdeki bazı yöntemlerle benzerlikler bulabildi. Kullandığı algoritmanın sonuçlarını yanlış buldu ama. Bunun çok değişik nedenleri olabilir. Mesela soruyu çözmekten çok giriş, gelişme ve sonuç kısımları olan kısa bir yazı yazma eğilimi olması nedeniyle hemen ilk bir iki sonucu genellemiş olabilir.
Burada ikili arama yöntemini kullanarak bir sonuç buluyor ama tabii ki soruda istenen en iyi çözüm değil bu. Bunu da aramıyor. Yine de bu çözüm denemesi hiç de fena değildi. Çözümleri sonuna kadar getirmediğinden yaptığı çıkarımlar da haliyle hatalı oluyor. Bunun nedenlerini bilemiyorum ama.
Buradaki cevabın ilk paragrafında soruyu çözdü heralde dedim. Cevap doğruydu, ilk adım da doğru ama ondan sonra mantığı uygulamayı beceremedi. Becerememekten de öte, sonraki adımlarda iyice saçmalamaya başladı. Acaba soruyla ilgili bazı şeyleri yanlış mı anladı, yoksa göz ardı etmeye mi başladı bilemiyorum ama beklediğim çözümden birden uzaklaşmaya başladık.
Neyse ki, adımları tek tek deneyince daha iyi bir sonuç bulabildik.
Bu sefer bir önceki çözümde kullandığı yöntemlerin birini (katların artırma kuralını) genellerken diğerini (başlangıç katının önemi) tamamen unuttu. Bunun yanında problemi de iyice unuttu. Birden binaya yeni katlar eklemeye başladı. Binanın kat sayısını hatırlattığımda ise diğer yöntemleri de iyice unuttu ama kafasındaki çözüme uymayan sayıları güzel cümlelerle pazarlamaya kalktı.
Bu kısımda ise daha önceki kısımlarda katettiğimiz her aşamayı kaybettik gibi gözükse de çözümle ilgili bir pırıltıya dikkat çekmek istiyorum. Başlangıç katı olarak 4. katı seçti ve sonra önce 3 sonra iki kat artırdı. Bunlar yanlıs sayılar olsa da doğru çözüm için gerekli mantığa ulaştık. Tabii program bunu mantık olarak gördü mü yoksa sadece bir sürü parametreden birinin rastlantısal bir etkisi miydi bilemiyorum.
Tam belki de doğru yoldayız diye düşünüyordum ki, yine ikili arama yönteminin ününe aldanıp çözümden iyice uzaklaştı.
Son kısımda da demin dediğim şeyi onaylar gibiydi. İkili arama birçok sınırsız sayıda yumurtamız olsa en iyi arama performansını verebilir ama bu problemde sadece iki yumurtamız var. Bu tür mantık yürütmesini beklemiyordum tabii ki ama eğer biraz mantık yürütüyorsa bunu arka arkaya tekrarlayabilir belki diye umuyordum. Yanılıyormuşum. En sonunda ilginç olmayan bir şekilde insani bir tepki verdi ve soruyu çözemeyince çoğunlukla işe yarayacak bir şey önerdi. Bu tür çözümler problemden sıkılan, daha fazla arama yapmak istemeyen insanların en sık başvurduğu çözümler oluyor. Bütün parçaları tek tek bulmuş olsa da hepsini birleştirerek 6 denemelik çözümü yine de bulamadı.
Bu durumda düşünemiyor diyebilir miyim? Çok genel anlamda düşünüyor olabilir ama bizim soyutlama, genelleme yeteneğimizden tabii ki hala çok uzak. Ayrıca bu ChatGPT programının böyle bir amacı var mıydı onu bile bilmiyorum.
Bundan çok uzun yıllar önce ben üniversite sınavına hazırlanırken sorular çok daha sıradandı diye hatırlıyorum. Belki de yapabildiğim için öyle hatırlıyorumdur. Şimdi değişik sosyal medya gruplarında sorulan test sorularına bakınca seviye sanki biraz yükselmiş gibi geliyor bana ama bu sorular sınav soruları değil, çeşitli test kitaplarından alınmış sorular. Hatta aralarında yanlış sorular da oluyor.
Geçen haftalarda iki kere karşılaştığım ama bizim zamanımızda hiç sorulmayan bir olasılık sorusu türünden bahsetmek istiyorum.
Ahmet ve Ayşe akşam 7 ile 8 arasında buluşmak istiyorlar. Buluşma yerine tam kaçta gelecekleri belli değil ama her birinin 7 ile 8 arasında herhangi bir zamanda buluşma yerine gelme şansı eşit. Buluşma yerine erken gelen diğerini en fazla 15 dakika bekleyecek ve bu süre içinde diğeri gelmezse buluşma yerinden ayrılıp eve dönecek. Ahmet ve Ayşe'nin buluşma ihtimali nedir?
Bütün buluşma zamanını 60 dakikaya böleyim ve Ahmet’in buluşma yerine geliş zamanını x ekseninde, Ayşe’nin gelişini de y ekseniyle göstereyim.
x ekseni Ahmet’in gelebileceği dakikalar, y ekseni de Ayşe’nin gelebileceği dakikaları gösteriyor.
Yukarıdaki şekilde iki tane doğru çizdim. Bunlar sorunun çözümü için çok önemli denklemler, daha doğrusu eşitsizlikler. Yukarıdaki doğru y – x < 15 eşitsizliğinin sınırını oluşturan doğru. Bu eşitsizlik Ayşe’nin Ahmet’ten en fazla 15 dakika daha sonra geldiği noktaları gösteriyor ve yukarıda kalan doğrunun altındaki bütün noktaları içeriyor. Alttaki doğru da x – y < 15 eşitsizliğinin sınırı oluyor. Bu eşitsizliği sağlayan noktalar da doğrunun yukarısındaki noktalar. Bu eşitsizliğin anlamı da Ahmet’in Ayşe’den en fazla 15 dakika sonra geldiği durumlardır.
Bu iki doğru arasında kalan koyu mavi alan da Ahmet’in ve Ayşe’nin buluşma yerine en fazla 15 dakika farkla geldiği durumlardır.
Ahmet’le Ayşe’nin buluşma ihtimali böylece koyu mavi alanın bütün alana oranı şeklinde hesaplanabilir.
Başta da dediğim gibi bu tür sorular benim zamanımda sadece bilmece olarak soruluyordu ve sınav seviyesi için zor bir teknik olarak görülüyordu. Anlaşılan artık biraz daha standard bir soru türü olmuş.
Kısaca, bu tür sorularda aktörler için eksenler seçilip o alanda soruda aranan eşitsizlikler yazılır ve istenen alanın tüm alana oranı hesaplanır. Problemin geometrik alanlara dönüştürülmesi olasılıkta sık sık görülen yöntemlerden biridir ve sonunda bizim eğitim sisteminde de beklenen bir şey olmuş ama bunun anlaşılması için derste daha deneysel bir yaklaşım gütmek gerekebilir.
Hobi olarak matematik öğreniyorum. Acele etmeden. İşime yarar mı diye kaygılarım olmadan. Şu an ilgilendiğim alanı ise grup teorisi. Nedir, ne değildir diye anlatmaya kalkmayacağım. Bilgisayarıma indirdiğim kitaplardan arada bir okuyorum ve kitaptaki alıştırmaları kağıt kalemle çözmeye çalışıyorum. Hafta sonu yazmaya çalıştığım Hackenbush programı iyi gidince takılıp kaldığım probleme bir daha baktım.
\(p \) bir tek asal sayı olsun. \(U(p^n) \) grubunda derecesi 2 olan tek elemanın \(p^n – 1 \) olduğunu gösterin.
Bu soruyla uzun zamandır uğraşıyordum. Uğraşıyordumdan kastım arada bir bakıp hiçbir ilerleme kaydedemiyordum. Yapabildiğim tek şey, eğer bu grupta derecesi ikinci bir eleman daha varsa, başka bir üçüncü eleman daha olmalıdır sonucuna ulaşmak olmuştu.
\(a \) ve \(b \) dereceleri 2 olan iki değişik eleman olsun dedim. O zaman \(a \cdot a = e \) ve \(b \cdot b = e \) demektir. Bu ikisi de birbirinden farklı olduğuna göre ve ikisinin de dereceleri 2 olduğuna göre birbirlerinin tersi değillerdi. Eğer biri diğerinin tersi olsa o zaman
\(a \cdot b = e \)
\(a \cdot a \cdot b = a \cdot e = a \)
\(e \cdot b = b = a \) sonucu çıkacaktır. Ama a ve b birbirlerinden farklıydı. Demek ki çarpımları da etkisiz eleman olamazdı.
Peki çarpımlarının derecesi kaç olurdu?
\(a \cdot b \cdot a \cdot b = a^2 \cdot b^2 \) çünkü grubumuz değişmeli grup.
\(a^2 \cdot b^2 = e \cdot e = e \)
Bu çarpımın etkisiz eleman olmadığını biliyordum. Demek ki çarpımın derecesi 2 imiş. Böylece bu grupta derecesi 2 olan en az üçüncü bir elemanın olacağını gösterdim ve bir aptallık yapıp burada durdum.
Neyse daha fazla ilerleme kaydedemediğimden hafta sonu matematikçi bir arkadaşımı arayıp soruyu anlattım ve bana verebileceği bir ipucu olup olmadığını sordum.
Bana ilk dediği şeylerden biri bu grupta eleman sayısı 4 olan bir alt grup bulmuşsun oldu. Benim aklıma bunun bir altgrup olup olmadığını araştırmak gelmemişti. Sonra hemen denedim tabii.
Derecesi 2 olan üçüncü sayı \(c = a \cdot b \) olsun. Bu elemanlar çarpma altında kapalı mı diye baksam yeter diye düşündüm.
\(a \cdot c = a \cdot a \cdot b = e \cdot b = b \)
\(b \cdot c = b \cdot a \cdot b = b\cdot b \cdot a = e \cdot a = a \)
Gerçekten de kapalıydılar. Yani \(e \), \(a \), \(b\) ve \(c \) elemanları ve modulo \(p^n \)’e göre çarpma işlemi bir altgruptu.
Ondan sonra bana şunu örnek olarak \(U(9) \) grubunu verdi ve bu grubun 4 elemanlı bir altgrubu olabilir mi diye sordu. Olamaz dedim. \(U(9) \) 6 elemana sahipti ve 4, 6’yı bölmez.
Peki bunu genelleyebilir misin diye sordu. Yani \(U(p^n) \) grubunun eleman sayısı dörde bölünür mü diye sordu.
Bu noktada bana yeterince fikir verdiğini düşünüp teşekkür ettim ve iyi akşamlar diledim. Hemen elime kağıt kalemi alıp \(U(p^n) \) grubunun eleman sayısını hesaplamaya başladım. Aslında bunun förmülünü daha önce bulmuştum ama yine bir kontrol ettim. Bu grubun \(p^n – p^{n-1} \) elemanı vardı.
Bunu da çarpanlara ayırdığımda \(p^{n-1} \cdot (p – 1 )\) çıkıyordu. \(p^{n-1}\) her zaman tek sayı olduğundan dörde bölünemez ama \(p \) asal sayısı \(4k + 1\) formundaysa bu grubun eleman sayısı dördün bir katı olacaktı. Gerçekten de 13, 17, 37 gibi asal sayılar için grubun eleman sayıları 12, 16 ve 36 oluyordu. Demek ki bu şekilde bir genelleme olmuyordu ve aklıma daha başka bir şey de gelmediğinden yatıp uyudum.
Sabahleyin arkadaşımı tekrar arayıp bazı asal sayılar için grup eleman sayısının dörde bölünebildiğini söyledim. Bana ilk söylediği şey, bu durumda başka bir çelişkiye ulaşacağım oldu. Bu çelişki bir türlü aklıma gelmiyordu. Sonra dedi ki, mesela \(U(37) \) grubunun 4 elemanlı cyclic olmayan bir altgrubu olabilir mi? O an her şey yerine oturdu. Ben bulduğum dört elemanlı altgrubun cyclic olup olmadığına bakmamıştım bile. Bu altgrup tabii ki cyclic değildi ama ilk başta verilen grup (\(U(p^n)\) ) cyclic idi. Cyclic bir grubun altgrupları da cyclic olmalıydı. Uğraştığım soru birden çözülmiştü.
Arkadaşımın bu kadar basit bir soruyu aklında tutmuş olmasına mı şaşırayım, yoksa bana bunu kolayca çözdürebilmesine şaşırayım bilemedim gerçekten de. Heralde bu sorular uzmanlar için üçle beşi toplamak gibi bir şeydir. Belki de her satranç ustasının çok iyi bildiği standart bir pozisyon gibidir. Böyle süper arkadaşlarım olduğu için çok şanslıyım.
Son zamanlarda karşıma çıkan bir üçgen problemi soru türü için kullandığım ama pek de memnun kalmadığım bir çözüm yöntemi üzerinde biraz düşüneceğim. Önce sorunun genel şeklinden biraz bahsedeyim:
Normal bir üçgen veriliyor ve üçgenin iç bölgesinde bir D noktası var. Bütün köşeleri bu D noktasına birleştiren doğru parçaları çiziliyor ve ABC üçgeninde oluşan altı iç açının dört tanesi veriliyor. Verilmeyen iki açıdan da biri soruluyor. Bazen yardımcı olsun diye buradaki altı kenar uzunluklarıyla ilgili bilgiler de veriliyor ama bu yazıda böyle bir bilgi verilmediğini varsayacağım.
Artık iyice yaşlandığımdan mıdır bilemeyeceğim ama bu soruları gördüğüm zaman aklıma doğrudan trigonometri kullanmak geliyor. Yoksa sentetik yollarla çok daha güzel ve kısa çözümler bulmak kolaydır. Eğer böyle bir çözüm gelirse aklıma onu da yazarım.
Şimdi yukarıdaki şekilde küçük harfle kenarların uzunluklarını belirtmiş olayım. Yani
\(|\overline{\rm AB} | = c\)
\(|\overline{\rm AC} | = b\)
\(|\overline{\rm BC} | = a\)
\(|\overline{\rm AD} | = k\)
\(|\overline{\rm BD} | = i\)
\(|\overline{\rm CD} | = j\)
Açılar da:
\(\angle{DAC} = \alpha \)
\(\angle{DAB} = \beta \)
\(\angle{ABD} = \gamma \)
\(\angle{CBD} = \delta \)
\(\angle{BCD} = \epsilon \)
\(\angle{ACD} = \zeta \)
ABD, BCD ve ACD üçgenlerinde sinüs teoremini uygularsak aşağıdaki başlangıç noktasına erişiriz:
Şimdi bu altı açıdan dört tanesi verilmiş olsun. Örneğin \(\gamma \) ve \(\delta \) bilinmiyor olsun, diğer açılar için sayısal değerler biliniyor olsun. Bu durumda eğer elimizde hesap makinesi, trigonometrik tablolar ya da sinüs değerleri bilinen basit açılar varsa, \(\frac{sin(\beta)\cdot {sin(\zeta)}}{sin(\alpha)\cdot {sin(\epsilon)}} \) ifadesinin sayısal değerini de biliriz. Bu değere \(x \) diyelim. O zaman ifademiz şu hale gelir:
\(\frac{sin(\delta)}{sin(\gamma)} = x \)
Bilinen açıların toplamını da biliyoruz tabii ki. O toplama da:
Yazının başlarında da dediğim gibi bu yöntem her zaman işe yaramasına rağmen test gibi sınavlarda çok kısıtlı bir yardım sağlayacaktır. İleride bu tip sorular için başka yöntemlere de bakacağım.
Bu tür oyunlarda işbirlikçiler duruma göre ihanetçilerle beraber yaşayabiliyor ve hatta bazı durumlarda daha üstün bile olabiliyorlar. Anladığım kadarıyla burada Oyuncular bir çizgenin (graph) köşeleri olacak şekilde tanımlanıyor. Bu durumda her köşe ya işbirlikçi ya da ihanetçi stratejilerine sahip oluyor. Sonra bir \(k \) tamsayısı ile her köşenin kaç kenara sahip olduğu tanımlanıyor. Yani her oyuncu bu kadar komşuya sahip oluyor. Her oyuncu sadece kendi komşularıyla oynuyor ve standard kazanç matrisine göre kazançlar hesaplanıyor. Bir oyuncu birden fazla komşuyla oynadığında kazançları da oyunlardaki kazançların toplamı oluyor.
Bu modelin evrimleşmesi de şu şekilde gerçekleşiyor. Herhangi bir adımda seçilen rastgele bir oyuncu ölüyor. Sonra bu ölen oyuncunun köşesini kapmak için o köşenin komşu oyuncularından birisi kazançlarına göre seçiliyor.
Her komşu iki oyuncu birbiriyle şu matrise göre oyun oynuyor:
Bu seçilim türünde oyunların sadece kişiler arasında değil, gruplar arasında da oynandığı varsayılır. Anladığım kadarıyla geçtiğimiz altmış yıl içinde bu yönde de bir sürü model üzerine çalışılmış. Makalede izlenen yöntem şöyle. Bütün nüfus \(m \) gruba bölünüyor. Her grupta en fazla \(n \) birey olabiliyor. Aynı gruptaki bireyler birbirleriyle tutsak ikilemi şeklinde karşılaşıyorlar. Her adımda bütün nüfustan rastgele bir birey üremek için seçiliyor. Oluşan yeni birey aynı gruba ekleniyor. Eğer bu grup maksimum büyüklüğe ulaşırsa belli bir olasılıkla bu grup iki gruba ayrılıyor ve toplam nüfus sınırsızca büyümesin diye rastgele seçilen bir grup yok ediliyor. Geri kalan olasılıkla ise grup ikiye bölünmüyor, bunun yerine aynı gruptan rastgele seçilen bir birey ölüyor.
Bu modelde yukarıda da anlattığım gibi oyunlar sadece grup içlerinde oynanıyor. Gruplar arası karşılaşmalar yok ama grupların bölünme dinamikleri her gruptaki bireylerin uygunluğu ile ilişkili olduğundan sonuçta sanki gruplar arası bir oyun oynanıyormuş gibi bir sonuç çıkıyor. İşin matematiksel detayına bu aşamada girmek istemiyorum. Belki ileride bu modelleri olduğu gibi programlayıp gerçekten de sonuçtaki modelin oluştuğunu gösterebilirim. Şimdilik sadece makalede verilen sonuç kazanç matrisini vereceğim ve bu matrise uygun programla yaptığım simülasyon sonuçlarına bakacağım.
\(M = \begin{bmatrix} (n+m)\cdot R&&n \cdot S + m \cdot R \\n \cdot T + m \cdot P &&(n + m) \cdot P \end{bmatrix} \)
Aşağıdaki programda önce kazanç matrisini tutsak ikilemi şartlarına uygun bir şekilde kurdum. Sonra grup sayısı ve grup büyüklüğü parametreleriyle oynayarak bu oyunun işbirlikçiler için avantajlı hale getirilebileceğini gösterdim.
import numpy as np
import matplotlib.pyplot as plt
strategies = np.array([[1, 0], [0, 1]])
m = 20 #number_of_groups
n = 10 #size of groups
R = 3
S = 0
T = 5
P = 1
payoff = np.array([[(n+m)*R, (n*S + m*R)], [(n*T + m*P), (n + m)*P]])
number_of_iterations = 100
increment = 0.01
steady_states = np.array([[0, 0]])
for s1 in np.arange(0, 1.0, increment):
s2 = 1 - s1
species = np.array([s1, s2])
for i in range(0, number_of_iterations):
difference = (payoff.dot(species) - species.dot(payoff).dot(species))*species
species = species + difference
species = np.clip(species, 0, 1)
steady_states = np.append(steady_states, np.array([[s1, species[0]]]), axis = 0)
plt.plot(steady_states[:, 0], steady_states[:, 1])
plt.ylabel("işbirlikçi türün sondaki oranı")
plt.xlabel("işbirlikçi türün başlangıçtaki oranı")
plt.show()
m = 20 ve n = 10 için işbirlikçilik kazanan bir strateji oluyor
En az 6 mavi ve en az 6 kırmızı şapka görenler olduğuna göre odada en az 12 kişi olmalı. Hatta bunları gören en az bir kişi olduğuna göre en az 13 kişi de olmalı.
O zaman şöyle bir başlangıç yapalım. Odada 6 tane mavi ve 6 tane de kırmızı şapkalı insan olsun. Bunları gören diğer birinin başında da ya mavi ya kırmızı şapka olacaktır. Onun başındaki şapkanın da kırmızı olduğunu varsayalım. O zaman odada şu an 6 mavi ve 7 kırmızı şapkalı insan var. Bu durumda ama mavi şapkalıların hiçbiri 6 mavi şapka görmediğinden hiçbiri ellerini kaldırmaz. Kırmızı şapkalılar ise tam 6 mavi ve 6 kırmızı şapka görürler, dolayısıyla bu durumda sadece 7 kişi ellerini kaldırır.
Mavi şapkalıların da sayısını bir artırarak onların da 6 mavi şapka görmesini sağlayabiliriz. Bu durumda ise bütün kırmızılar ve bütün maviler ellerini kaldırır ve birden 14 elin kalktığını görürüz. Yani iki rengi de artırmak problemi çözmemizi engelliyor.
O zaman çözüm kolay. Sadece bir rengi artıracağız. Yani ellerini kaldıranlar tek bir renkten olacak. O zaman 6 mavi ve 12 kırmızı şapkanın problemi çözdüğünü görebiliriz. Aynı şekilde 6 kırmızı ve 12 mavi şapka da çözüm olur ama problemde toplam kaç kişi olduğu sorulduğundan cevap değişmez. Toplam 18 kişi vardır.
Bir odada bir grup insan var. Her birinin kafasında ya mavi ya kırmızı bir şapka var. Herkes kendi başındaki şapka hariç diğer şapkaları görebiliyor. İçlerinden biri “en az altı mavi ve en az altı kırmızı şapka görenler ellerini kaldırsın” diyor. On iki kişi ellerini kaldırıyor. Odada kaç kişi vardır?