Bölüm 10: Çoklu Ajan Sistemleri
Ajanlar ve Çoklu Ajan Sistemleri
Oyunla Başlangıç: Shapley Koalisyon Oyunu
Her oyuncunun tek başına bir değeri vardır; bir koalisyonun değeri, üyelerin tek başına değerleri ile içindeki her ikilinin sinerji bonusunun toplamıdır. Büyük koalisyonun değeri v(N) oyunculara paylaştırılır.
- Yandaki örnek turda 21 birim eşit bölünürse (7'şer) A haksızlığa uğrar mı?
- Tek başına en değerli oyuncu her zaman en büyük payı mı almalı?
Ajanlar ve Çoklu Ajan Sistemleri
Öğrenme Çıktıları
Ajanlar ve Çoklu Ajan Sistemleri
Çoklu Ajan Sistemi (Multi-Agent System, MAS) Nedir?
- Aynı çevrede algılayan, karar veren ve eylem yapan birden fazla otonom ajandan oluşan sistem.
- Ajanlar ortak hedefe sahip olabilir ya da kendi çıkarları doğrultusunda rekabet edebilir.
- Her ajanın bilgisi yereldir; bu yüzden koordinasyon ve iletişim temel tasarım sorunlarıdır.
- Örnekler: robot takımları, otonom araç filoları, dağıtık sensör ağları, trafik ve ekonomi simülasyonları.
Ajanlar ve Çoklu Ajan Sistemleri
Ajan Kavramı ve Özellikleri
Wooldridge ve Jennings'in (1995) "zayıf ajan" tanımındaki dört özellik:
Ajanlar ve Çoklu Ajan Sistemleri
Ajan Nasıl Karar Verir? Mimariler
| Mimari | Karar mekanizması | Güçlü yanı | Örnek |
|---|---|---|---|
| Reaktif | Durum → eylem kuralları; iç model yok | Hızlı, sağlam | Süpürge robotu, sürü davranışı |
| Müzakereci (deliberative) | Çevre modeli + planlama / arama | Uzun vadeli hedefler | Keşif robotu, lojistik planlayıcı |
| BDI | İnanç (belief), arzu (desire), niyet (intention) | İnsan benzeri akıl yürütme | Hava trafik yönetimi, sanal asistan |
| Öğrenen | Deneyimden politika öğrenir | Bilinmeyen çevreye uyum | Oyun oynayan ajanlar |
| Hibrit | Reaktif alt katman + planlayıcı üst katman | Hız ve öngörü birlikte | Otonom araç |
Mimari, ajanın içini anlatır; oyun kuramı ise ajanlar arasındaki etkileşimi inceler.
Ajanlar ve Çoklu Ajan Sistemleri
Gerçek Hayat Uygulamaları
İşbirliği ve Koordinasyon
İşbirliği, Rekabet ve Karma Sistemler
| Hangisi daha verimli? | Koşul |
|---|---|
| İşbirliği | Hedefler örtüşüyor, iletişim ucuz, tek ajanın yapamayacağı iş var |
| Rekabet | Özel bilgi var ve fiyat/teklif ile açığa çıkarılabilir (piyasa, açık artırma) |
Yanıt, sistemin amacına ve kaynak yapısına bağlıdır; mekanizma tasarımı rekabeti iyi sonuca yönlendirmeye çalışır.
İşbirliği ve Koordinasyon
Çıkar Yelpazesi: Üç Küçük Oyun
- Solda çıkarlar aynı: iletişim ve konvansiyon yeter (koordinasyon sorunu).
- Ortada çıkarlar kısmen çatışır: bireysel teşvik ortak iyiye ters düşer, teşvik tasarımı gerekir.
- Sağda biri kazanırken öteki kaybeder (sıfır toplamlı): öngörülemez olmak, yani karışık strateji (mixed strategy) önemlidir.
Turuncu hücreler: saf Nash dengeleri (her iki oyuncu da en iyi tepkide).
İşbirliği ve Koordinasyon
Bireysel Rasyonellik ve Ortak Kötü Sonuç
Ortadaki oyunda İhanet baskın stratejidir; denge (−2, −2), oysa (Sessiz, Sessiz) ikisine de (−1, −1) verirdi. Bireysel rasyonellik ortak kötü sonuç doğurur.
İşbirliği ve Koordinasyon
Karar Alma: Merkezi mi, Dağıtık mı?
Ajanlar çevresel bilgiye göre plan yapar. Kararı kim verir: tek bir merkez mi, her ajan kendisi mi?
| Merkezi kontrol | Dağıtık (tam otonomi) | |
|---|---|---|
| Avantaj | Tüm bilgi tek noktada: optimum hesaplanabilir; kolay koordinasyon, düşük çatışma riski | Esnek, ölçeklenebilir, yerel olaylara hızlı tepki; bir parça bozulunca sistem çalışmaya devam eder |
| Dezavantaj | Tek nokta hatası ve darboğaz; ajan sayısı artınca hesaplama patlar; ajanlar özel bilgisini dürüst bildirmeyebilir | Yerel bilgiyle alınan kararlar uyumsuz olabilir; bencil ajanlar verimsiz dengeye gidebilir (Anarşinin Bedeli) |
| Örnek | Trafik ışığı yönetim merkezi; sensör ağında merkezî sunucu | Drone takımları, otonom araçlar, robotik keşif |
İşbirliği ve Koordinasyon
Dağıtık Koordinasyon ve Konvansiyonlar
- Ajanlar merkez olmadan yerel bilgi ve mesajlaşma ile karar verir.
- Protokol; iletişim gecikmesi, hata toleransı ve ölçeklenebilirliği birlikte ele almalıdır.
- Ortak bilgi eksikliği uyumsuz planlara yol açar: iki robot dar koridorda karşılaşınca ikisi de aynı tarafa kaçabilir.
- Çözüm: konvansiyon / sosyal yasa ("herkes sağdan") — koordinasyon oyununda bir dengeyi önceden seçer.
| R1 ╲ R2 | Sağ | Sol |
|---|---|---|
| Sağ | (1, 1) | (−1, −1) |
| Sol | (−1, −1) | (1, 1) |
Koridor oyunu: iki saf Nash dengesi (turuncu)
İşbirliği ve Koordinasyon
MAS'te Oyun Kuramı ve Teşvikler
Doğru teşvik
- İşbirliğini artırır, çatışmayı azaltır.
Yanlış teşvik
- Bencil davranış, aşırı risk ve beleşçilik doğurur.
İşbirliği ve Koordinasyon
İletişim, Öğrenme ve Ortaya Çıkan Davranış
Görev Tahsisi
Görev ve Kaynak Tahsisi (Task Allocation)
- Amaç: yetenek ve maliyetleri dikkate alarak işleri uygun ajanlara dağıtmak (ör. toplam süreyi en aza indirmek).
- Zorluk: maliyetleri çoğu zaman yalnızca ajanın kendisi bilir (özel bilgi); ajan sayısı büyüktür; görevler zamanla gelir.
- İyi bir yöntem çözüm kalitesini iletişim ve hesaplama maliyetiyle dengeler.
| Yöntem | Nasıl çalışır? | Artı / eksi |
|---|---|---|
| Merkezi optimizasyon | Tüm maliyetler toplanır, atama problemi çözülür (Macar algoritması, O(n³)) | Optimum / tüm bilgi gerekir |
| Sözleşme ağı | Görev duyurulur, ajanlar teklif verir, en iyi teklif kazanır | Basit, dağıtık / açgözlü olabilir |
| Açık artırma | Görevler/kaynaklar teklifle satılır; kombinatoryal açık artırmada paketler | Teşvik uyumlu tasarlanabilir |
| Pazar tabanlı | Fiyatlar arz–talebe göre ayarlanır, ajanlar fiyata tepki verir | Ölçeklenir / yakınsama yavaş olabilir |
Görev Tahsisi
Sözleşme Ağı Protokolü (Contract Net Protocol)
Smith (1980): görevi olan ajan yönetici (manager), işi yapabilecek ajanlar yüklenici (contractor) rolündedir. Roller görev başına değişebilir.
Görev Tahsisi
Sözleşme Ağı Adım Adım: 3 Görev, 3 Robot
Yönetici üç görevi (G1–G3) sırayla ihaleye çıkaracak. Her robot en çok bir görev alabilir; kendi maliyetini (tahmini süre) yalnızca robot bilir — yönetici tabloyu görmez.
Duyuru (task announcement): yönetici G1 görevini boştaki robotlara yayınlar: Robot 1, Robot 2, Robot 3.
Teklifler (bid): her boş robot G1 için kendi maliyetini bildirir: R1 → 2, R2 → 3, R3 → 6.
Ödül (award): en düşük teklif Robot 1 (2 dk) — G1 ona verilir; robot artık meşgul.
Duyuru (task announcement): yönetici G2 görevini boştaki robotlara yayınlar: Robot 2, Robot 3.
Teklifler (bid): her boş robot G2 için kendi maliyetini bildirir: R2 → 7, R3 → 8.
Ödül (award): en düşük teklif Robot 2 (7 dk) — G2 ona verilir; robot artık meşgul.
Duyuru (task announcement): yönetici G3 görevini boştaki robotlara yayınlar: Robot 3.
Teklifler (bid): her boş robot G3 için kendi maliyetini bildirir: R3 → 9.
Ödül (award): en düşük teklif Robot 3 (9 dk) — G3 ona verilir; robot artık meşgul. Tek teklif kaldığı için seçim zorunlu.
Sonuç: sözleşme ağı toplam 18 dk (kırmızı). Tüm 6 atamayı deneyen optimum 13 dk (kesikli mavi): G1→R3, G2→R1, G3→R2. Açgözlü sıralı ihale %38 daha pahalı.
Gösterim: kesikli ok = duyuru · turuncu = teklif · kalın kırmızı ok / çerçeve = ödül · soluk robot = meşgul · kesikli mavi çerçeve = optimum atama.
Görev Tahsisi
Kod İzleme: sozlesme_agi(gorevler, maliyet)
gorevler = [G1, G2, G3] sırayla ihaleye çıkar. Tüm robotlar boş; atama henüz yok.
Duyuru: G1. Boştaki robotlar teklif verir: R1 → 2, R2 → 3, R3 → 6.
Ödül: en düşük teklif R1 (2 dk).
atama[G1] = R1, toplam = 2; R1 artık meşgul.
Duyuru: G2. Boştaki robotlar teklif verir: R2 → 7, R3 → 8.
Ödül: en düşük teklif R2 (7 dk).
atama[G2] = R2, toplam = 9; R2 artık meşgul. G1'i ucuza alan R1, G2 için de en ucuzdu (3) ama artık yok.
Duyuru: G3. Boştaki robotlar teklif verir: R3 → 9.
Ödül: en düşük teklif R3 (9 dk). Tek teklif: seçim zorunlu.
atama[G3] = R3, toplam = 18; R3 artık meşgul.
Sonuç 18 dk: her adımda yerel en iyi karar, ama toplam optimum değil.
def sozlesme_agi(gorevler, maliyet): bos = set(maliyet) atama, toplam = {}, 0 for g in gorevler: teklif = {r: maliyet[r][g] for r in bos} kazanan = min(teklif, key=teklif.get) atama[g] = kazanan toplam += teklif[kazanan] bos.remove(kazanan) return atama, toplam
Görev Tahsisi
Kod İzleme: optimum(gorevler, maliyet)
Merkezi çözüm: tüm maliyetleri bilen yönetici, 3 robotun 3! = 6 sıralamasını dener.
p = (R1, R2, R3): t = 2 + 7 + 9 = 18 ⇒ yeni en iyi.
p = (R1, R3, R2): t = 2 + 8 + 4 = 14 ⇒ yeni en iyi.
p = (R2, R1, R3): t = 3 + 3 + 9 = 15 ≥ 14: değişmez.
p = (R2, R3, R1): t = 3 + 8 + 5 = 16 ≥ 14: değişmez.
p = (R3, R1, R2): t = 6 + 3 + 4 = 13 ⇒ yeni en iyi.
p = (R3, R2, R1): t = 6 + 7 + 5 = 18 ≥ 13: değişmez.
Optimum 13 dk: G1→R3, G2→R1, G3→R2; sözleşme ağı 18 dk (%38 fazla). Ama n robot için n! atama: n = 10'da 3 628 800 (Macar algoritması O(n³) ile çözer).
def optimum(gorevler, maliyet): en_iyi = None for p in permutations(maliyet): t = sum(maliyet[r][g] for g, r in zip(gorevler, p)) if en_iyi is None or t < en_iyi[0]: en_iyi = (t, p) return en_iyi
Görev Tahsisi
Sözleşme Ağı: Güçlü ve Zayıf Yanlar
Güçlü yanlar
- Dağıtık: yönetici maliyet tablosunu bilmeden iyi bir atama yapar.
- Görev başına mesaj sayısı O(n): duyuru + n teklif + ödül.
- Yeni robot eklemek kolay; bozulan robotun görevi yeniden ihaleye çıkar.
Zayıf yanlar
- Açgözlü ve sıralı: örnekte 18 dk, optimum 13 dk (%38 fazla). G1'i ucuza alan R1, G2 için en iyi aday olduğu hâlde meşgul kaldı.
- Robotlar maliyetini stratejik olarak şişirebilir.
- Görev sırası sonucu değiştirir.
Koalisyon Oyunları
Koalisyon Oluşumu (Coalition Formation)
- Tek başına hedefe ulaşamayan ajanlar geçici veya kalıcı koalisyonlar kurabilir: kargo firmaları araç paylaşır, drone'lar ağır yükü birlikte taşır.
- Bu oyunlar işbirlikçidir: bağlayıcı anlaşma yapılabilir; soru "hangi strateji?" değil, "kim kiminle birleşir ve kazanç nasıl paylaşılır?"
- Paylaşım adil değilse koalisyon dağılır: kararlılık doğrudan paylaşım kuralına bağlıdır.
Koalisyon Oyunları
Koalisyon Yapıları: Kim Kiminle?
- Koalisyon yapısı: ajanların ayrık koalisyonlara bölünmesi. Toplum için soru: toplam değeri en büyük yapı hangisi?
- Yapı sayısı Bell sayısıdır: n = 3 için 5 n = 4 için 15 n = 8 için 4 140 n = 10 için 115 975.
- Örnekte oyun süperadditif: birleşmek hiç zarar vermez, en iyi yapı büyük koalisyon {A, B, C} (120).
- Genel durumda en iyi yapıyı bulmak NP-zordur (Sandholm vd., 1999); geriye kalan soru 120'nin paylaşımı.
Koalisyon Oyunları
Koalisyon Oyunu ve Karakteristik Fonksiyon
- Oyuncular kümesi N = {1, …, n}; her koalisyon S ⊆ N için v(S): S'nin üyeleri birlikte, diğerlerinden bağımsız olarak elde edebileceği toplam değer.
- v: 2N → ℝ, v(∅) = 0. Buna karakteristik fonksiyon denir; (N, v) aktarılabilir faydalı (TU) oyundur.
- Süperadditif: ayrık S, T için v(S ∪ T) ≥ v(S) + v(T) → birleşmek zarar vermez; büyük koalisyon N oluşur.
- Örnekte üç lojistik firması A, B, C: birlikte 120, en iyi ikili 70, tek başına en fazla 30 kazanır.
| S | v(S) |
|---|---|
| {A} | 10 |
| {B} | 20 |
| {C} | 30 |
| {A, B} | 50 |
| {A, C} | 60 |
| {B, C} | 70 |
| {A, B, C} | 120 |
v(S) — kâr (bin TL)
Koalisyon Oyunları
120 Nasıl Paylaşılmalı?
Bir paylaşım (imputation) x = (xA, xB, xC): toplamı v(N) = 120 (verimlilik) ve herkes en az tek başına değerini alır (bireysel rasyonellik).
| Öneri | xA | xB | xC | Gerekçe / sorun |
|---|---|---|---|---|
| Eşit bölüşüm | 40 | 40 | 40 | Basit; ama C'nin daha fazla katkısını yok sayar |
| Tek başına değerle orantılı (10 : 20 : 30) | 20 | 40 | 60 | Yalnızca v({i})'ye bakar; sinerjileri görmez |
| Güçlü C'nin önerisi | 10 | 25 | 85 | A ve B birlikte 50 alabilir; kabul etmezler |
| Shapley değeri | 30 | 40 | 50 | Ortalama marjinal katkı |
Koalisyon Oyunları
Shapley Değeri (Shapley Value)
- Oyuncular rastgele bir sırayla gelip koalisyona katılır. Her oyuncuya, geldiği anda kattığı değer (marjinal katkı) verilir.
- Shapley değeri: n! sıranın hepsi üzerinden ortalama marjinal katkı.
- Hesap maliyeti: n! sıra (ya da 2n−1 alt küme); büyük n için örnekleme ile yaklaşık hesaplanır.
- Shapley (1953): yandaki dört aksiyomu sağlayan tek kural. Model açıklamada (SHAP) da kullanılır.
Koalisyon Oyunları
Shapley Değeri Adım Adım: 6 Sıralama
| S | v(S) |
|---|---|
| {A} | 10 |
| {B} | 20 |
| {C} | 30 |
| {A, B} | 50 |
| {A, C} | 60 |
| {B, C} | 70 |
| {A, B, C} | 120 |
v(S)
| sıra | A | B | C |
|---|---|---|---|
| A → B → C | · | · | · |
| A → C → B | · | · | · |
| B → A → C | · | · | · |
| B → C → A | · | · | · |
| C → A → B | · | · | · |
| C → B → A | · | · | · |
| toplam | · | · | · |
| φ = toplam / 6 | · | · | · |
Her sırada ajanlar tek tek gelir; her birine geldiği anda koalisyona kattığı değer (marjinal katkı) yazılır.
| sıra | A | B | C |
|---|---|---|---|
| A → B → C | 10 | 40 | 70 |
| A → C → B | · | · | · |
| B → A → C | · | · | · |
| B → C → A | · | · | · |
| C → A → B | · | · | · |
| C → B → A | · | · | · |
| toplam | · | · | · |
| φ = toplam / 6 | · | · | · |
Sıra A → B → C — A: 10 − 0 = 10; B: 50 − 10 = 40; C: 120 − 50 = 70. Satır toplamı 120 = v(ABC).
| sıra | A | B | C |
|---|---|---|---|
| A → B → C | 10 | 40 | 70 |
| A → C → B | 10 | 60 | 50 |
| B → A → C | · | · | · |
| B → C → A | · | · | · |
| C → A → B | · | · | · |
| C → B → A | · | · | · |
| toplam | · | · | · |
| φ = toplam / 6 | · | · | · |
Sıra A → C → B — A: 10 − 0 = 10; C: 60 − 10 = 50; B: 120 − 60 = 60. Satır toplamı 120 = v(ABC).
| sıra | A | B | C |
|---|---|---|---|
| A → B → C | 10 | 40 | 70 |
| A → C → B | 10 | 60 | 50 |
| B → A → C | 30 | 20 | 70 |
| B → C → A | · | · | · |
| C → A → B | · | · | · |
| C → B → A | · | · | · |
| toplam | · | · | · |
| φ = toplam / 6 | · | · | · |
Sıra B → A → C — B: 20 − 0 = 20; A: 50 − 20 = 30; C: 120 − 50 = 70. Satır toplamı 120 = v(ABC).
| sıra | A | B | C |
|---|---|---|---|
| A → B → C | 10 | 40 | 70 |
| A → C → B | 10 | 60 | 50 |
| B → A → C | 30 | 20 | 70 |
| B → C → A | 50 | 20 | 50 |
| C → A → B | · | · | · |
| C → B → A | · | · | · |
| toplam | · | · | · |
| φ = toplam / 6 | · | · | · |
Sıra B → C → A — B: 20 − 0 = 20; C: 70 − 20 = 50; A: 120 − 70 = 50. Satır toplamı 120 = v(ABC).
| sıra | A | B | C |
|---|---|---|---|
| A → B → C | 10 | 40 | 70 |
| A → C → B | 10 | 60 | 50 |
| B → A → C | 30 | 20 | 70 |
| B → C → A | 50 | 20 | 50 |
| C → A → B | 30 | 60 | 30 |
| C → B → A | · | · | · |
| toplam | · | · | · |
| φ = toplam / 6 | · | · | · |
Sıra C → A → B — C: 30 − 0 = 30; A: 60 − 30 = 30; B: 120 − 60 = 60. Satır toplamı 120 = v(ABC).
| sıra | A | B | C |
|---|---|---|---|
| A → B → C | 10 | 40 | 70 |
| A → C → B | 10 | 60 | 50 |
| B → A → C | 30 | 20 | 70 |
| B → C → A | 50 | 20 | 50 |
| C → A → B | 30 | 60 | 30 |
| C → B → A | 50 | 40 | 30 |
| toplam | · | · | · |
| φ = toplam / 6 | · | · | · |
Sıra C → B → A — C: 30 − 0 = 30; B: 70 − 30 = 40; A: 120 − 70 = 50. Satır toplamı 120 = v(ABC).
| sıra | A | B | C |
|---|---|---|---|
| A → B → C | 10 | 40 | 70 |
| A → C → B | 10 | 60 | 50 |
| B → A → C | 30 | 20 | 70 |
| B → C → A | 50 | 20 | 50 |
| C → A → B | 30 | 60 | 30 |
| C → B → A | 50 | 40 | 30 |
| toplam | 180 | 240 | 300 |
| φ = toplam / 6 | 30 | 40 | 50 |
Ortalama marjinal katkı: φ = (30, 40, 50). Toplam 120: verimlilik aksiyomu sağlanır.
Koalisyon Oyunları
Kod İzleme: shapley(N, v) (1/2)
phi sözlüğü sıfırlanır; permutations (itertools) 3! = 6 sırayı üretir.
1. sıra (A, B, C): ajanlar bu sırayla gelir. S boş koalisyonla başlar.
A katılır: katkı = v(A) − v(∅) = 10 − 0 = 10; phi[A] = 10.
B katılır: katkı = v(AB) − v(A) = 50 − 10 = 40; phi[B] = 40.
C katılır: katkı = v(ABC) − v(AB) = 120 − 50 = 70; phi[C] = 70.
2. sıra (A, C, B): ajanlar bu sırayla gelir. S boş koalisyonla başlar.
A katılır: katkı = v(A) − v(∅) = 10 − 0 = 10; phi[A] = 20.
C katılır: katkı = v(AC) − v(A) = 60 − 10 = 50; phi[C] = 120.
B katılır: katkı = v(ABC) − v(AC) = 120 − 60 = 60; phi[B] = 100.
3. sıra (B, A, C): ajanlar bu sırayla gelir. S boş koalisyonla başlar.
B katılır: katkı = v(B) − v(∅) = 20 − 0 = 20; phi[B] = 120.
A katılır: katkı = v(AB) − v(B) = 50 − 20 = 30; phi[A] = 50.
C katılır: katkı = v(ABC) − v(AB) = 120 − 50 = 70; phi[C] = 190.
def shapley(N, v): phi = {i: 0 for i in N} siralar = list(permutations(N)) for sira in siralar: S = frozenset() for i in sira: katki = v[S | {i}] - v[S] phi[i] += katki S = S | {i} return {i: phi[i] / len(siralar) for i in N}
Koalisyon Oyunları
Kod İzleme: shapley(N, v) (2/2)
4. sıra (B, C, A): ajanlar bu sırayla gelir. S boş koalisyonla başlar.
B katılır: katkı = v(B) − v(∅) = 20 − 0 = 20; phi[B] = 140.
C katılır: katkı = v(BC) − v(B) = 70 − 20 = 50; phi[C] = 240.
A katılır: katkı = v(ABC) − v(BC) = 120 − 70 = 50; phi[A] = 100.
5. sıra (C, A, B): ajanlar bu sırayla gelir. S boş koalisyonla başlar.
C katılır: katkı = v(C) − v(∅) = 30 − 0 = 30; phi[C] = 270.
A katılır: katkı = v(AC) − v(C) = 60 − 30 = 30; phi[A] = 130.
B katılır: katkı = v(ABC) − v(AC) = 120 − 60 = 60; phi[B] = 200.
6. sıra (C, B, A): ajanlar bu sırayla gelir. S boş koalisyonla başlar.
C katılır: katkı = v(C) − v(∅) = 30 − 0 = 30; phi[C] = 300.
B katılır: katkı = v(BC) − v(C) = 70 − 30 = 40; phi[B] = 240.
A katılır: katkı = v(ABC) − v(BC) = 120 − 70 = 50; phi[A] = 180.
Toplamlar 6'ya bölünür: φA = 180/6 = 30, φB = 240/6 = 40, φC = 300/6 = 50. Toplam 120 = v(ABC).
def shapley(N, v): phi = {i: 0 for i in N} siralar = list(permutations(N)) for sira in siralar: S = frozenset() for i in sira: katki = v[S | {i}] - v[S] phi[i] += katki S = S | {i} return {i: phi[i] / len(siralar) for i in N}
Koalisyon Oyunları
Oyuna Dönüş: Shapley Koalisyon Oyunu
Oyunun ikili sinerji modelinde marjinal katkıların ortalaması kısa bir kurala iner: φi = tek başına değer + içinde yer aldığı her sinerjinin yarısı.
| Oyuncu | Tek | Sinerji payı | φ | Eşit pay |
|---|---|---|---|---|
| A | 6 | 4/2 + 2/2 = 3 | 9 | 7 |
| B | 4 | 4/2 + 0 = 2 | 6 | 7 |
| C | 5 | 2/2 + 0 = 1 | 6 | 7 |
| Toplam | 15 | 6 | 21 | 21 |
Altı katılım sırasının ortalaması da (9, 6, 6) verir. Eşit bölüşümde A, katkısının 2 altında kalır.
Üç kişilik koalisyon oyunlarında başkaları için “adil” paylaşım öneren deneklerin seçimleri, Shapley değeri ile eşit bölüşümün bir karışımı olarak en iyi açıklanmıştır (de Clippel ve Rozen, 2022). Örnekte yarı yarıya karışım (8; 6,5; 6,5) verir.
Oyundaki eşit bölüşüm hatası da bu farkı ölçer: |7 − 9| + |7 − 6| + |7 − 6| = 4.
Koalisyon Oyunları
Çekirdek (Core)
- x paylaşımı çekirdektedir ⇔ Σi∈N xᵢ = v(N) ve her S ⊆ N için Σi∈S xᵢ ≥ v(S).
- Yani hiçbir koalisyon büyük koalisyondan ayrılarak (block) üyelerine daha fazlasını sağlayamaz.
- Çekirdek bir doğrusal eşitsizlikler sistemidir (Gillies, 1959): bir çokyüzlü; boş, tek nokta ya da bölge olabilir.
Koalisyon Oyunları
Çekirdeğin Geometrisi Adım Adım
Bireysel rasyonel ve verimli tüm paylaşımlar bir üçgendir; köşede bir ajan artan 60'ın hepsini alır.
{A, B}: xA + xB ≥ 50 ⇔ xC ≤ 70: C'ye 70'ten fazlası verilirse A ve B ayrılıp kendi 50'lerini alır. C köşesi kesilir.
{A, C}: xA + xC ≥ 60 ⇔ xB ≤ 60: B köşesi kesilir.
{B, C}: xB + xC ≥ 70 ⇔ xA ≤ 50: A köşesi de kesilir. Kalan turuncu altıgen çekirdektir.
φ = (30, 40, 50) ve eşit bölüşüm çekirdekte (mavi). y = (10, 25, 85) dışarıda (kırmızı): xA + xB = 35 < 50.
Koalisyon Oyunları
Çekirdek Kontrolü Adım Adım
| koalisyon S | kısıt | x = (30, 40, 50) | y = (10, 25, 85) |
|---|---|---|---|
| {A} | Σ ≥ 10 | · | · |
| {B} | Σ ≥ 20 | · | · |
| {C} | Σ ≥ 30 | · | · |
| {A, B} | Σ ≥ 50 | · | · |
| {A, C} | Σ ≥ 60 | · | · |
| {B, C} | Σ ≥ 70 | · | · |
| {A, B, C} | toplam = 120 | · | · |
Bir paylaşım çekirdekteyse hiçbir koalisyon ayrılıp kendi değerini (v(S)) alarak daha iyi duruma geçemez. İki paylaşımı 7 kısıtla sınayalım.
| koalisyon S | kısıt | x = (30, 40, 50) | y = (10, 25, 85) |
|---|---|---|---|
| {A} | Σ ≥ 10 | 30 ✓ | 10 ✓ |
| {B} | Σ ≥ 20 | · | · |
| {C} | Σ ≥ 30 | · | · |
| {A, B} | Σ ≥ 50 | · | · |
| {A, C} | Σ ≥ 60 | · | · |
| {B, C} | Σ ≥ 70 | · | · |
| {A, B, C} | toplam = 120 | · | · |
{A}: v(A) = 10. x için 30 ≥ 10 ✓; y için 10 ≥ 10 ✓.
| koalisyon S | kısıt | x = (30, 40, 50) | y = (10, 25, 85) |
|---|---|---|---|
| {A} | Σ ≥ 10 | 30 ✓ | 10 ✓ |
| {B} | Σ ≥ 20 | 40 ✓ | 25 ✓ |
| {C} | Σ ≥ 30 | · | · |
| {A, B} | Σ ≥ 50 | · | · |
| {A, C} | Σ ≥ 60 | · | · |
| {B, C} | Σ ≥ 70 | · | · |
| {A, B, C} | toplam = 120 | · | · |
{B}: v(B) = 20. x için 40 ≥ 20 ✓; y için 25 ≥ 20 ✓.
| koalisyon S | kısıt | x = (30, 40, 50) | y = (10, 25, 85) |
|---|---|---|---|
| {A} | Σ ≥ 10 | 30 ✓ | 10 ✓ |
| {B} | Σ ≥ 20 | 40 ✓ | 25 ✓ |
| {C} | Σ ≥ 30 | 50 ✓ | 85 ✓ |
| {A, B} | Σ ≥ 50 | · | · |
| {A, C} | Σ ≥ 60 | · | · |
| {B, C} | Σ ≥ 70 | · | · |
| {A, B, C} | toplam = 120 | · | · |
{C}: v(C) = 30. x için 50 ≥ 30 ✓; y için 85 ≥ 30 ✓.
| koalisyon S | kısıt | x = (30, 40, 50) | y = (10, 25, 85) |
|---|---|---|---|
| {A} | Σ ≥ 10 | 30 ✓ | 10 ✓ |
| {B} | Σ ≥ 20 | 40 ✓ | 25 ✓ |
| {C} | Σ ≥ 30 | 50 ✓ | 85 ✓ |
| {A, B} | Σ ≥ 50 | 70 ✓ | 35 ✗ |
| {A, C} | Σ ≥ 60 | · | · |
| {B, C} | Σ ≥ 70 | · | · |
| {A, B, C} | toplam = 120 | · | · |
{A, B}: v(AB) = 50. x için 70 ≥ 50 ✓; y için 35 ≥ 50 ✗. {A, B} birlikte ayrılırsa 50 alır: y'yi engeller (block).
| koalisyon S | kısıt | x = (30, 40, 50) | y = (10, 25, 85) |
|---|---|---|---|
| {A} | Σ ≥ 10 | 30 ✓ | 10 ✓ |
| {B} | Σ ≥ 20 | 40 ✓ | 25 ✓ |
| {C} | Σ ≥ 30 | 50 ✓ | 85 ✓ |
| {A, B} | Σ ≥ 50 | 70 ✓ | 35 ✗ |
| {A, C} | Σ ≥ 60 | 80 ✓ | 95 ✓ |
| {B, C} | Σ ≥ 70 | · | · |
| {A, B, C} | toplam = 120 | · | · |
{A, C}: v(AC) = 60. x için 80 ≥ 60 ✓; y için 95 ≥ 60 ✓.
| koalisyon S | kısıt | x = (30, 40, 50) | y = (10, 25, 85) |
|---|---|---|---|
| {A} | Σ ≥ 10 | 30 ✓ | 10 ✓ |
| {B} | Σ ≥ 20 | 40 ✓ | 25 ✓ |
| {C} | Σ ≥ 30 | 50 ✓ | 85 ✓ |
| {A, B} | Σ ≥ 50 | 70 ✓ | 35 ✗ |
| {A, C} | Σ ≥ 60 | 80 ✓ | 95 ✓ |
| {B, C} | Σ ≥ 70 | 90 ✓ | 110 ✓ |
| {A, B, C} | toplam = 120 | · | · |
{B, C}: v(BC) = 70. x için 90 ≥ 70 ✓; y için 110 ≥ 70 ✓.
| koalisyon S | kısıt | x = (30, 40, 50) | y = (10, 25, 85) |
|---|---|---|---|
| {A} | Σ ≥ 10 | 30 ✓ | 10 ✓ |
| {B} | Σ ≥ 20 | 40 ✓ | 25 ✓ |
| {C} | Σ ≥ 30 | 50 ✓ | 85 ✓ |
| {A, B} | Σ ≥ 50 | 70 ✓ | 35 ✗ |
| {A, C} | Σ ≥ 60 | 80 ✓ | 95 ✓ |
| {B, C} | Σ ≥ 70 | 90 ✓ | 110 ✓ |
| {A, B, C} | toplam = 120 | 120 ✓ | 120 ✓ |
{A, B, C}: v(ABC) = 120. x için 120 = 120 ✓; y için 120 = 120 ✓.
| koalisyon S | kısıt | x = (30, 40, 50) | y = (10, 25, 85) |
|---|---|---|---|
| {A} | Σ ≥ 10 | 30 ✓ | 10 ✓ |
| {B} | Σ ≥ 20 | 40 ✓ | 25 ✓ |
| {C} | Σ ≥ 30 | 50 ✓ | 85 ✓ |
| {A, B} | Σ ≥ 50 | 70 ✓ | 35 ✗ |
| {A, C} | Σ ≥ 60 | 80 ✓ | 95 ✓ |
| {B, C} | Σ ≥ 70 | 90 ✓ | 110 ✓ |
| {A, B, C} | toplam = 120 | 120 ✓ | 120 ✓ |
Sonuç: Shapley paylaşımı x çekirdekte; y ise {A, B} tarafından engellendiği için çekirdek dışında. (Oyun dışbükey olduğundan Shapley değeri çekirdektedir.)
Koalisyon Oyunları
Çekirdeği Boş Bir Oyun: Çoğunluk Oyunu
- Üç ajan 1 birimlik ödülü paylaşacak; herhangi iki ajan anlaşırsa ödülü alır: v(S) = 1 (|S| ≥ 2), aksi hâlde 0.
- Çekirdek kısıtları: xA+xB ≥ 1, xA+xC ≥ 1, xB+xC ≥ 1.
- Toplayınca 2(xA+xB+xC) ≥ 3, yani toplam ≥ 3/2. Ama toplam = 1 olmalı ⇒ çekirdek boş.
- Her paylaşımda en az bir çift ≤ 2/3 alır ve üçüncüyü dışlayıp 1'i paylaşmak ister: sonsuz pazarlık.
Koalisyon Oyunları
Ağırlıklı Oylama: Ağırlık ≠ Güç
- Ağırlıklı oylama oyunu [q; w1, …, wn]: koalisyon ağırlıkları toplamı q'ya ulaşırsa kazanır, v(S) = 1; yoksa 0.
- Shapley–Shubik endeksi (1954) = bu oyunun Shapley değeri: i'nin kilit (pivotal) olduğu sıraların oranı.
- Meclis [51; 50, 49, 1]: B ile C, 48 sandalye farkına rağmen eşit güçtedir (1/6); Banzhaf endeksi kritik üyelikleri sayar: A üç kazanan koalisyonda ({A, B}, {A, C}, {A, B, C}), B ve C birer koalisyonda kilittir ⇒ (3/5, 1/5, 1/5).
- 1958 AET Bakanlar Konseyi [12; 4, 4, 4, 2, 2, 1]: Lüksemburg'un oyu hiçbir koalisyonun sonucunu değiştiremiyordu, güç = 0.
Koalisyon Oyunları
Kod İzleme: guc_endeksi(N, w, q)
w = {A: 50, B: 49, C: 1}, q = 51. 3! = 6 geliş sırası; her sırada kotayı geçiren oyuncu kilittir.
Sıra A → B → C: toplam 50 < 51 iken B gelir, toplam 99 ≥ 51.
B kilit: kilit[B] = 1; break ile sıradaki geliş sırasına geçilir.
Sıra A → C → B: toplam 50 < 51 iken C gelir, toplam 51 ≥ 51.
C kilit: kilit[C] = 1; break ile sıradaki geliş sırasına geçilir.
Sıra B → A → C: toplam 49 < 51 iken A gelir, toplam 99 ≥ 51.
A kilit: kilit[A] = 1; break ile sıradaki geliş sırasına geçilir.
Sıra B → C → A: toplam 50 < 51 iken A gelir, toplam 100 ≥ 51.
A kilit: kilit[A] = 2; break ile sıradaki geliş sırasına geçilir.
Sıra C → A → B: toplam 1 < 51 iken A gelir, toplam 51 ≥ 51.
A kilit: kilit[A] = 3; break ile sıradaki geliş sırasına geçilir.
Sıra C → B → A: toplam 50 < 51 iken A gelir, toplam 100 ≥ 51.
A kilit: kilit[A] = 4; break ile sıradaki geliş sırasına geçilir.
Güç = kilit / 6 ⇒ (2/3, 1/6, 1/6). B'nin 49 sandalyesi C'nin 1 sandalyesinden fazla güç getirmiyor.
def guc_endeksi(N, w, q): kilit = {i: 0 for i in N} siralar = list(permutations(N)) for sira in siralar: toplam = 0 for i in sira: toplam += w[i] if toplam >= q: kilit[i] += 1 break return {i: kilit[i] / len(siralar) for i in N}
Kamu Malı Oyunu
Kamu Malı Oyunu (Public Goods Game)
- Kamu malı: kimse kullanımdan dışlanamaz ve bir kişinin kullanımı diğerininkini azaltmaz (ör. açık kaynak yazılım, temiz hava, ortak veri kümesi).
- Oyun: n oyuncu, her biri e jeton. Oyuncu i ortak havuza ci ∈ [0, e] katar. Havuz r çarpanıyla büyür ve herkese eşit dağıtılır.
- Kazanç: uᵢ = e − cᵢ + (r/n)·Σⱼ cⱼ
- r/n: bir jetonun katkı yapana geri dönen kısmı (MPCR). 1/n < r/n < 1 ise ikilem vardır.
Kamu Malı Oyunu
Kamu Malı Oyunu: Dört Senaryo
| senaryo | katkılar | havuz × 1,6 | kazançlar (O1, O2, O3, O4) | toplam |
|---|---|---|---|---|
| Herkes tam katkı | · | · | · | · |
| Kimse katkı vermez | · | · | · | · |
| Bir beleşçi | · | · | · | · |
| Tek katkıcı | · | · | · | · |
Her oyuncu 10 jetonla başlar. Katkıların toplamı 1,6 ile çarpılır ve 4 kişiye eşit dağıtılır: ui = 10 − ci + 0,4·Σc.
| senaryo | katkılar | havuz × 1,6 | kazançlar (O1, O2, O3, O4) | toplam |
|---|---|---|---|---|
| Herkes tam katkı | (10, 10, 10, 10) | 64 | (16, 16, 16, 16) | 64 |
| Kimse katkı vermez | · | · | · | · |
| Bir beleşçi | · | · | · | · |
| Tek katkıcı | · | · | · | · |
Herkes 10 verir: havuz 40 × 1,6 = 64; herkes 16 alır. Toplam refah en yüksek: 64.
| senaryo | katkılar | havuz × 1,6 | kazançlar (O1, O2, O3, O4) | toplam |
|---|---|---|---|---|
| Herkes tam katkı | (10, 10, 10, 10) | 64 | (16, 16, 16, 16) | 64 |
| Kimse katkı vermez | (0, 0, 0, 0) | 0 | (10, 10, 10, 10) | 40 |
| Bir beleşçi | · | · | · | · |
| Tek katkıcı | · | · | · | · |
Kimse vermez: herkes 10'unu tutar; toplam 40. Herkes tam katkıya göre 6 jeton kaybeder.
| senaryo | katkılar | havuz × 1,6 | kazançlar (O1, O2, O3, O4) | toplam |
|---|---|---|---|---|
| Herkes tam katkı | (10, 10, 10, 10) | 64 | (16, 16, 16, 16) | 64 |
| Kimse katkı vermez | (0, 0, 0, 0) | 0 | (10, 10, 10, 10) | 40 |
| Bir beleşçi | (0, 10, 10, 10) | 48 | (22, 12, 12, 12) | 58 |
| Tek katkıcı | · | · | · | · |
O1 beleşçi (0), diğerleri 10: havuz 30 × 1,6 = 48, kişi başı 12. Beleşçi 22 alır — tam katkıdaki 16'dan fazla!
| senaryo | katkılar | havuz × 1,6 | kazançlar (O1, O2, O3, O4) | toplam |
|---|---|---|---|---|
| Herkes tam katkı | (10, 10, 10, 10) | 64 | (16, 16, 16, 16) | 64 |
| Kimse katkı vermez | (0, 0, 0, 0) | 0 | (10, 10, 10, 10) | 40 |
| Bir beleşçi | (0, 10, 10, 10) | 48 | (22, 12, 12, 12) | 58 |
| Tek katkıcı | (10, 0, 0, 0) | 16 | (4, 14, 14, 14) | 46 |
Tek katkıcı: O1 10 verir, havuz 16, kişi başı 4. Katkıcı 4 alır (başladığı 10 jetonun 6 eksiği); diğerleri 14.
Kamu Malı Oyunu
Neden Beleşçilik (Free Riding)?
- u1 = 10 − c1 + 0,4·(c1 + diğerleri) ⇒ ∂u1/∂c1 = −1 + 0,4 = −0,6.
- Diğerleri ne yaparsa yapsın her jeton katkı O1'e 0,6 kaybettirir: c = 0 baskın strateji.
- Tek Nash dengesi: herkes 0 → kişi başı 10. Oysa herkes 10 verse kişi başı 16: denge Pareto optimal değil.
- Kırmızı doğru: diğerleri tam katkı verirken O1'in kazancı 22'den 16'ya düşer. Mavi: herkes aynı c'yi verirse kişi başı 10'dan 16'ya çıkar.
Kamu Malı Oyunu
Deneyler ve Beleşçiliğe Karşı Çözümler
Laboratuvar bulguları
- İlk turda katkılar genellikle bütçenin %40–60'ı; teori 0 der (Ledyard, 1995).
- Tekrarlanan turlarda katkılar giderek düşer: deneklerin yaklaşık yarısı koşullu işbirlikçidir, beleşçilere tepki verir (Fischbacher, Gächter, Fehr, 2001).
- Maliyetli ceza imkânı verilince katkılar yüksek kalır (Fehr ve Gächter, 2000).
- MAS örneği: dosya paylaşım ağında yükleme yapmadan yalnızca indirmek.
Kamu Malı Oyunu
Kod İzleme: kosullu_katki(c, tur)
Model: O1 hep 0 verir; O2–O4 koşullu işbirlikçi: bu tur, diğerlerinin önceki turdaki ortalaması kadar verir.
t = 0: O2 için diğerlerinin toplamı 20 ⇒ ortalama 20 / 3 = 6,7 (O3, O4 de aynı).
Tur 1: katkılar [0, 6.7, 6.7, 6.7]. Beleşçi O1, herkesten fazla kazanır.
t = 1: O2 için diğerlerinin toplamı 13,3 ⇒ ortalama 13,3 / 3 = 4,4 (O3, O4 de aynı).
Tur 2: katkılar [0, 4.4, 4.4, 4.4]. Her tur katkı bir önceki değerin üçte ikisine iner (üçte bir oranında azalır).
t = 2: O2 için diğerlerinin toplamı 8,9 ⇒ ortalama 8,9 / 3 = 3,0 (O3, O4 de aynı).
Tur 3: katkılar [0, 3.0, 3.0, 3.0].
t = 3: O2 için diğerlerinin toplamı 5,9 ⇒ ortalama 5,9 / 3 = 2,0 (O3, O4 de aynı).
Tur 4: katkılar [0, 2.0, 2.0, 2.0].
t = 4: O2 için diğerlerinin toplamı 4,0 ⇒ ortalama 4,0 / 3 = 1,3 (O3, O4 de aynı).
Tur 5: katkılar [0, 1.3, 1.3, 1.3].
5 turda katkı 10 → 1,3: tek beleşçi, çoğunluğun işbirliğini çözer (laboratuvardaki düşüşün basit modeli).
def kosullu_katki(c, tur): gecmis = [c] for t in range(tur): yeni = [0] # O1 hep beleşçi for i in range(1, len(c)): digerleri = sum(c) - c[i] yeni.append(digerleri / (len(c) - 1)) c = yeni gecmis.append(c) return gecmis
Özet
Özet
Özet
Etkileşimli Oyunlar
Özet
Örnek Problemler
- Sözleşme ağı örneğinde görevler G3, G2, G1 sırasıyla ihaleye çıksaydı atama ve toplam süre ne olurdu?
- Eldiven oyunu: A'nın sol, B ve C'nin sağ eldiveni var; bir çift 1 değerinde. v'yi yazın, Shapley değerini hesaplayın.
- Aynı eldiven oyununun çekirdeği nedir?
- Ana örnekte (40, 40, 40) çekirdekte mi? (20, 25, 75) çekirdekte mi?
- Kamu malı: n = 5, e = 10, r = 2. Herkes tam katkı verirse ve biri beleşçi olursa kazançlar?
- Kamu malı oyununda r ≥ n olsaydı baskın strateji ne olurdu?
Cevapları göster
- G3→R2; G2→R1; G1→R3: toplam 13 dk — bu sırada optimuma ulaşılır; sıra sonucu değiştirir.
- v = 1 yalnızca A'yı ve en az bir sağ eldiveni içeren koalisyonlarda. φ = (2/3, 1/6, 1/6).
- Tek nokta (1, 0, 0): xA+xB ≥ 1 ve xA+xC ≥ 1 ⇒ xB = xC = 0. Shapley çekirdekte değil.
- (40, 40, 40): tüm kısıtlar sağlanır, çekirdekte. (20, 25, 75): xA+xB = 45 < 50 ⇒ değil.
- Herkes 10: havuz 50·2 = 100, herkes 20. Biri 0: havuz 80, kişi başı 16; beleşçi 26, diğerleri 16.
- r/n ≥ 1 ⇒ her jeton kendine en az 1 döndürür: tam katkı (zayıf) baskın; ikilem kalkar.
Özet
Kaynaklar
- M. Wooldridge, An Introduction to MultiAgent Systems, 2. baskı, Wiley, 2009.
- Y. Shoham, K. Leyton-Brown, Multiagent Systems: Algorithmic, Game-Theoretic, and Logical Foundations, Cambridge University Press, 2009 (Bölüm 12).
- G. Chalkiadakis, E. Elkind, M. Wooldridge, Computational Aspects of Cooperative Game Theory, Morgan & Claypool, 2011.
- R. G. Smith, "The contract net protocol: High-level communication and control in a distributed problem solver", IEEE Trans. Computers C-29(12), 1980.
- L. S. Shapley, "A value for n-person games", Contributions to the Theory of Games II, Princeton, 1953; "Cores of convex games", Int. J. Game Theory 1, 1971; L. S. Shapley, M. Shubik, APSR 48(3), 1954.
- G. de Clippel, K. Rozen, "Fairness through the lens of cooperative game theory: An experimental approach", American Economic Journal: Microeconomics 14(3), 2022.
- J. O. Ledyard, "Public goods: A survey of experimental research", Handbook of Experimental Economics, 1995.
- E. Fehr, S. Gächter, "Cooperation and punishment in public goods experiments", American Economic Review 90(4), 2000; U. Fischbacher, S. Gächter, E. Fehr, "Are people conditionally cooperative?", Economics Letters 71(3), 2001.
- T. Sandholm vd., "Coalition structure generation with worst case guarantees", Artificial Intelligence 111, 1999.
Özet
Kaynaklar: Kitaplar, Dersler ve Araçlar
- A. R. Karlin, Y. Peres, Game Theory, Alive, American Mathematical Society, 2017 (koalisyonlar ve Shapley değeri bölümü).
- N. Nisan, T. Roughgarden, É. Tardos, V. Vazirani (ed.), Algorithmic Game Theory, Cambridge University Press, 2007 (Bölüm 15: maliyet paylaşımı, çekirdek ve Shapley değeri).
- C. W. Reynolds, "Flocks, herds and schools: A distributed behavioral model", SIGGRAPH '87, 1987; T. C. Schelling, "Dynamic models of segregation", J. Mathematical Sociology 1(2), 1971.
- FIPA, Contract Net Interaction Protocol Specification (SC00029H), 2002.
- M. Wooldridge, N. R. Jennings, "Intelligent agents: Theory and practice", Knowledge Engineering Review 10(2), 1995; D. B. Gillies, "Solutions to general non-zero-sum games", Contributions to the Theory of Games IV, Princeton, 1959.
- O. N. Bondareva, "Some applications of linear programming methods to the theory of cooperative games", Problemy Kibernetiki 10, 1963; L. S. Shapley, "On balanced sets and cores", Naval Research Logistics Quarterly 14(4), 1967; J. Schaeffer vd., "Checkers is solved", Science 317(5844), 2007.
- Ders sayfaları: N. Shah, CSC304 (Toronto) · A. Procaccia, 15-896 (CMU) · T. Roughgarden, CS364A (Stanford) · M. Hoefer, AGT (Frankfurt)
- Araçlar: Nashpy (iki oyunculu oyunlarda Nash dengesi; ör. çıkar yelpazesindeki üç oyun) · Gambit (açık kaynak oyun kuramı araçları).
Son
Çalışma soruları · Terim sözlüğü