ChatGPT ile deneyler

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.

Bir olasılık sorusu

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.

\(P(buluşma) = \frac{60^2 – 45^2}{60^2} = \frac{7}{16} \)

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.

Grup teorisi diye hobi mi olurmuş?

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.

Üçgenler

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:

\(\frac {sin(\beta)}{i} = \frac{sin(\gamma)}{k} \)

\(\frac {sin(\epsilon)}{i} = \frac{sin(\delta)}{j} \)

\(\frac {sin(\alpha)}{j} = \frac{sin(\zeta)}{k} \)

Burada \(\frac {i}{k} \frac{k}{j}\frac{j}{i} = 1\) gözlemini yapınca sinüs teoremi aşağıdaki şekle dönüşür.

\(\frac{sin(\beta)}{sin(\gamma)}\frac{sin(\zeta)}{sin(\alpha)}\frac{sin(\delta)}{sin(\epsilon)} = 1\)

Ş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:

\(\alpha + \beta + \epsilon + \zeta = y \) diyelim

Üçgenin iç açıları toplamı 180 derece olduğundan bilinmeye iki açıyı da tek bir değişken cinsinden yazabiliriz.

\(y + \delta + \gamma = 180 \)

\(\delta = 180 – y – \gamma \)

\(180 – y\) sayısına da kolaylık olsun diye \(\sigma \) diyeceğim.

O zaman \(\delta = \sigma – \gamma \) olur

\(\frac{sin(\sigma – \gamma)}{sin(\gamma)} = x \)

Şimdi de paya trigonometrik açı farkı kurallarını uygulayayım:

\(\frac{sin(\sigma)cos(\gamma) – cos(\sigma)sin(\gamma)}{sin(\gamma)} = x \)

\(sin(\sigma)cotan(\gamma) – cos(\sigma) = x \)

şimdi bilinmeyenleri eşitliğin sol tarafında tutup, bilinen her değeri sağa atayım:

\(cotan(\gamma) = \frac{x + cos(\sigma)}{sin(\sigma)} \)

Buradan da \(\gamma \) değerini “kolayca” bulabilirim:

\(\gamma = arccotan( \frac{x + cos(\sigma)}{sin(\sigma)}) \)

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.

Network karşılıklılığı (5)

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:

\(M = \begin{bmatrix} R&&S \\T&&P \end{bmatrix} \)

Yukarıdaki kurallarla birleştirince matris şu biçime dönüşüyor:

\(M = \begin{bmatrix} R&&S + H\\T – H&&P \end{bmatrix} \)

\(H = \frac{(k+1)(R – P) – T + S}{(k+1)(k – 2)} \)

Aşağıdaki python programıyla bu oyunun simülasyonunu yapmaya çalıştım:

import numpy as np
import matplotlib.pyplot as plt

strategies = np.array([[1, 0], [0, 1]])

k = 3 #number of edges

R = 3
S = 5
T = 5
P = 1

