Rozdział 1 Gry niekooperacyjne w postaci strategicznej 1.1 Gry dwuosobowe o sumie zerowej Większość teorii matematycznych powstała do opisu pewnych konkretnych elementów rzeczywistości i nie inaczej jest z teorią gier. Ją stworzono dla opisu sytuacji konfliktowych i sposobów z nich wychodzenia, bądź przez współzawodnictwo, bądź przez kooperację. Oczywiście w założeniu taka teoria powinna dawać odpowiedź na pytanie: jak w danej sytuacji ludzie postąpią – niestety, jak w każdej teorii, teoria gier ma swoje założenia, w które ludzie, głupi, nie chcą się wpasować. Wniosek z tego taki, że teoria gier nie jest najlepszym narzędziem przewidywania przyszłości – do tego wciąż najlepsza jest szklana kula – może nam natomiast dać odpowiedź na pytanie, jak powinni postąpić, jeśli byliby racjonalni. I od paru słów na temat tego, jak opisać sytuację konfliktu, oraz tego, co będziemy rozumieć pod pojęciem racjonalności, zaczniemy. Zastanowimy się nad tym na prostym przykładzie sytuacji, w której mamy dwóch podejmujących decyzje i ich interesy są całkowicie przeciwstawne, więc nie ma mowy o jakiejkolwiek kooperacji, i dzięki temu można w miarę jasno wyekstrahować istotę tego, jakie działanie możemy rozumieć jako racjonalne. Większość przykładów, które będą się pojawiały na tym wykładzie, będzie jakimś uproszczeniem sytuacji z życia wziętych, ewentualnie będzie opisywało jakieś zjawiska ekonomiczne – tyle że tam bardzo trudno o sytuacje, w których interesy poszczególnych stron są całkowicie przeciwstawne – stąd przykład będzie z dziedziny „gier wojennych”, czyli w praktyce takiej zabawy w żołnierzyki dla dużych chłopców. Przykład: Rozważamy następującą sytuację: dwóch dowódców armii przeciwnych państw – A i B walczy o dwa forty (miasta) na terenie państwa A, każdy ma przy tym do dyspozycji po dwa oddziały. Zadaniem każdego z dowódców jest rozmieszczenie swoich oddziałów w poszczególnych fortach (ewent. jako atakujących poszczególne forty) – generał armii A w ten sposób, żeby jak najwięcej fortów pozostało w rękach państwa A, generał B – tak, żeby przejąć jak najwięcej fortów. Wiedzą przy tym, że armia posiadająca na danym odcinku przeważającą siłę na pewno bitwę o dany fort wygra, a jeśli siły są równe, to z prawdopodobieństwem 12 wygra jeden, i z prawdopodobieństwem 21 drugi. Jeśli o dany fort nie toczy się walka, to zostaje on we władaniu państwa A. Taka bardzo prosta gra. W naturalny sposób możemy to opisać tak, że wypiszemy wszystkie możliwe decyzje jednego gracza, wszystkie możliwe decyzje drugiego, i w tabelce zapiszemy, co się w danym 1 przypadku dzieje: 20 11 20 fort 1 z pr.0.5 zdobyty przez B, fort 2 zostaje w A . . . 11 ... ... 02 ... ... 02 ... ... ... Teraz co z informacji, które zawarliśmy w tabelce jest istotne - na co będą zwracać uwagę podejmujący decyzje? Na to, ilu żołnierzy poległo, dostało się do niewoli, który oddział wygrał, a który przegrał – nie! Istotny jest tylko efekt końcowy, czyli to, ile fortów zdobyto, i (ewentualnie), czy efekt (pozytywny) operacji jest pewny, czy tylko z pewnym prawdopodobieństwem. W takim razie po odrzuceniu nadmiarowej informacji dostajemy taki opis gry: 20 11 02 20 −0.5 −1 −1 11 −1 −1 −1 02 −1 −1 −0.5 I w ten sposób dostaliśmy naturalny opis gry – przy pomocy zbiorów strategii dostępnych poszczególnym graczom oraz macierzy tego, co wypłaca drugi gracz pierwszemu w zależności od tego, jakie strategie stosują. Ogólnie: Definicja 1.1 Grą dwuosobową o sumie zerowej nazwiemy trójkę (X, Y, u), gdzie: X – zbiór strategii gracza 1., Y – zbiór strategii gracza 2., u : X × Y → R – ograniczona funkcja wypłaty. Gra rozgrywana jest w następujący sposób: gracze niezależnie od siebie wybierają x ∈ X oraz y ∈ Y , następnie gracz 2. płaci graczowi 1. kwotę u(x, y). Drugim problemem, który postawiliśmy, było to, co będzie uważane za racjonalne w grze. Wróćmy do naszego przykładu i zastanówmy się, jak postąpią gracze, i dlaczego? ↓ 11 −1 −1 −1 20 → 20 −0.5 lub 11 −1 → 02 −1 02 −1 −1 −0.5 Drugi gracz (generał B) wybiera drugą kolumnę, bo wtedy powinien zdobyć jeden fort niezależnie od tego, co zrobi pierwszy (generał A). Generał A natomiast wybierze jedną z możliwości przy których może coś zyskać, czyli 1. lub 3. wiersz. Na tej podstawie możemy zapisać, że za racjonalne będziemy uważać takie zachowania jak: 1. Maksymalizowanie własnej wypłaty 2. Unikanie sytuacji, w których możemy więcej stracić, jeśli przeciwnik zagra dla nas niekorzystnie 3. Odrzucanie decyzji, od których mamy lepsze Zgodnie z tymi zasadami (przynajmniej z dwoma pierwszymi) gracz 1. będzie się starał wybrać taką strategię, żeby zmaksymalizować swoją wypłatę przy założeniu, że przeciwnik będzie się starał mu jak najbardziej zaszkodzić. Podobnie – gracz 2. będzie wybierał tak, żeby wypłacić graczowi 1. jak najmniej, zakładając, że ten będzie grał w najbardziej dla siebie korzystny sposób. Patrząc na przykład, widzimy, że gracze właśnie tak robią. Spróbujmy to teraz sformalizować. 2 Definicja 1.2 Wartość, którą gracz 1. może sobie zapewnić, nazywana wartością dolną gry, jest równa v = sup inf u(x, y). x∈X y∈Y Wartość najmniejszej straty poniesionej przez gracza 2., którą może sobie zapewnić, nazywana jest wartością górną gry i jest równa v = inf sup u(x, y). y∈Y x∈X Można udowodnić (i my to pokażemy na ćwiczeniach), że v ¬ v. W naszym przykładzie mamy równość. Ale czy zawsze jest równość? Nie. Np. w grze z X = Y = {1, 2} oraz ( 1 gdy x = y u(x, y) = , v = −1, a v = 1. −1 gdy x 6= y Czym się zatem różnią dwa podane przez nas przykłady? Otóż w pierwszym z nich istnieją takie strategie x∗ ∈ X, y ∗ ∈ Y , że u(x∗ , y ∗ ) = supx∈X u(x, y ∗ ) = inf y∈Y u(x∗ , y). Z tego wynika, że v = sup inf u(x, y) ­ inf u(x∗ , y) = sup u(x, y ∗ ) ­ inf sup u(x, y) = v. x∈X y∈Y y∈Y x∈X y∈Y x∈X Czyli wartość górna jest równa wartości dolnej (i w dodatku równa wypłacie gracza 1., gdy gracze używają strategii x∗ i y ∗ ). Definicja 1.3 Jeśli v = v, to tę wspólną wartość nazywamy wartością gry i oznaczamy przez v. Jeśli dodatkowo istnieją x∗ ∈ X, y ∗ ∈ Y , takie że u(x∗ , y ∗ ) = supx∈X u(x, y ∗ ) = inf y∈Y u(x∗ , y), mówimy, że strategie x∗ i y ∗ są optymalne dla graczy 1. i 2., lub że (x∗ , y ∗ ) tworzą punkt siodłowy w grze. Uwaga 1.1 Mówimy o strategiach optymalnych poszczególnych graczy, a nie tylko o optymalnej parze strategii, bo strategie optymalne danego gracza można między sobą wymieniać (ten fakt udowodnimy sobie na ćwiczeniach). Mamy zatem pewną koncepcję rozwiązania, przynajmniej dla pewnej klasy gier o sumie zerowej. Nie dla wszystkich jednak, a chcięlibyśmy mieć jakąś możliwość rozwiązania możliwie jak najszerszej klasy gier. Na pewien pomysł, jak to zrobić, wpadł von Neumann, i temu jego pomysłowi poświęcimy resztę wykładu. Ten sposób będzie skuteczny tylko dla gier ze skończonymi zbiorami akcji graczy. Wypłaty dla takich gier (jak w przykładzie) można zapisać przy pomocy macierzy, stąd będziemy je nazywać grami macierzowymi. Gry macierzowe o sumie zerowej X = {1, 2, . . . , m} – zbiór wierszy macierzy, Y = {1, 2, . . . , n} – zbiór kolumn macierzy Wypłatę gracza 1. zapisujemy przy pomocy macierzy m × n A = [u(i, j)], i ∈ X, j ∈ Y . Rozszerzenie mieszane gry macierzowej zdefiniowanej powyżej: Zbiorami strategii graczy są P (X) i P (Y ) (gdzie P (A) oznacza zbiór rozkładów prawdopodobieństwa o nośniku w zbiorze A). Elementy µ ∈ P (X) oraz σ ∈ P (Y ) będziemy nazywać strategiami mieszanymi graczy (w odróżnieniu od elementów X i Y , które nazywamy strategiami czystymi), a wypłatę definiujemy następująco: u(µ, σ) = XX i u(i, j)µi σj , j gdzie µi to prawdopodobieństwo wylosowania i z rozkładu µ, a σj – prawdopodobieństwo wylosowania j z σ. 3 Oczywiście praktycznie rozszerzenie mieszane interpretuje się w ten sposób, że gracze, zamiast wybrać jeden wiersz (jedną kolumnę) macierzy A, wybierają rozkład prawdopodobieństwa, zgodnie z którym losują ten wiersz (tę kolumnę), a jako wypłaty graczy stosujemy wartość oczekiwaną z ich wypłat. Jeśli zastosujemy rozszerzenie mieszane, prawdziwe będzie następujące twierdzenie: Twierdzenie 1.1 (von Neumann, 1928) W każdej grze macierzowej o sumie zerowej istnieje para optymalnych strategii mieszanych tzn. µ∗ ∈ P (X), σ ∗ ∈ P (Y ) takie że u(µ, σ ∗ ) ¬ u(µ∗ , σ ∗ ) ¬ u(µ∗ , σ) ∀µ ∈ P (X), σ ∈ P (Y ). Dowodu tego twierdzenia nie będę podawał, bo wynika z twierdzenia Nasha, które udowodnimy za tydzień. Wniosek 1.1 W strategiach mieszanych każda gra macierzowa posiada wartość. Uwaga 1.2 To że u(µ, σ) = v nie oznacza, że µ i σ są optymalne. Np. w grze z macierzą wypłat " # 1 0 A= 0 0 wybór pierwszej kolumny i drugiego wiersza nie jest optymalny, a wartość gry jest równa 0. Niestety, trick z rozszerzeniem mieszanym nie działa już dla gier z większymi zbiorami akcji graczy. Łatwo znaleźć przykład gry z przeliczalnymi zbiorami strategii czystych, dla której gra nie posiada wartości w strategiach mieszanych. Przykład: Niech X = Y = {1, 2, . . .} oraz u(x, y) = sgn(x − y). Rozważmy rozszerzenie P P µi = 1}, P (Y ) = {σ : σi ­ 0, ∞ mieszane tej gry: P (X) = {µ : µi ­ 0, ∞ i=1 σi = 1}, i=1 P∞ P∞ u(µ, σ) = i=1 j=1 u(i, j)µi σj . W takiej grze v = −1, a v = 1. Oba te fakty pokazuje się podobnie, więc udowodnię tylko pierwszy. Weźmy dowolne µ ∈ P P (X) oraz ε > 0. Niech nε będzie takie, że ∞ i=nε +1 µi < ε. Określmy teraz strategię gracza 2. jako σµ = δ[nε ]. u(µ, σµ ) = ∞ X u(i, nε )µi = i=1 = − nX ε −1 (−1)µi + i=1 ∞ X µi − µnε + 2 i=1 ∞ X (1)µi i=nε +1 ∞ X µi < −1 + 2ε i=nε +1 Ponieważ ε było dowolne, dostajemy inf u(µ, σ) ¬ −1, σ∈P (Y ) ale skoro dowolnie było też wybrane µ, to mamy sup inf u(µ, σ) ¬ −1. µ∈P (X) σ∈P (Y ) Oczywiście w rzeczywistości mamy równość, bo w grze nie ma wypłat mniejszych niż -1. 4 1.2 Gry o sumie niezerowej Na ostatnim wykładzie mówiłem o grach opisujących sytuację, gdy mamy dwóch graczy, których interesy są całkowicie przeciwstawne – taką sytuację opisywały gry macierzowe, czy ogólniej gry dwuosobowe o sumie zerowej. Dzisiaj uogólniamy tamten model. Zaczniemy od sytuacji, gdy mamy dwóch graczy, których interesy nie są dokładnie przeciwne. Gry dwumacierzowe Niech X = {1, 2, . . . , m} – zbiór strategii (czystych) gracza 1., Y = {1, 2, . . . , n} – zbiór strategii (czystych) gracza 2. Niech A = [aij ]m×n – macierz wypłat gracza 1., B = [bij ]m×n – macierz wypłat gracza 2. (Oczywiście, te wypłaty są czysto subiektywne, i mówią o tym, co dany gracz myśli o danej sytuacji, a nie muszą oznaczać jakichś konkretnych wypłat, które jeden z graczy wypłaca drugiemu, lub ktoś trzeci (Pan Bóg) wypłaca graczom). Jak poprzednio, rozważamy od razu rozszerzenie mieszane takiej gry, czyli dowolny rozkład prawdopodobieństwa na zbiorze X, µ = (µ1 , . . . , µm ) jest strategią mieszaną gracza 1; rozkład prawdopodobieństwa na zbiorze Y , σ = (σ1 , . . . , σn ) – strategią mieszaną gracza 2., natomiast wypłatami poszczególnych graczy są odpowiednie wartości oczekiwane: u1 (µ, σ) = XX i aij µi σj u2 (µ, σ) = j XX i bij µi σj . j Jak pamiętają Państwo, w grach o sumie zerowej optymalnym zachowaniem było wybranie przez gracza najkorzystniejszej dla siebie strategii przy założeniu, że przeciwnik będzie grał najgorzej dla nas. Tam uzasadnieniem takiego zachowania było to, że interesy graczy były dokładnie przeciwne, i wiedzieliśmy, że przeciwnik wybierze to, co dla nas najbardziej niekorzystne, dlatego że to było jednocześnie najbardziej korzystne dla niego. Tutaj nie mamy powodu, żeby oczekiwać, że przeciwnik będzie specjalnie działał na naszą niekorzyść (nie wszyscy gracze są Polakami) – więc naturalnym jest, że każdy z graczy stara się zmaksymalizować własną wypłatę, przy założeniu, że inni też starają się zmaksymalizować swoje wypłaty. Autorem takiej koncepcji rozwiązania jest John Nash (stąd nazwa). Definicja 1.4 Równowagą w sensie Nasha w grze dwumacierzowej nazwiemy taką parę strategii µ∗ ∈ P (X), σ ∗ ∈ P (Y ), że u1 (µ∗ , σ ∗ ) ­ u1 (µ, σ ∗ ) u2 (µ∗ , σ ∗ ) ­ u1 (µ∗ , σ) ∀µ ∈ P (X) ∀σ ∈ P (Y ), czyli taką, że odstąpienie od równowagi przez pojedynczego gracza nie jest dla niego opłacalne. Uwaga 1.3 Oczywiście, jeśli B = −A, czyli u1 = −u2 , równowagą Nasha sprowadza się do punktu siodłowego. Równowaga w sensie Nasha wydaje się na tyle naturalnym uogólnieniem punktu siodłowego, że pewnie duża część z Państwa by ją wymyśliła, i aż narzuca się pytanie, dlaczego von Neumann jej nie wymyślił. Jedna z możliwych odpowiedzi jest taka, że pewnie wymyślił, ale uznał takie rozwiązanie za wadliwe. I teraz parę słów na temat tego, co w pojęciu NE nie jest do końca udane. Rozważmy taki przykład: Przykład: Mamy dwoje małżonków, którzy właśnie wysłali dzieci do dziadków na wieczór, i planują spędzić razem wieczór, tylko zastanawiają się jak. Kanoniczna wersja tej historyjki jest taka , że Pani chce iść na balet, Pan na boks (co prawda niewielu znam facetów, którzy chcieliby iść na boks, i jeszcze mniej kobiet, które chciałyby na balet, ale będę się trzymał 5 tej wersji). Jeśli każde z nich będzie obstawać przy swoim, nigdzie nie pójdą, w dodatku pewnie się pokłucą i Pani będzie miała migrenę czy jakąś inną wymówkę, żeby już nic razem znim nie robić tego wieczoru, a może obrazić się na następnych kilka dni, w drugą stronę podobnie, w związku z tym taka sytuacja będzie ze wszech miar niekorzystna. W związku z tym macierze wypłat graczy będą wyglądały tak: " A (Pani) = 4 0 0 1 # " B (Pan) = 1 0 0 4 # . Ta gra ma dwie równowagi w strategiach czystych: (boks,boks) i (balet, balet), oraz jedną w strategiach mieszanych: µ = (.8, .2), σ = (.2, .8). W tej ostatniej wypłaty garczy są sobie równe, i równe 45 . Co z tego przykładu wynika? 1. Może istnieć wiele różnych równowag Nasha ze znacząco różnymi wypłatami. Może się zdarzyć, że jedna równowaga jest bardziej opłacalna dla jednego z graczy, a inna dla drugiego. 2. Strategii w różnych równowagach nie można między sobą wymieniać. Bez uzgodnienia, która równowaga będzie grana, nie da się racjonalnie wybrać strategii do gry. 3. Wiedząc, jaki jest zbiór równowag Nasha w danej grze, nie potrafimy powiedzieć, jak będą zachowywać się gracze (nawet przy założeniu, że grają racjonalnie.) Kolejny przykład pokaże jeszcze jedną wadę rozwiązania Nasha. Przykład: (dylemat więźnia – najbardziej znany przykład w teorii gier). Historyjka jest taka: dwóch więźniów podejrzanych o jakieś przestępstwo, jest przesłuchiwanych w oddzielnych pokojach. Są winni, ale każdy z nich zastanawia się, czy się przyznać, czy nie. Jeśli się przyzna (zrzucając przy okazji większość winy na drugiego), a drugi więzień będzie szedł w zaparte, pierwszy może liczyć na to, że dostanie wyrok w zawiasach, ale kosztem wspólnika. Jeśli żaden się nie przyzna, to głównej winy nikt im nie udowodni, ale przymkną ich na rok za to, co są w stanie im udowodnić bez współpracy żadnego z nich. Jeśli przyznają się obaj, sąd nie uwerzy w ich skruchę, ale odpowiedzialnością obarczy w tym samym stopniu, i dostaną wyrok nieco niższy niż ten, który się nie przyzna, a cała wina zostanie jemu przypisana. Macierze wypłat w tej grze wyglądają tak: " A= −5 0 −10 −1 # " B= −5 −10 0 −1 # . Ta gra posiada dokładnie jedną równowagę, i to w strategiach czystych – obaj się przyznają. Problem w tym, że gdyby obaj odstąpili od równowagi, zyskaliby na tym. Wniosek: 4. Równowaga nie musi dawać optymalnych wypłat w grze. Jeśli osiągnięcie takich wypłat wiąże się z kooperacją, nie będzie to równowaga. Mimo tych wszystkich wad, równowaga Nasha ma jedną ważną zaletę – zawsze istnieje (przynajmniej dla gier dwumacierzowych, dla bardziej skomplikowanych bytów niekoniecznie, o czym później). Twierdzenie stwierdzające ten fakt sformułował John Nash. Twierdzenie 1.2 (Nash, 1950) Każda gra dwumacierzowa posiada równowagę w sensie Nasha. 6 I znowu, nie będziemy dowodzić tego twierdzenia. Udowodnimy twierdzenie trochę ogólniejsze, które za chwilkę podam. Żeby je podać, zdefiniuję ogólnie, co nazywamy grą niekooperacyjną. Definicja 1.5 n-osobową grą niekooperacyjną nazwiemy Γ = (X1 , . . . , Xn , u1 , . . . , un ), gdzie Xi – (niepuste) zbiory strategii poszczególnych graczy, ui : X1 × · · · × Xn → R – ograniczone funkcje wypłaty poszczególnych graczy. Gracze wybierają niezależnie od siebie odpowiednio x1 ∈ X1 , x2 ∈ X2 , . . . , xn ∈ Xn , w wyniku czego gracz k-ty otrzymuje uk (x1 , . . . , xn ). W powyższej definicji nie precyzujemy, czy Xi są zbiorami strategii czystych, czy mieszanych. Pokażemy, że przy pewnych założeniach na te zbiory, oraz na funkcje wypłaty graczy, gra będzie posiadała strategie należące wąśnie do tych zbiorów. Definicja 1.6 Równowagą w sensie Nasha w grze Γ zdefiniowanej powyżej nazwiemy układ strategii x∗ = (x∗1 , . . . , x∗n ) takich, że dla każdego gracza i oraz yi ∈ Xi mamy ui (x∗ ) ­ ui ((x∗1 , . . . , x∗i−1 , yi , x∗i+1 , . . . , x∗n )). Oznacza to, jak poprzednio, że pojedynczemu graczowi nie opłaca się odstąpić od równowagi, gdy inni pozostają przy swoich strategiach x∗i . Prawdziwe będzie następujące twierdzenie: Twierdzenie 1.3 Załóżmy, że każdy ze zbiorów Xi jest zwartym wypukłym podzbiorem Rk . Załóżmy ponadto, że dla każdego i funkcja ui jest ciągła na X1 × · · · × Xn oraz jest wklęsła względem i-tej zmiennej, przy ustalonych pozostałych zmiennych. Wtedy gra Γ, określona przez zbiory Xi i funkcje ui , posiada równowagę Nasha. Uwaga 1.4 Dla tych, którzy nie wiedzą – podzbiór przestrzeni metrycznej nazywamy zwartym, jeśli każdy ciąg elementów tego zbioru posiada podciąg zbieżny. W Rk zbiór jest zwarty iff jest domknięty i ograniczony. Zanim przejdziemy do dowodu tej uogólnionej wersji twierdzenia Nasha, sformułujemy twierdzenie, które będzie punktem wyjściowym dla tego dowodu. Twierdzenie 1.4 (Twierdzenie Kakutaniego o punkcie stałym) Niech S będzie zwartym wypukłym podzbiorem Rk i niech ψ będzie operatorem przyporządkowującym każdemu s ∈ S zwarty, wypukły podzbiór S, o wykresie domkniętym, (tzn. jeśli xn ∈ S, xn → x0 , yn ∈ ψ(xn ), yn → y0 , to y0 ∈ ψ(x0 )). Istnieje wtedy takie x∗ , że x∗ ∈ ψ(x∗ ) (punkt stały multifunkcji ψ). Tak naprawde chętnie przeprowadziłbym dowód też tego twierdzenia, żeby wychodzić od faktów przez Państwa znanych, ale to wymagałoby wprowadzenia ileś dodatkowej teorii (sympleks, współrzędne barycentryczne, podział symplicjalny, twierdzenie Brouwera o punkcie stałym), w związku z tym twierdzenie Kakutaniego będę traktował jako punkt wyjściowy, natomiast osobom zainteresowanym dowodem tego twierdzenia polecam przeczytanie XX rozdziału „Wstępu do teorii mnogości i topologii” Kuratowskiego [2] (Sympleks i jego własności). Wtedy poniższy dowód powinien być zrozumiały. Dowód tw Kakutaniego: Bez straty ogólności możemy założyć, że S jest sympleksem. Niech {πµ } będzie ciągiem rozbić symplicjalnych sympleksu S, takich że średnica każdego sympleksu z πµ nie przekracza δµ i δµ → 0. Zdefiniujmy ψ µ : S → S w następujący sposób: jeśli x jest wierzchołkiem sympleksu z πµ , to za µ ψ (x) przyjmujemy dowolne s ∈ ψ(x), a następnie przedłużamy ψ µ liniowo na każdy z sympleksów 7 rozbicia, tzn. jeśli x = k+1 λj = 1, gdzie {x1 , . . . , xk+1 } — wierzchołki ustalonego j=1 λj xj , λi ­ 0, Pk+1 µ µ sympleksu z πµ , to ψ (x) = j=1 λj ψ (xj ). Tak zdefiniowane ψ µ jest ciągłe, a zatem na mocy twierdzenia Brouwera ma punkt stały, który możemy oznaczyć przez xµ . Ponadto P P xµ = k+1 X j=1 λµj xµj , k+1 X λµj = 1, λµj ­ 0. j=1 Ze zwartości S można założyć bez straty ogólności, że xµi , λµi , ψ µ (xµi ) są zbieżne przy µ → ∞; xµi oraz xµ mają tę samą granicę x∗ ∈ S. Niech limµ λµj = λ∗j , a limµ ψ µ (xµj ) = ηj∗ . P µ µ µ P ∗ ∗ Mamy xµ = ψ µ (xµ ) = λj ψ (xj ). Wtedy x∗ = λj ηj , a z własności, które spełnia ψ ∗ ∗ ∗ ∗ wynika, że ηj ∈ ψ(x ) dla każdego j. Stąd x ∈ ψ(x ), bo ψ(x∗ ) jest wypukły, a więc x∗ jest szukanym punktem zbioru S. Dowód tw. Nasha: Idea tego dowodu polega na tym, żeby skonstruować odwzorowanie, które będzie miało punkt stały wtedy i tylko wtedy, gdy gra posiada równowagę Nasha. Wtedy sprawdzimy, że to odwzorowanie spełnia założenia twierdzenia Kakutaniego, zatem ma punkt stały, a gra ma równowagę. Dowód twierdzenia przeprowadzimy dla przypadku, gdy jest dwóch graczy. Ta zmiana upraszcza jedynie notację, natomiast dowód w ogólnym przypadku nie jest ani trochę bardziej skomplikowany. Niech: B1 (y) = {a ∈ X1 : u1 (a, y) = max u2 (x, y)}, x∈X1 B2 (x) = {b ∈ X2 : u2 (x, b) = max u2 (x, y)}. y∈X2 Zbiór B1 (y) interpretujemy jako zbiór najlepszych odpowiedzi 1. gracza na strategię y drugiego. Podobną interpretację ma zbiór B2 (x). Jeśli teraz zdefiniujemy sobie multifunkcję F (x, y) = B1 (y) × B2 (x), to to będzie to odwzorowanie, którego szukamy, bo ewentualny punkt stały takiego odwzorowania (x∗ , y ∗ ) ∈ F (x∗ , y ∗ ) będzie miał taką własność, że x∗ będzie najlepszą odpowiedzią na strategię y ∗ i na odwrót, czyli to będzie równowaga Nasha. Sprawdźmy zatem, czy spełnione są założenia twierdzenia Kakutaniego. 1. Multifunkcja F jest zdefiniowana na zbiorze U = X1 × X2 , który jest zwarty. To można uzasadnić na wiele sposobów (wyciągając podciąg zbieżny z jednej współrzędnej, a potem z niego podciąg zbieżny po drugiej, lub mówiąc, że produkt zbiorów domkniętych i ograniczonych też ma tę własność). Jest też wypukły jako produkt zbiorów wypukłych. 2. Zbiory B1 (y) (B2 (x)) są zawsze niepuste, bo każda funkcja ciągła na zbiorze zwartym osiąga swoje supremum na tym zbiorze. 3. Funkcja u1 (·, y) jest wklęsła dla każdego y ∈ X2 , stąd jeśli dla ustalonego y osiąga ona maksimum dla x1 oraz x2 , to musi osiągać je także dla kombinacji wypukłych tych punktów, a to oznacza, że dla każdego y, zbiór B1 (y) jest wypukły. Podobnie można uzasadnić wypukłość B2 (x). Ponieważ iloczyn kartezjański dwóch zbiorów wypukłych też jest wypukły, to F (x, Y ) jest zbiorem wypukłym dla dowolnych x i y. 4. Weźmy teraz dowolny ciąg {xi } elementów zbioru B1 (y) dla dowolnego ustalonego y, zbieżny do pewnego x. Ponieważ funkcja u1 jest ciągła, to x też należy do B1 (y). Zatem zbiór ten jest domknięty. Jako podzbiór X1 jest także ograniczony, a zatem zwarty. Podobnie pokazujemy, że B2 (x) są zbiorami zwartymi. Oczywiście F (x, y), jako iloczyn kartezjański zbiorów zwartych, jest dla dowolnych x i y także zbiorem zwartym (patrz punkt 1.). 8 5. Domkniętość wykresu. Znowu (bez utraty ogólności) ograniczymy się do jednej współrzędnej. Załóżmy nie wprost, że wykres B1 nie jest domknięty, czyli istnieje ciąg {(xn , yn )} zbieżny do (x, y) taki, że xn ∈ B1 (yn ), ale x 6∈ B1 (y). Pierwsza z tych równości oznacza, że u1 (a, yn ) ¬ u1 (xn , yn ) ∀a ∈ X1 , ale ponieważ u1 jest ciągła, więc prawdziwe musi być także u1 (a, y) ¬ u1 (x, y) ∀a ∈ X1 , co jest równoważne x ∈ B1 (y) – sprzeczność. Czyli wykres naszego odwzorowania jest domknięty. A zatem wszystkie założenia twierdzenia Kakutaniego są spełnione, więc gra Γ posiada równowagę Nasha. Wniosek 1.2 Twierdzenie Nasha dla gier dwumacierzowych wynika z powyższego twierdzenia w następujący sposób: Niech X1 = P (W ), gdzie W = {1, . . . , m} – zbiór wierszy macierzy, a X2 = P (K), gdzie K = {1, . . . , n} – zbiór kolumn. Dowolny rozkład prawdopodobieństwa µ = (µ1 , . . . , µm ) ∈ P P (W ) jest układem m liczb spełniających warunki i µi = 1, µi ­ 0 ∀i. Zbiór takich µ jest wypukłym i zwartym podzbiorem Rm . Podobnie w przypadku zbioru strategii mieszanych 2. gracza. Z kolei wypłata gracza 1. (podobnie z wypłatą 2.), gdy używane są strategie µ P P i σ, u1 (µ, σ) = i j Aij µi σj jest funkcją liniową (właściwie afiniczną) względem µ i σ z osobna; taka funkcja jest też w szczególności ciągła i wklęsła. A zatem spełnione są założenia udowodnionego przez nas uogólnionego twierdzenia Nasha, i gra posiada równowagę w strategiach z X1 i X2 , czyli strategiach mieszanych w wyjściowej grze dwumacierzowej. Wniosek 1.3 Oczywiście, jeśli rozważymy grę dwuosobową, w której wypłaty będą spełniać u1 = −u2 , to wynika z tego twierdzenia również twierdzenie von Neumanna. Oczywiście, udowodnione przez nas twierdzenie nie jest najbardziej ogólnym twierdzeniem o istnieniu równowagi Nasha w grach niekooperacyjnych. Istnieje na przykład twierdzenie Glicksberga [1], mówiące, że w grze dwuosobowej ze zwartymi metrycznymi przestrzeniami akcji graczy (niekoniecznie będącymi podzbiorami Rk ), i ciągłymi funkcjami wypłaty, zawsze istnieje równowaga w strategiach mieszanych. Wiadomo natomiast także, że osłabienie założeń tego twierdzenia może prowadzić do sytuacji, gdy równowagi nie ma, nawet w strategiach mieszanych. W szczególności osłabienie założenia o ciągłości w taki sposób, że funkcja wypłaty tylko jednego z graczy nie jest ciągła w jednym punkcie X1 × X2 może prowadzić do braku równowagi (nawet w strategiach mieszanych). Przykład takiej gry znalazł Vieille [5]. Innym przykładem gry z nieciągłymi funkcjami wypłat graczy (już w więcej niż jednym punkcie), jest przykład gry o sumie zerowej, posiadającej wartość, ale nie posiadającej strategii optymalnych (w przypadku takiej gry strategie optymalne są również strategiami w równowadze Nasha), który mieli Państwo znaleźć w 4. zadaniu na 1. liście zadań. 9 1.3 1.3.1 Algorytmy szukania równowag w grach niekooperacyjnych Gry macierzowe Na ćwiczeniach pojawiły się jakieś sposoby szukania równowag w grach macierzowych (dwumacierzowych), tyle że w praktyce nadają się one do zastosowania tylko do niektórych gier (w większości z nich ilość obliczeń, które musielibyśmy wykonać byłaby ogromna), nie mówiąc o tym, żeby zastosować je do obliczania równowag w grach maszynowo. Dlatego najbliższe dwa wykłady będą poświęcone temu, jak szukać rozwiązań gier (algorytmicznie). Dzisiaj opowiem o tym, jak to się robi w przypadku gier macierzowych. W przyszłym tygodniu opowiem, jak rozwiązywać gry bardziej skomplikowane. To, od czego zaczniemy dzisiaj, nie będzie miało bezpośredniego związku z grami, ten związek wyłoni się dopiero później. Programowanie liniowe Problem programowania liniowego, to bodaj najlepiej znany problem optymalizacyjny, i w związku z tym, jeśli ktoś z państwa w przyszłości zapisze się na zajęcia z optymalizacji, to tam będzie to bardzo dokładnie omówione (bodaj przez pół semestru) – tu ograniczę się do zdefiniowania problemu, opowiedzenia o tym, jak taki problem się rozwiązuje, no i (przede wszystkim) do opowiedzenia o jego związku z problemem szukania strategii optymalnych w grach macierzowych. Problem programowania liniowego możemy zapisać następująco: Znaleźć maksimum m X ci xi i=1 przy ograniczeniach m X aij xi ¬ bj dla j = 1, . . . , n, i=1 xi ­ 0 Macierzowo możemy zapisać to następująco: Dla zadanych C1×m , Am×n , bn×1 zmaksymalizować C T x przy ograniczeniach AT x ¬ B, x ­ 0. " # 0 h i x 5 −1 , B = 10 , C = 2 −3 , X = . To oznacza, że Przykład: A = −1 1 1 y 3 maksymalizujemy funkcję F (x, y) = 2x − 3y przy ograniczeniach " 1 4 # 1 x−y ¬0 4 5x + y ¬ 10 −x + y ¬ 3 x­0 y­0 Jeśli narysujemy sobie ten zbiór (patrz rysunek poniżej), okazuje się, że jest to wypukły wielokąt (czworokąt ograniczony prostymi i osia Oy). Dodatkowo, jeśli zaznaczymy sobie, w którym kierunku zwiększa się funkcja celu (funkcja, którą maksymalizujemy – tu ten kierunek wskazuje wektor, na prostych prostopadłych do tego wektora funkcja celu się nie zmienia, zwiększając swoją wartość w kierunku przezeń wskazywanym), okazuje się, że maksimum musi być osiągnięte w jednym wierzchołku tego wielokąta (to jest ten wierzchołek, który zaznaczyłem kropką). 10 y 6 D D D D D D D D D D D D J D J D ^ D J D t DD - x Jeśli funkcja celu byłaby inna, maksimum mogłoby być osiągnięte we wszystkich punktach któregoś z boków naszego wielokąta, i w przypadku maksymalizowania funkcji liniowej na płaszczyźnie innych możliwości nie będzie. Teraz – co się dzieje w ogólności? Otóż w tym przykładzie (dwuwymiarowym), każdy z warunków ograniczających X mówił, że rozwiązanie musi się znajdować po jednej, określonej stronie prostej. W przypadku m-wymiarowym te ograniczenia oznaczają, że X musi się znajdować po jednej stronie hiperpłaszczyzny, a część wspólna takich zbiorów leżących po jednej stronie hiperpłaszczyzny jest wypukłym wielościanem. W przypadku wielościanu, maksimum funkcji liniowej musi być przyjmowane w którymś z wierzchołków tego wielościanu (ewentualnie we wszystkich punktach którejś ze ścian tego wielościanu, cokolwiek słowo ściana miałoby tutaj oznaczać). To oznacza, że chcąc szukać naszego maksimum, wystarczy przeszukać kolejne wierzchołki tego wielościanu. Dodatkowo, żeby algorytm szukania maksimum był zbieżny, algorytm powinien po sprawdzeniu, czy w jakimś jednym wierzchołku nie ma maksimum, przechodzić do któregoś z wierzchołków, w których funkcja celu będzie miała większą wartość, dzięki czemu po skończonej liczbie kroków dojdzie do tego jednego (albo jednego z tych) wierzchołka, w którym jest osiągnięte maksimum. Algebraicznie ten pomysł będzie realizował algorytm sympleks, który teraz po krótce omówię. Algorytm sympleks W algorytmie będziemy kolejne kroki, o których mówiłem, opisywali algebraicznie, wychodząc od układu nierówności, które musi spełniać nasze rozwiązanie: a x + a21 x2 + . . . + am1 xm ¬ b1 11 1 . .. . a x + a x + ... + a x ¬ b 1n 1 2n 2 mn m n Ten układ nierówności możemy równoważnie zapisać jako układ równań: a x + a21 x2 + . . . + am1 xm − b1 = −u1 11 1 . .. , a x + a x + . . . + a x − b = −u 1n 1 2n 2 mn m n n gdzie u1 ,. . . , un są dodatkowymi zmiennymi nieujemnymi, zwanymi zmiennymi wolnymi. Tak jak w przypadku algorytmów rozwiązywania równań macierzowych wygodniej jest działać na odpowiednich macierzach zamiast całych równań, tu też zapisujemy te równania 11 przy pomocy pewnego schematu, który nazywamy „tablicą sympleks”: −x1 −x2 a11 a21 .. .. . . a1n a2n −c1 −c2 . . . −xm 1 . . . am1 b1 u1 .. .. .. . . . . . . . amn bn un . . . −cm 0 z Ostatni wiersz tablicy odpowiada funkcji celu. Interpretacja takiej tablicy jest taka: środkowa część tablicy przedstawia współczynniki przy zmiennych u góry, dolny wiersz to samo dla funkcji celu, zmienne znajdujące się u góry tablicy (tzw. zmienne niebazowe) są równe zero, a zmienne z prawej strony tablicy są równe wartościom w przedostatniej kolumnie. To, że m zmiennych ma wartość zero algebraicznie ma oznaczać, że jesteśmy w wierzchołku wielościanu (bo w m ograniczeń zachodzi równość). W trakcie algorytmu będziemy wymieniać zmienne wyzerowane ze zmiennymi bazowymi (tymi z prawej), uzyskując w ten sposób inny wierzchołek. Jedyny problem może być taki, że któreś z ograniczeń obetnie nam punkt, w którym w m z pozostałych ograniczeń są równości. Reguły przechodzenia od jednego wierzchołka do następnego będą nam gwarantowały, że tak nie będzie – jeśli byliśmy w wierzchołku, to przejdziemy do wierzchołka. Problem może być tylko z punktem startowym, bo oczywiście nie zawsze zmienne x1 ,. . . ,xn ustawione na zera muszą być wierzchołkiem zbioru rozwiązań dopuszczalnych. Dlatego pierwsza faza algorytmu ma właśnie na celu znalezienie jednego z wierzchołków wielościanu. Pierwsza faza: Sprawdzamy, czy w ostatniej kolumnie nie ma elementów ujemnych. Jeśli nie ma, to x1 = . . . = xm = 0 jest wierzchołkiem tego wielościanu. Jeśli takie są, to 1. wybieramy ostatni z nich (w najdalszym wierszu), w wierszu k. Dla uproszczenia notacji wszystkie elementy tablicy będę oznaczał przez αij (włącznie z ostatnią kolumną i ostatnim wierszem). 2. W wierszu k (tym z elementem ujemnym w ostaniej kolumnie) wybieramy element, dla którego αkj0 < 0 (to j0 jest tu istotne). Jeśli takiego nie ma – zbiór rozwiązań dopuszczalnych jest pusty. 3. Następnie wśród wierszy i ­ k poza wierszem funkcji celu wybieramy ten, dla którego jest najmniejszy dodatni. Oznaczamy go przez i0 . iloraz ααi,m+1 ij 0 4. Wymieniamy zmienne, które są w wierszu i0 i kolumnie j0 . g Tablica po wymianie zmiennych wygląda następująco (α ij oznacza elementy tablicy po wymianie, αij – przed wymianą): αg i0 j0 = 1 αi0 j0 αi0 j αg j 6= j0 i0 j = αi0 j0 αij0 αg i 6= i0 ij0 = − αi0 j0 αi0 j αij0 g α . ij = αij − αi0 j0 Jeśli w ostatniej kolumnie po wymianie zmiennych bazowych dalej jest element ujemny, to powtarzamy tę fazę metody sympleksowej. Jeśli nie – przechodzimy do drugiej fazy. 12 Druga faza algorytmu polega na przechodzeniu od jednego wierzchołka do innego w taki sposób, żeby za każdym razem zwiększać funkcję celu. Robimy to w następujący sposób: 1. Wybieramy kolumnę j0 , w której w wierszu funkcji celu mamy wartość ujemną. 2. Następnie z elementów tej kolumny wybieramy taki, że αij0 jest dodatni i jak najmniejsze. αi,m+1 αij0 jest 3. W ten sposób dostajemy wiersz i0 i kolumę j0 , w których wymieniamy zmienną bazową ze zmienną niebazową. Reguły zmieniania tablicy sympleksowej przy wymianie zmiennych są takie same jak w pierwszej fazie. Tę fazę powtarzamy tak długo, aż w wierszu celu nie ma elementów ujemnych. Współrzędne optymalnego rozwiązania odczytujemy z tablicy – te zmienne, które zostały u góry są równe zero, pozostałe są równe wartościom, które stoją obok nich w ostatniej kolumnie. Z kolei optymalną wartość funkcji celu odczytujemy z prawej kolumny ostatniego wiersza. Zanim przejdziemy do tego, w jaki sposób sprowadzić problem szukania rozwiązania optymalnego do programowania liniowego, napiszę jeszcze jedno twierdzenie, które ma fundamentalne znaczenie w programowaniu liniowym, a które będzie miało też związek z tym, co nas najbardziej interesuje, czyli z grami. Problem dualny do problemu zdefiniowanego na początku wykładu definiujemy nastęP pująco: Znaleźć Y = [y1 , . . . , , ym ]T minimalizujący m i=1 bi yi przy ograniczeniach: Y ­ 0, AY ­ C T . Prawdziwe będzie takie twierdzenie: Twierdzenie 1.5 (o dualności) Jeśli program liniowy i program do niego dualny mają P P rozwiązania, to maxX nj=1 cj xj = minY m i=1 bi yi . I teraz, po godzinie wykładu, wracamy do gier (przypominam) o sumie zerowej. Okazuje się, że problem szukania strategii optymalnych w takiej grze można zapisać przy pomocy programu liniowego, a, co więcej, okaże się, że twierdznie von Neumanna będzie w takim wypadku wynikać z twierdzenia o dualności. Niech W = [wij ]k×l będzie macierzą wypłat w grze macierzowej. Wtedy rozważać będziemy problem programowania liniowego następującej postaci: T A = −W T 1 −1 ... ... 1 −1 .. .. . . , 1 −1 1 0 0 −1 0 0 X = [µ1 , . . . , µk , v1 , v2 ]T , B = [0, . . . , 0, 1, −1]T , C = [0, . . . , 0, 1, −1]. Maksymalizujemy v1 − v2 =: v. Jeśli zapisać ten problem w postaci układu równań, dostaniemy: Pk Pi=1 wij µi ­ v k i=1 µi = 1 dla j = 1, . . . , l . µi ­ 0 dla i = 1, . . . , k Te równania oznaczają, że µ = (µ1 , . . . , µk ) jest rozkładem prawdopodobieństwa na wierszach macierzy W . Dodatkowo, jeśli µ∗ będzie rozwiązniem tego problemu, a v ∗ wartością funkcji celu dla tego rozwiązania, to: k X wij µ∗i ­ v ∗ dla każdej kolumny j, i=1 13 czyli dla dowolnego rozkładu prawdopodobieństwa σ = (σ1 , . . . , σl ) na kolumnach: k X l X wij µ∗i σj ­ v ∗ , i=1 j=1 Ponieważ σ było dowolne, a prawa strona nie zależy od σ, więc możemy napisać min σ k X l X wij µ∗i σj ­ v ∗ , i=1 j=1 a stąd min v = max µ σ k X l X wij µi σj ­ v ∗ . i=1 j=1 A teraz popatrzmy się na problem dualny. Jeśli przyjmiemy Y = [σ1 , . . . , σl , v1 , v2 ]T , a wszystkie pozostałe macierze – jak poprzednio, to dostajemy, że mamy zminimalizować P P v = v1 − v2 przy ograniczeniach lj=1 wij σj ¬ v, lj=1 σj = 1 dla i = 1, . . . , k, σj ­ 0, j = 1, . . . , l, skąd w podobny sposób co poprzednio dostajemy: v = min max σ µ k X l X wij µi σj ¬ v ∗ , i=1 j=1 a ponieważ v ∗ na mocy twierdzenia o dualności jest takie samo, to dostaliśmy, że gra ma wartość równą v ∗ (czyli tezę twierdzenia von Neumanna), a strategiami optymalnymi, realizującymi tę wartość, są µ∗ i σ ∗ , będące rozwiązaniami naszych dualnych problemów programowania liniowego. 3 0 1 2 Przykład: Rozważmy grę macierzową z macierzą wypłat −1 2 . Zgodnie z tym, 1 0 −1 co było powiedziane przed chwilą, żeby znaleźć wartość tej gry oraz strategie optymalne graczy, musimy rozwiązać problem programowania liniowego z macierzą T A = −3 1 −1 0 −2 0 −1 −2 1 1 1 1 −1 −1 −1 1 −1 1 −1 1 −1 , 0 0 0 0 X = [µ1 , µ2 , µ3 , v1 , v2 ]T , B = [0, . . . , 0, 1, −1]T , C = [0, . . . , 0, 1, −1], oraz problem do niego dualny. Na początek zapisujemy tablicę sympleksową: −µ1 −µ2 −µ3 −v1 −v2 1 −3 1 −1 1 −1 0 0 −2 0 1 −1 0 −1 −2 1 1 −1 0 1 1 1 0 0 1 −1 −1 −1 0 0 −1 0 0 0 −1 1 0 u1 u2 u3 . u4 u5 v W ostatniej kolumnie jest jedna liczba ujemna, w 5. wierszu. Ponieważ jest to ostatni wiersz poza wierszem celu, więc wybieramy do zamiany zmiennej ten wiersz. Wybieramy 14 też kolumnę taką, żeby w 5. wierszu stał w niej element ujemny, na przykład 1. kolumnę. Po zamianie zmiennych dostajemy: −u5 −µ2 −µ3 −v1 −v2 −3 4 2 1 −1 0 −2 0 1 −1 −1 −1 2 1 −1 1 0 0 0 0 −1 1 1 0 0 0 0 0 −1 1 1 3 0 1 0 1 0 u1 u2 u3 . u4 µ1 v Na tym kończy się pierwsza faza metody sympleksowej, bo w ostatniej kolumnie nie ma już elementów ujemnych. Zaczynamy drugą fazę. Wybieramy 4. kolumnę, bo tam w wierszu funkcji celu znajduje się wartość ujemna, oraz drugi wiersz, bo tam iloraz elementu w ostatniej kolumnie i elementu w kolumnie wybranej (czwartej) jest najmniejszy z wierszy, w których w 4. kolumnie stoi liczba dodatnia. Po zamianie zmiennych dostajemy: −u5 −µ2 −µ3 −u2 −v2 −3 6 2 −1 0 0 −2 0 1 −1 −1 1 2 −1 0 1 0 0 0 0 −1 1 1 0 0 0 −2 0 1 0 1 3 0 1 0 1 0 u1 v1 u3 . u4 µ1 v W ostatnim wierszu w drugiej kolumnie stoi element ujemny, więc wybieramy tę kolumnę, a z elementów dodatnich tej kolumny wybieramy szóstkę w pierwszym wierszu, bo dla niej iloraz elementu w ostatniej kolumnie i elementu w wybranej przez nas jest najmniejszy. Po zamianie zmiennych dostajemy: −u5 −u1 −µ3 −u2 −v2 1 1 − 12 − 16 0 6 3 1 2 2 −1 −1 3 3 3 5 5 − 21 − 16 − 0 3 6 1 0 0 0 0 2 1 − 21 − 16 0 3 6 1 −1 0 1 0 3 1 1 2 µ2 1 v1 1 u3 . 2 0 u4 1 µ1 2 1 v Dalej wybieramy pierwszą kolumnę i czwarty wiersz, otrzymując: −u4 −u1 −µ3 −u2 −v2 1 1 1 − 16 0 2 6 3 1 2 2 1 −1 3 3 3 1 1 5 5 −6 −6 0 2 3 1 0 0 0 0 1 2 1 − 16 0 2 3 6 1 1 0 1 0 3 1 1 2 µ2 1 v1 1 u3 . 2 0 u5 1 µ1 2 1 v I na tym się kończy algorytm, bo w wierszu funkcji celu nie ma już wartości ujemnych. Odczytujemy wynik – µ3 = 0, bo pozostało u góry, pozostałe wartości odczytujemy z 6. kolumny: µ1 = µ2 = 12 , a wartość gry (funkcja celu) v = 1. Mamy w takim razie strategię pierwszego gracza. Aby otrzymać strategię drugiego, rozwiązujemy problem dualny. Nie 15 będę rozpisywał, jak on wygląda – od razu zapiszę go w postaci tablicy sympleksowej. −σ1 −σ2 −σ3 −v1 −v2 1 3 0 1 −1 1 0 u1 −1 2 2 −1 1 0 u2 1 0 −1 −1 1 0 u3 . −1 −1 −1 0 0 −1 u4 1 1 1 0 0 1 u5 0 0 0 1 −1 0 −v Zaczynamy od pierwszej fazy metody sympleksowej, czyli szukamy wiersza, który ma w ostatniej kolumnie wartość ujemną – takim wierszem jest wiersz czwarty. Wybieramy inną kolumnę, w której stoi wartość ujemna, np. pierwszą, i sprawdzamy w czwartym i piątym wierszu, gdzie odpowiedni iloraz jest najmniejszy. W obu jest taki sam (równy 1), więc możemy np. wybrać czwarty wiersz. Wymieniamy zmienne: −u4 −σ2 −σ3 −v1 −v2 1 3 −3 −2 −1 1 −3 u1 −1 3 3 −1 1 1 u2 1 −1 −2 −1 1 −1 u3 . −1 1 1 0 0 1 σ1 1 0 0 0 0 0 u5 0 0 0 1 −1 0 −v Teraz bierzemy ostatni wiersz z ujemną wartością w ostatniej kolumnie, i kolumnę, w której w tym (trzecim) wierszu stoi element ujemny (np. 2. kolumnę), i po porównaniu odpowiednich ilorazów stwierdzamy, że zamieniamy zmienną w trzecim wierszu i drugiej kolumnie: −u4 −u3 −σ3 −v1 −v2 1 0 −3 4 2 −2 0 u1 2 3 −3 −4 4 −2 u2 −1 −1 2 1 −1 1 σ2 . 0 1 −1 −1 1 0 σ1 1 0 0 0 0 0 u5 0 0 0 1 −1 0 −v Jedyny element ujemny w ostatniej kolumnie jest w drugim wierszu. W tym wierszu są poza tym dwie wartości ujemne, wybieramy kolumnę 3., w której znajduje się jedna z nich. Porównujemy ilorazy wartości w ostatniej kolumnie i kolumnie przez nas wybranej, i dochodzimy do wniosku, że najmniejszy dodatni iloraz ( 12 ) jest w 3. wierszu, więc wymieniamy zmienną w trzecim wierszu σ2 ze zmienną w trzeciej kolumnie σ3 : −u4 −u3 −σ2 −v1 −v2 1 2 −1 −2 0 0 −2 u1 1 3 3 5 − 25 − 12 u2 2 2 2 2 1 1 1 1 1 1 −2 −2 −2 σ3 . 2 2 2 1 1 1 1 1 − 12 − σ1 2 2 2 2 2 1 0 0 0 0 0 u5 0 0 0 1 −1 0 −v 16 Następnie wymieniamy zmienne w 4. kolumnie (v1 ) i w 2. wierszu (u2 ): −u4 −u3 −σ2 −u2 −v2 1 2 −1 −2 0 0 −2 u1 1 v1 − 15 − 53 − 53 − 25 −1 5 2 1 4 1 2 −5 −5 0 σ3 . 5 5 5 1 1 1 3 − 0 σ1 − 35 5 5 5 5 1 0 0 0 0 0 u5 3 3 2 1 0 − 15 −v 5 5 5 5 Dalej wymieniamy zmienną u3 ze zmienną u1 : −u4 −u1 −σ2 −u2 −v2 1 −2 −1 2 0 0 −2 u3 3 2 7 − 75 − 53 − −1 v1 5 5 5 6 1 1 4 4 0 −5 −5 σ3 . 5 5 5 1 1 1 1 1 −5 −5 0 −5 σ1 5 5 1 0 0 0 0 0 u5 7 3 2 − 53 0 − 75 −v 5 5 5 Na tym kończy się pierwsza faza, bo w ostatniej kolumnie nie ma już elementów ujemnych. Zaczynamy drugą fazę. W ostatnim wierszu (poza ostatnią kolumną) jest tylko jedna wartość ujemna, w trzeciej kolumnie, więc wybieramy tę kolumnę. Porównujemy następnie ilorazy elementów ostatniej kolumny z dodatnimi elementami wybranej (3.) kolumny. Wybieramy trzeci wiersz, bo tam ten iloraz jest najmniejszy (równy 23 ). Po wymianie zmiennych dostajemy: −u4 −u1 −σ3 −u2 −v2 1 2 2 5 1 2 −3 −3 −3 −3 u3 0 3 1 1 1 −1 − 2 − 2 − 2 −1 1 v1 5 1 2 − 32 − 16 0 σ2 . 6 6 3 1 1 1 1 1 −6 0 σ1 −3 6 6 3 1 0 0 0 0 0 u5 1 1 1 1 0 −1 −v 2 2 2 I na tym kończymy, bo jedyną wartością ujemną w ostatnim wierszu jest wartość funkcji celu, a ona ma prawo być ujemna. Otrzymanym rozwiązaniem jest rozkład σ = ( 31 , 23 , 0). Uwaga 1.5 Jakkolwiek algorytm sympleks w najgorszym przypadku ma złożonośc wykładniczą, to istniejące algorytmy rozwiązywania problemów programowania liniowego, które mają złożoność wielomianową (np. algorytm Karmarkara) zwykle działają znacznie wolniej. Dlatego omawiałem tę metodę. 1.3.2 Gry dwumacierzowe W zeszłym tygodniu mówiłem o tym, jak sprowadzić problem szukania strategii optymalnych w grze macierzowej do rozwiązania odpowiedniego zagadnienia optymalizacyjnego, konkretnie do zadania programowania liniowego. Dzisiaj poopowiadam trochę o tym, jak to jest w przypadku bardziej skomplikowanych gier. Większość wykładu będzie poświęcona grom dwumacierzowym, bo o zagadnieniu szukania równowag w takich grach dosyć dużo wiemy, natomiast o przypadkach bardziej skomplikowanych powiem trochę na końcu wykładu, nie wchodząc już w szczegóły konkretnych algorytmów. Zacznijmy więc wykład od próby przedstawienia problemu szukania równowagi w grze dwumacierzowej w postaci analogicznej do tego, co było na końcu ostatniego wykładu, 17 czyli przy pomocy pewnego układu nierówności. Niech tradycyjnie Am×n oznacza macierz wypłat pierwszego gracza, a Bm×n – macierz wypłat drugiego. Niech µ = [µ1 , . . . , µm ] będzie strategią mieszaną w równowadze 1., a σ = [σ1 , . . . , σn ] – 2. gracza. Dodatkowo, przez v1 oznaczymy wypłatę w tej równowadze pierwszego z graczy, a przez v2 – drugiego. Zgodnie z tym, co pokazaliśmy na ćwiczeniach, dla strategii w równowadze muszą być spełnione następujące warunki: ( P a σ = v1 Pj ij j j dla i z nośnika µ dla i spoza nośnika, aij σj ¬ v1 (To było zadanie 8. z pierwszej listy). Podobnie dla drugiego gracza: ( P b µ = v2 Pi ij i i bij µi dla j z nośnika σ dla j spoza nośnika, ¬ v2 Ponadto, ponieważ v1 i v2 są wypłatami w równowadze (µ, σ), więc dodatkowo musi być P P P P spełnione i j aij µi σj = v1 oraz i j bij µi σj = v2 . Przyjmijmy teraz sobie x = vµ2 oraz y = vσ1 . Dla takich x i y, warunki podane wcześniej będą implikować: ( P a y =1 Pj ij j j aij yj ¬ 1 a także: X ( P b x =1 Pi ij i dla i z nośnika x dla i spoza nośnika x xi + X i yj = j i bij xi ¬1 dla j z nośnika y dla j spoza nośnika y, XX XX 1 1 + = aij xi yj + bij xi yj . v2 v1 i j i j Okazuje się, że ten układ warunków (plus założenie o nieujemności x i y), już wystarczy do policzenia strategii w równowadze. Dokładniej, prawdziwe będzie takie twierdzenie: " # 0 A oraz C = i dodatkowo Twierdzenie 1.6 Niech z = [x, y] , q = BT 0 załóżmy, że C > 0. Dowolne niezerowe rozwiązanie z ∗ następującego problemu: znajdź z takie, że: z ­ 0, (1.1) T [1, . . . , 1]T1×m+n q − Cz ­ 0, (1.2) z T (q − Cz) = 0, (1.3) ma taką własność, że µ = Px xi oraz σ = Py yj jest równowagą w grze dwumacierzowej o i j macierzach wypłat A i B. Uwaga 1.6 Założenie, że C > 0 nie ogranicza nas zbytnio, bo strategie w równowadze w grze dwumacierzowej z macierzami wypłat A, B pozostają w równowadze w grze z macierzami A + c, B + c, gdzie c jest pewną stałą. Żeby więc znaleźć równowagę w grze z macierzami, w których są elementy ujemne, wystarczy do tych macierzy dodać pewną stałą dodatnią, otrzymując w ten sposób grę spełniającą założenia naszego twierdzenia, a jednocześnie posiadającą równowagi takie same jak w grze wyjściowej. Dowód: Jeśli zapiszemy warunek (1.3), dostaniemy ostatnią z równości zapisanych przed twierdzeniem. Warunek (1.2) zapisany w postaci układu nierówności będzie wyglądał tak: ( 1 − j aij yj ­ 0 P 1 − i bij xi ­ 0, P 18 czyli są to (lekko osłabione warunki, które zapisałem wcześniej). Dla odmiany, warunek (1.1) musi być spełniony, żeby µ i σ były rozkładami prawdopodobieństwa. Wniosek z tego taki, że równowaga Nasha na pewno będzie rozwiązaniem problemu sformułowanego w twierdzeniu. Druga część dowodu musi więc być taka, że mamy pokazać, że nie ma rozwiązań tego problemu, które nie dawałyby równowagi Nasha. No to załóżmy nie wprost, że µ = Px xi , i σ = Py yj , [x, y]T jest niezerowym rozwiązaniem naszego problemu, ale µ i σ nie tworzą j równowagi Nasha. (1.2) będzie oznaczało, że j aij yj ¬ 1 oraz i bij xi ¬ 1. Niech teraz I będzie zbiorem takich i, że w pierwszej nierówności jest równość, a J zbiorem j dla których jest równość w drugiej nierówności. Wtedy: P XX = ¬ i j X xi aij xi yj + X i∈I j X xi + i aij yj + XX i j X xi X bij xi yj = X i6∈I P aij yj + j X yj j∈J X xi bij + i X yj j6∈J X xi bij ¬ i yj , j gdzie równość w ostatniej nierówności zachodzi wtedy i tylko wtedy (i po to zostało to rozpisane na sumę po I i jego dopełnieniu, oraz po J i jego dopełnieniu), gdy xi = 0 na zbiorze I C , a yj = 0 na zbiorze J C . Tyle że warunek (1.3) implikuje, że tu jest równość. A zatem dostajemy warunki: ( P a y =1 Pj ij j jeśli xi > 0 jeśli xi = 0, ( P b x = v2 Pi ij i jeśli yj > 0 jeśli yj = 0, j oraz aij yj < 1 i bij xi < v2 co jest równoważne warunkom: P P1 =: v1 j aij σj = y j j P j aij σj < v1 ( P i bij µi P i bij µi dla i z nośnika µ dla i spoza nośnika, = P1 xi =: v2 dla j z nośnika σ < v2 dla j spoza nośnika, i ale w zadaniu 8. z 1. listy udowodniliśmy, że strategie µ i σ są w równowadze wtedy i tylko wtedy gdy spełniają powyższe warunki, a więc mamy sprzeczność, bo zakładaliśmy, że µ i σ nie tworzą równowagi Nasha. Teraz, co wynika z udowodnionego twierdzenia? Otóż problem, który pojawił się w powyższym twierdzeniu należy do znanej klasy problemów, i istnieją algorytmy, służące do jego rozwiązywania, i teraz sformułujemy ogólnie taki problem, i opowiem, na czym polega algorytm ich rozwiązywania. Problem komplementarności liniowej (LCP) Niech C będzie macierzą l × l (kwadratową), a q – wektorem l × 1 złożonym z samych jedynek. Znajdź zl×1 , spełniający: z ­ 0, q − Cz ­ 0, z T (q − Cz) = 0. 19 Pierwsze dwa warunki, to ograniczenia liniowe takie, jakie znamy z problemu programowania liniowego. Trzeci warunek nazywamy warunkiem komplementarności, bo oznacza on tyle, że na każdej współrzędnej i, albo zi = 0 albo i-ta współrzędna q − Cz jest równa zero (innych możliwości nie ma, bo dwa pierwsze warunki gwarantują, że każda współrzędna z i każda współrzędna q − Cz jest nieujemna). Algorytm rozwiązywania LCP wymyślili Lemke i Howson, i wygląda następująco: Algorytm Lemke-Howsona Zbiór wektorów w odpowiedniej przestrzeni l-wymiarowej spełniających zestaw liniowych ograniczeń (dwa pierwsze warunki zadające LCP), podobnie jak w przypadku programowania liniowego jest wypukłym wielościanem (bo to są takie same warunki jak te, które tam się pojawiły). Stąd kolejne kroki algorytmu będą wyglądały podobnie jak w przypadku algorytmu sympleks. Tu też będziemy przechodzili od wierzchołka do wierzchołka wielościanu zadanego przez te warunki (stąd kolejne kroki algorytmu będą polegały na wymienianiu między sobą zmiennych, których wyzerowanie odpowiada równości w poszczególnych warunkach). Cel algorytmu będzie tylko inny. W programowaniu liniowym mieliśmy funkcję celu, która zwiększała się przy każdym kolejnym kroku algorytmu, tu takiej funkcji celu nie ma, w związku z tym nie ma takiego jasnego kryterium wyboru kolejnego wierzchołka wielościanu, do którego ma przejść algorytm. Warunek, który będziemy sprawdzali przy zamianie zmiennych, będzie miał na celu jedynie to, żeby algorytm nie cofał się – nie przechodził do wierzchołka, który już sprawdzaliśmy. Jak poprzednio, zapisujemy wszystko w postaci tablicy: z1 z2 −c11 −c12 −c21 −c22 .. .. . . −cl1 −cl2 ... zl . . . −c1l 1 r1 . . . −c2l 1 r2 .. .. . . r3 . . . −cll 1 r4 Elementy tej tablicy będziemy oznaczać przez dij . Tablica ta reprezentuje układ równań q − Cz = r, gdzie ri jest zmienną równą i-tej współrzędnej q − Cz. Zmienne u góry tablicy, jak w algorytmie sympleks, są ustawione na zero, wartości pozostałych są równe temu, co stoi w l + 1. kolumnie tablicy. Startujemy z punktu z = 0, który jest rozwiązaniem LCP, ale nie generuje równowagi Nasha, i w kolejnych krokach algorytmu wykonujemy następujące operacje: 1. Wybieramy (dowolną, np. pierwszą) kolumnę macierzy j0 . Zapamiętujemy, która to była kolumna (czyli zmienna z jakim indeksem w niej stała). 2. Wybieramy taki wiersz i0 , że di0 j0 < 0 oraz wamy testem najmniejszego ilorazu). di0 ,l+1 −di0 j0 jest najmniejsze (tę regułę nazy- 3. Wymieniamy zmienną bazową (z prawej w wierszu i0 ) ze zmienną niebazową (u góry w wierszu j0 ), stosując te same reguły zmiany tablicy przy wymianie zmiennych co w algorytmie sympleks w zeszłym tygodniu (jak wtedy, di0 j0 z tyldą oznaczają wartości di0 j0 po wymianie zmiennych): 1 dg i0 j0 = di0 j0 di0 j dg j 6= j0 i0 j = di0 j0 dij0 dg i 6= i0 ij0 = − di0 j0 20 dfij = dij − di0 j dij0 . di0 j0 Jeśli numer zmiennej opuszczającej bazę r· był inny niż zmiennej z pierwszego punktu, zmienną z tym numerem wybieramy w następnym kroku jako tę, która wejdzie do bazy. Wybieramy kolumnę, w której stoi zmienna o tym numerze i wracamy do punktu 2. Jeśli numer zmiennej opuszczającej bazę był taki sam jak numer pierwszej wybranej przez nas, to algorytm się kończy, a my możemy odczytać z tablicy rozwiązanie LCP. Robimy to w następujący sposób: te ze zmiennych zi , które pozostały u góry tablicy mają wartość 0, pozostałe mają wartości równe tym w l + 1. kolumnie tablicy. Sens takiego „łańcuszka”, oraz warunku kończącego algorytm, jest taki: naszym celem jest znalezienie takiego punktu, w którym dla każdego indeksu i albo zmienna zi , albo i-ta współrzędna q − Cz, ri będzie równa zero. W związku z tym, jeśli na którymś kroku wyzerowaliśmy zmienną o indeksie j, zj lub rj , to sprawdzamy, czy druga z tych zmiennych też jest wyzerowana – jeśli tak, staramy się wymienić tę drugą na zmienną o takim indeksie i, że w danej chwili ani zi ani ri nie jest wyzerowana. W ten sposób otrzymalibyśmy sytuację, w której zarówno jedna ze zmiennych zj , rj , jak i jedna ze zmiennych zi , ri jest wyzerowana. Jeśli na danym kroku to nam się nie udaje, to wymieniamy jedną ze zmiennych o indeksie i (które w takim wypadku są obie u góry tablicy, czyli ich wartość jest ustawiona na zero) na jakąś inną zmienną (dzięki czemu jednocześnie na żadnym kroku algorytmu nie ma więcej niż jednego indeksu takiego, że zarówno zmienna r o takim indeksie, jak i zmienna z o takim indeksie, jest wyzerowana). Powtarzamy to tak długo, aż u góry (wśród zmiennych wyzerowanych) będzie się znajdowało po jednej zmiennej o każdym indeksie, czyli będzie spełniony warunek komplementarności. Przykład Mamy znależć równowagę w grze dwumacierzowej z macierzami wypłat: " A= 5 5 10 1 8 3 W takim przypadku macierz C = 0 0 2 8 2 0 0 3 2 7 # " , B= 5 1 0 0 0 2 8 2 3 2 7 # . 5 10 8 3 0 0 . Zapiszmy teraz wszystko w postaci 0 0 0 0 tabelki. z1 z2 z3 z4 z5 0 0 −5 −5 −10 1 r1 0 0 −1 −8 −3 1 r2 −2 −3 0 0 0 1 r3 −8 −2 0 0 0 1 r4 −2 −7 0 0 0 1 r5 Niech k = 1, co oznacza, że jako zmienną wchodzącą do bazy wybieramy z1 . Używając testu najmniejszego ilorazu wybieramy r4 jako zmienną, którą usuniemy z bazy. Po pierwszej 21 wymianie zmiennych dostajemy: r4 0 0 1 4 −1 8 1 4 z2 z3 z4 z5 0 −5 −5 −10 1 r1 0 −1 −8 −3 1 r2 −5 0 0 0 34 r3 2 −1 0 0 0 18 z1 4 −13 0 0 0 34 r5 2 Kolejną zmienną wchodzącą do bazy będzie z4 , a usuwaną r2 . Po drugiej zamianie zmiennych dostajemy: r4 z2 z3 r2 z5 3 5 −65 0 0 −35 r1 8 8 8 8 −1 −3 1 −1 0 0 z 4 8 8 8 8 1 −5 3 0 0 0 r 3 4 2 4 −1 −1 1 0 0 0 z 1 8 4 8 −13 1 3 0 0 0 r 5 4 2 4 Następnie wymieniamy z2 z r5 , co daje nam nową tablicę: r4 0 0 r5 0 0 2 13 −7 52 1 26 5 13 1 26 −2 13 z3 −35 8 −1 8 r2 5 8 −1 8 z5 −65 8 −3 8 0 0 0 0 0 0 0 0 0 z3 −7 13 1 13 r2 1 13 −2 13 r1 −8 65 3 65 0 0 0 0 0 0 0 0 0 3 8 1 8 6 13 5 52 3 26 r1 z4 r3 z1 z2 Dalej wymieniamy z5 z r1 , co daje: r4 0 0 r5 0 0 2 13 −7 52 1 26 5 13 1 26 −2 13 3 65 7 65 6 13 5 52 3 26 z5 z4 r3 z1 z2 I to już koniec, bo zmienna k-ta (czyli o numerze równym numerowi pierwszej zmiennej, która weszła do bazy – r1 ) została usunięta z bazy. Stąd rozwiązaniem LCP jest z = 5 3 7 3 , 26 , 0, 65 , 65 ). Po normalizacji otrzymujemy równowagę Nasha w wyjściowej grze µ = ( 52 5 6 7 3 ( 11 , 11 ), ν = (0, 10 , 10 ). Uwaga 1.7 Algorytm Lemke-Howsona, podobnie jak algorytm sympleks, ma wykładniczą złożoność obliczeniową. W przypadku zastosowania tego algorytmu do rozwiązywania dowolnych problemów komplementarności liniowej było to udowodnione już w latach siedemdziesiątych. To, że złożoność szukania równowag Nasha przy użyciu tego algorytmu też jest w najgorszym przypadku wykładnicza udowodnili Savani i von Stengel [4] trzy lata temu, co sugeruje, że w większości przypadków algorytm jest jednak w miarę szybki. To o tyle dobrze, że niestety w przypadku problemu komplementarności liniowej nie ma znanych algorytmów, które byłyby szybsze (nawet w teorii). Jakkolwiek nie jest oczywiste, że ktoś w przyszłości takich nie znajdzie, bo złożoność problemu szukania równowag w grach dwumacierzowych nie jest znana. Nie jest nawet pokazane, że problem policzenia jednej z równowag w grze dwumacierzowej jest NP-zupełny. Istnieją tylko rezultaty tego rodzaju dotyczące szukania równowag o pewnych zadanych własnościach (np. równowag, które są najlepsze dla któregoś z graczy). 22 Uwaga 1.8 Inną wadą algorytmu Lemke-Howsona jest to, że nie znajduje on wszystkich równowag Nasha. Jeśli rozpocznie się go w już znalezionej równowadze, można znaleźć inną, ale nie ma gwarancji, że tą drogą znajdzie się wszystkie równowagi (któreś mogą zostać pominięte). Problem w tym, że nie są znane algorytmy, które efektywnie (nawet jeśli za kryterium efektywności przyjąć średni czas znalezienia równowagi dla gry o zadanym rozmiarze) znajdywałyby wszystkie równowagi w zadanej grze. Te, które są znane, są w mniejszym lub większym stopniu zbliżone do algorytmu używanego przez nas na ćwiczeniach, polegającego na przeszukiwaniu po kolei wszystkich możliwych nośników strategii graczy, po odrzuceniu strategii silnie zdominowanych. 1.3.3 Gry n-osobowe To już końcówka wykładu, i powiem tylko kilka słów na temat algorytmów szukania równowag w grach z większą liczbą graczy. Podobnie jak w przypadku gier dwumacierzowych, można pokazać, ze ten problem da się sprowadzić do nieliniowego analogonu LCP, tzn. problemu znalezienia z takiego, że: z ­ 0, f (z) ­ 0, zj fj (z) = 0 j = 1, . . . , n, gdzie f jest pewną funkcją o wartościach z Rn (niekoniecznie liniową). To nie jest banalny problem, i jakkolwiek istnieją algorytmy dla gier n-osobowych oparte na tym spostrzeżeniu (niektóre z nich są uogólnieniami algorytmu Lemke-Howsona – te powstały na początku lat siedemdziesiątych), tyle że akurat te algorytmy są bardzo trudne do zaimplementowania (w swoim opracowaniu na temat algorytmów szukania równowag McLennan i McKelvey [3] piszą nawet, że nie słyszeli o tym, żeby ktoś te algorytmy zaimplementował). W związku z tym stosuje się inne podejście – mianowicie, jak pokazaliśmy na jednym z wcześniejszych wykładów, problem szukania równowagi w grze jest równoważny (właściwie pokazaliśmy tylko wynikanie w jedną stronę, ale przwdziwe jest w obie) pewnemu problemowi szukania punktu stałego. W związku z tym do szukania równowag w grach n-osobowych stosuje się algorytmy szukania punktu stałego funkcji ciągłej na zbiorze zwartym. Najbardziej znanym algorytmem tego rodzaju jest algorytm Scarfa. Większość innych jest jego modyfikacjami. Osoby zainteresowane tym, jak wygląda algorytm Scarfa zastosowany do szukania równowag w grach n-osobowych, odsyłam do wspomnianej pracy McLennana i McKelveya [3] 23 Bibliografia [1] I.L. Glicksberg, A further generalization of the Kakutani fixed point theorem with application to Nash equilibrium points, Proceedings of the American Mathematical Society 3 (1952) 170–174. [2] K. Kuratowski, Wstęp do teorii mnogości i topologii, PWN, Warszawa, 2004 (któreś wydanie). [3] R.D. McKelvey, A. McLennan, Computation of equilibria in finite games. Handbook of Computational Economics, Elsevier, 1996, vol. 1, pp 87-142. [4] B. von Stengel, R. Savani, Exponentially many steps for finding a Nash equilibrium in a bimatrix game. Proc. of FOCS 2004 (też http://www.maths.lse.ac.uk/Personal/stengel/TEXTE/focs04.pdf). [5] N. Vieille, On equilibria on the square, International Journal of Game Theory 25 (1996) 199–205. 24