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.