H = ((k + 1) * (R - P) - T + S)/((k + 1)*(k - 2))
payoff = np.array([[R, S + H], [T - H, 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()

Bu simülasyonun sonucunda da aşağıdaki grafiği elde ettim.

k = 3 için elde ettiğim sonuç

Bu kazanç matrisi ve model için işbirlikçilik daha iyi bir stratejiymiş.

Grup seçilimi (4)

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

Şapkalar (çözüm)

Soru:

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.

Şapkalar

Bu soruyu da Alex Bellos’un sayfasından aldım.

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?

Çözüm

Karton deyip geçmemeli

Şu sıralar grup teorisi üzerine bir matematik kitabı okuyorum. Daha en başlardayım. İlk örnekler geometrik şekillerin simetrileri ile ilgili. Yani kısaca, bir geometrik şekli bozmadan onu nasıl dönüştürebiliriz ki aynı başlangıçtaki pozisyonu alsın? Evet biliyorum, anlatmayı beceremedim. Şöyle bir örnekle tekrar deneyeyim.

Mesela elimizde bir kare var. Bu kareyi merkezi etrafında doksan derece döndürürsek yine aynı pozisyondaki bir kare elde ederiz, çünkü köşeler yine köşelerin üzerine gelir. Evet, her bir köşe bir sonrakinin üzerine gelir ama bu bizi rahatsız etmesin. Bu harekete döndürme diyelim. Peki bundan başka hangi simetrilerimiz var?

Bir kare köşegenleri çevresinde de simetrik gözükür değil mi? Yani köşegen üzerindeki köşeleri sabit tutup diğer iki köşeyi yer değiştirirsek yine bütün köşeler üstüste gelir. Bu harekete de çevirmek diyelim, yani şekli o köşegen etrafında çevirmek. Buna benzer iki simetri eksenimiz daha var ama. Onlar da karşılıklı kenarların orta noktalarını birleştiren doğrular oluyor. Karemizi bu eksenler etrafında çevirdiğimizde yine aynı kareyi elde ediyoruz.

O zaman bu iki temel işlemi yukarıdaki gibi genelce kullanabiliriz artık. Döndürme şekli bir nokta etrafında belli bir derece döndürme olsun. Çevirme de bu şekli bir doğru etrafında köşeler yine üstüste gelecek şekilde döndürmek olsun. Evet, hala aynı kelimeleri değişik şeylerde kullandığımın farkındayım ama artık nokta etrafında döndürmeye kısaca döndürme, doğru etrafında döndürmeye de çevirme diyeceğim.

Dün kitapta birkaç tane soruyla karşılaştım:

Düzgün bir çokgende (yani her kenarı aynı uzunlukta olan) arka arkaya iki kere çevirmenin neden bir döndürme olduğunu geometrik olarak açıklayınız.

Düzgün bir çokgende arka arkaya iki kere döndürmenin neden bir döndürme olduğunu geometrik olarak açıklayınız.

Düzgün bir çokgende önce döndürme ve ardından çevirmenin ya da önce çevirme ve ardından döndürmenin neden bir çevirme olduğunu geometrik olarak açıklayınız.

Geometrik şeyleri kafamda canlandırmayı pek beceremem. Kağıt kalemle de aklıma hemen bir şey gelmedi. Sonra zaten canım sıkkın, bari evde bir yerlere tıkıştırdığım malzemeleri kullanayım dedim. Kartonlardan düzgün çokgenler kesmeye başladım. Sonra bu kestiğim şekillerin köşelerini fotoğraftaki gibi numaralandırmaya başladığımda birden soruların çözümü kucağıma düştü.

Eşkenar üçgen, kare, eşkenar beşgen ve eşkenar altıgen

Fotoğrafta da görüldüğü gibi kartonların A yüzünde köşeleri saat yönünün tersinde artacak şekilde işaretlerim. Kartonun diğer yüzüne B dedim ve aynı köşeleri aynı sayılarla işaretledim. Bu durumda B yüzünde köşelerin numaraları saat yönünde artmakta.

Şimdi herhangi bir kartonu alalım ve döndürme işlemine bakalım. Örneğin B yüzü yukarıda olan eşkenar üçgen şeklini alalım. Eşkenar üçgende her bir döndürme altmış derecedir. Bu şekli hangi yönde altmış derece döndürürsek döndürelim köşe numaraları saat yönünde artıyor olacak. Aynı özellik diğer şekillerde de korunur sadece döndürme açısı farklı olacak. Karede doksan derece, eşkenar beşgende yüzsekiz derece ve düzgün altıgende de yüzyirmi derece döndürmek gerekecek.

Bir eksen etrafında çevirme işleminde ise kartonların yüzleri değişeceğinden köşelerin dizilimi de değişecek, yani çevirmeden önce saat yönünde artıyorduysalar çevirdikten sonra saat yönünün tersinde artacaklar. Aynı şekilde çevirmeden önce köşe numaraları saat yönünün tersi yönünde artıyorduysalar çevirdikten sonra saat yönünde artacaklar.

Bu bilgiler eşliğinde kitaptakı sorulara bakıncakitaptaki soruları çok kolay çözebildim ve de nedenini de anladım.

Düzgün bir çokgende (yani her kenarı aynı uzunlukta olan) arka arkaya iki kere çevirmenin neden bir döndürme olduğunu geometrik olarak açıklayınız.

Varsayalım çevirmeden önce A yüzü yukarıda olsun. Demek ki çevirmeden önce köşe numaraları saat yönünün tersi yönünde artmaktaymış. Bir kere çevirdikten sonra köşeler saat yönünde artıyor olacak ve bir daha çevirince yine A yüzü yukarı gelecek ve köşe numaraları eskisi gibi saat yönünün tersi yönünde artıyor olacak. Köşelerin hangi konuma geldiklerinin bir önemi yok, bildiğimiz şey bu son şekil her durumda köşeler birbirlerine göre aynı dizilimi koruyacaklar. Sadece köşelerin ilk konuma göre bulundukları yerler farklı olabilir ama dizilimleri aynı olacak ve bu dizilim de başlangıçtaki konumdan bir döndürmeyle elde edilebilir.

Düzgün bir çokgende arka arkaya iki kere döndürmenin neden bir döndürme olduğunu geometrik olarak açıklayınız.

Döndürme işlemleri köşe numaralarının artış yönlerini değiştirmemekte. Şekil de ayrıca deforme olmadığından her köşenin komşu köşeleri de aynı kalır. Dolayısıyla bir köşe döndürme yönünde başlangıçtan ne kadar uzaklaşmışsa diğer bütün köşeler de aynı yönde o kadar uzaklaşmış olur. Bu da toplamda başka bir döndürmeye eşdeğerdir.

Düzgün bir çokgende önce döndürme ve ardından çevirmenin ya da önce çevirme ve ardından döndürmenin neden bir çevirme olduğunu geometrik olarak açıklayınız.

Bu işlemlerde sadece bir çevirme olduğuna göre köşelerin numaralarının artış yönü tersine dönecek. Bu da ancak çevirme işlemi ile sağlanabilir. Peki bu iki işlem sonucunda oluşan her dizilim için bir çevirme var mı? Yukarıda da gördüğümüz gibi döndürme ve çevirme işlemleri köşelerin birbirlerine göre konumlarını hiç değiştirmiyor, yani şekilde bir deformasyon olmuyor. Köşelerin birbirlerine göre konumlarında bir değişiklik olmuyorsa toplamda köşe sayısı kadar olası dizilim vardır. Düzgün çokgenlerde de köşe sayısı kadar çevirme için simetri ekseni vardır. Her eksen farklı bir dizilim yaratıyorsa sorunumuz çözülmüş olur. Örneğin 1 numaralı köşeyi alalım ve sırayla bu çevirmelerin bu köşeyi farklı köşelere gönderdiğini görelim. Elimde kartonlar varken bunu görmek benim için daha da kolay. Eğer seçilen bir köşeyi herhangi bir köşeye gönderebiliyorsam, sıralamalar da korunduğuna göre her dizilim için bir çevirmek bulabiliriz demektir.

Pragmatizmin elli tonu

İki gün önce şef diğer ekipten M’ın, planladığımız güncelleme ile ilgili benimle konuşmak istediğini söyledi. Anladığım kadarıyla bazı endişeleri varmış. M da dün aradı ve konuştuk. Önce kısaca problemden bahsedeyim ama. Üretim hattında birbiriyle konuşan iki adet makinemiz var. Benim programladığım makine ürünleri optik inceliyor, M’ın programladığı da tartıyor. Sonunda ürün bilgileri M’ın programladığı makinede gösteriliyor. Bu gösterilen bilgilerin bir kısmı da ürünün değişik görüntüleri. Aynı ürün için biri röntgen ikisi optik olmak üzere üç değişik görüntümüz var. Bu görüntüleri göndermeden önce ham verileri JPG’e dönüştürüyorum ve bu işlem üretim hızına oranla çok uzun sürüyor. Diğer program bu verileri topluyor ve eğer ürün hala üretim hattındaysa ağırlık bilgisiyle beraber gösteriyor. Şimdi burada karşılaştığımız sorun şu: Sık sık görüntü güncellemesi olmuyor çünkü veriler zamanında diğer sisteme ulaşmıyor. Bu da kullanıcıyı rahatsız ediyor.

Bu sorunu gidermek için iki değişiklik yaptık. Birinci değişiklikte M bana hangi ürünü göstermek istediğini önceden söylüyor ve bu sayede JPG dönüştürmesine daha önce başlayabiliyorum. İkinci değişiklikte de diğer sistemlere gönderdiğimiz verileri kısıtlayarak sistemdeki yükü biraz hafiflettik. Bu iki çözüm testlerimizde durumu epey iyileştirdi. Tabii ki kesin çözüm değildi bunlar ve arada problem yine olacaktı ama eskisi kadar uzun sürmemesi hedefimizdi.

Yaptığımız ikinci değişiklik için program güncellemesine gerek yoktu. İki parametreyle o işi halledebiliyorduk. Bunu müşterideki sistemde uyguladık ve sonuçlar geçen gün geldi. Bir iyileşme yoktu. M da bu sonuçlar üzerine endişelenmeye başlamıştı. Bana telefonda eğer bu değişiklik bir sonuç vermediyse diğer değişiklik de işe yaramayabilir, o zaman müşteriye ne cevap veririz diye sordu.

Kendi testlerimiz için bir ölçüm metodu tanımlamıştık. Bu testler sonunda iki şey gördük. İki çözüm beraberken sistemde iyileşme görebiliyorduk ve bu yöntemler ölçülebilir bir iyileşme de getiriyordu. Fakat müşteride bu testleri yapan kişi hiç tanımadığımız bir ölçüm aletiydi. Evet, her insan bir ölçüm aletidir ve standartları da yoktur. Ben de M’a, o zaman diğer ölçüm aletini öğrenelim ve testlerimizi ona göre uygulayalım dedim. Belki müştriyle konuşursak beklentilerini ölçülebilir bir hale getirebilirdik. O zaman sürprizlere de ihtiyacımız kalmazdı.

Sonra bu görüşmeyi şefe de anlattım. Şef her zamanki gibi pragmatik yolları tercihten yanaydı. Ölçümlerimizi müşteriye sunabilirdik ve kötüleşme de gözlemlenmemişti. Müşteriyle konuşarak zaman kaybetmeye ne gerek vardı ki? Bakalım şef önce M ile konuşsun da ne yapacağımız bir belli olsun.

0 Comments