Monte Carlo drevesno iskanje

Monte Carlo drevesno iskanje

Avtor: Matic Černač

Motivacija

Igra go. Go je strateška miselna igra na deski za dva igralca. Izvira z Daljnega vzhoda, kjer je še danes najbolj priljubljena. Postopoma pridobiva popularnost tudi v drugih delih sveta. Za igro so potrebni deska ter figure, imenovane kamni, dveh različnih barv - navadno so bele in črne.

(http://www.nauk.si/materials/6758/src/Monte_Carlo_drevesno_iskanje/go-igralna-plosca.png)
Igralna plošča in kamni za go

Deska je z vodoravnimi in navpičnimi črtami razdeljena na množico točk (presečišč črt), katerih število je odvisno od želene težavnosti in dolžine igre. Najpogostejše so mere 9×9, 13×13 in 19×19 točk. Igralca med igro izmenično polagata kamne na presečišča. Cilj igre je s svojimi figurami obkrožiti več prostora (tj. praznih presečišč) od nasprotnika.

Prvi začne igro črni, ki lahko svoj kamen položi na katerokoli presečišče. Nato je na vrsti beli igralec, ki lahko svoj kamen položi kamorkoli, razen na že stoječega.

Preprostost teh pravil pokvari pravilo, da mora vsak kamen na deski »živeti«. To pomeni, da mora imeti prosto vsaj eno točko, ki je posredni ali neposredni sosed točke, na kateri leži kamen (veljajo le vodoravne in navpične povezave, na pa diagonalne).

Posebne strukture

Atari. Kamen je v »atari«, kadar se ga da vzeti z eno potezo. Podobno kot kralj v »šahu« (le da ga tam ne vzamemo). Seveda je možno da je cela skupina kamnov v »atari« - očesa pa igralca zaščitijo pred to situacijo.

Dvojna očesa. S takšno strukturo lahko zaščitimo katerikoli kamen, ki je njen del, saj nasprotnik ne more v eni potezi zavzeti vseh svobod, ne da bi kršil pravila.

(http://www.nauk.si/materials/6758/src/Monte_Carlo_drevesno_iskanje/dvojno-oko.png)
Dvojno oko

Verige. Večje skupine medsebojno povezanih kamnov ene barve, ki npr. sekajo desko, obkrožajo nasprotnika ipd. Zaradi svoje velikosti imajo veliko prostosti. Pravimo, da veriga »živi«, če ima vsaj dve, med seboj neodvisni očesi ali pa dovolj »prostora« znotraj sebe, da lahko kadarkoli to naredi. Na spodnji sliki A označuje teritorij črnega, B pa belega. F je nevtralni teritorij. Skupina, kjer je kamen C je uspela oblikovati dvojno oko in bo zato preživela. Kamen E bo prej ali slej mrtev.

(http://www.nauk.si/materials/6758/src/Monte_Carlo_drevesno_iskanje/verige.png)
Verige

Ko. Slika nakazuje potezo črnega (polprosojno), ki je znana kot »ko«. Črni bo vzel belemu kamnu vse svobode, ga odstranil s plošče in si priboril eno svobodo. Na to potezo bi beli normalno takoj odgovoril s kamnom na istem mestu, a pravila prepovedujejo takšno vrtenje v krogu, zato mora beli igralec kamen postaviti drugam. Beli igralec zato izbere potezo, na katero črni »mora« odgovoriti. Taki potezi rečemo grožnja in naj bi bila ekvivalentna (ali večja) od izgube, če črni na potezo ne odgovori.

(http://www.nauk.si/materials/6758/src/Monte_Carlo_drevesno_iskanje/ko.png)
Ko

Kaj je Monte Carlo drevesno iskanje?

Na kratko

Monte Carlo drevesno iskanje (angl. Monte Carlo Tree Search - MCTS) je metoda za iskanje optimalne odločitve na določeni domeni s pomočjo naključnega jemanja vzorcev iz prostora možnih odločitev in graditev iskalnega drevesa na podlagi dobljenih rezultatov. Torej v neki igri simuliramo naključne poteze, od tod povezava z Monte Carlo metodami. Sosledje izbranih potez nato predstavimo z drevesom.

Čemu motivacija na začetku?

Mini max algoritem ni primeren za igre z velikim t.i. vejitvenim faktorjem (angl. branching factor). Le-ta pomeni število podrejenih vozlišč (otrok), ki vodijo iz izbranega vozlišča. Povedano drugače, kompleksnost (število vseh stanj, pozicij) teh iger je zelo velika. Izkaže se, da je v primeru iger kot je go, Monte Carlo drevesno iskanje boljša izbira.

(http://www.nauk.si/materials/6758/src/Monte_Carlo_drevesno_iskanje/mcts-pogled.png)
Pogled na algoritem MCTS od daleč

Prostorska kompleksnost iger.

IGRAKOMPLEKSNOSTSTATUS
Križci in krožci (tri v vrsto)10^3Rešeno ročno.
Štiri v vrsto.10^14Rešeno leto 1988.
Dama10^20Rešeno leto 2007.
Šah10^50Algoritmi premagajo človeka.
Go 19x19, go 13x13, go 9x910^171, 10^79, 10^38Nekateri algoritmi premagajo človeka; odvisno tudi od velikosti igralnega polja (9x9, 13x13,19x19); na večjih je človek boljši.

Kaj vse je privedlo do razvoja teorije Monte Carlo drevesnega iskanja?

Teorija odločitev. Združuje teoriji verjetnosti in koristnosti. Omogoča nam ogrodje za odločanje v pogojih negotovosti. Teorija iger. Le-ta je razširitev teorije odločitev v primeru, ko pride do interakcije več agentov (npr. igralcev pri neki igri). Igro definiramo kot zbirko pravil, ki omogočajo interakcijo enega ali več igralcev in s tem povezanih rezultatov oz. dobitkov. Metode Monte Carlo. Te metode imajo svoje korenine v statistični fiziki, kjer jih uporabljajo za izračun približkov analitično nerešljivih integralov, tj. pri numeričnem integriranju. Danes se uporabljajo tudi pri računalniški grafiki in biologiji, uporabni statistiki, v finančne svetu in seveda pri iskanju najboljših potez pri različnih igrah. Problem igralnih avtomatov, angl. »Multi-armed bandit problem«. Na njega naleti hazarder v igralnici, ko je postavljen pred vrsto igralnih avtomatov in se potem sprašuje:

  • na katerih avtomatih naj igra;
  • kolikokrat naj igra na posameznem avtomatu;
  • v katerem vrstnem redu naj igra. Vsak avtomat vrne naključen izid glede na svojo porazdelitev . Te porazdelitve niso znane. Hazarder seveda želi maksimirati svoj seštevek zadetkov.

Problem igralnih avtomatov

Kot je že bilo omenjeno na prejšnji prosojnici sak avtomat vrne naključen izid glede na svojo porazdelitev. Te porazdelitve niso znane. Hazarder seveda želi maksimirati svoj seštevek zadetkov. Pri tem je pomembno usklajeno razmerje med pridobivanjem (npr. večkrat eno in isto ročko) in raziskovanjem (katere ročke bi še uporabili?). Tu nastopi izračun UCB za vozlišče v oz. ročko(angl. Upper Confidence Bound). Izračun sta predlagala Levente Kocsis in Csaba Szepesvári.

Q(v') je vrednost otroka vozlišča v.
N(v') je število obiskov otroka vozlišča v.
N(v) je število obiskov vozlišča v, za katerega tudi računamo UCB(v).
c je lahko 0 ali 1.

Prvi člen v vsoti predstavlja izkoristek. Višji je za višje vrednosti vozlišča (ugodnejši položaji v igri). Drugi člen zastopa raziskovanje. Višji je za vozlišča, ki so bila obiskana malokrat, torej malokrat preizkušeni položaji.

(http://www.nauk.si/materials/6758/src/Monte_Carlo_drevesno_iskanje/slotMachine.png)
Igralni avtomat

Izračun UCB

(http://www.nauk.si/materials/6758/src/Monte_Carlo_drevesno_iskanje/mcts-pogled-eng-large.png)
Primer drevesa

selection – izbira, expansion – širitev, simulation – simulacija, - backpropagation – povratno poročanje. Številke v krogih predstavljajo razmerje (vrednost vozlišča)/(število obiskov i-tega vozlišča).

c=0 (pomembna je vrednost poteze, položaja)c=1 (pomembno je število obiskov vozlišča)
Podrejeno vozlišče 2/4
Podrejeno vozlišče 5/6

Pri obeh vrednostih c-ja bo algoritem izbral 2. vrstico. Vedno se izbere vozlišče z višjo vrednostjo UCB.

Opis delovanja v naravnem jeziku

Izbira

Začenši s korenom K, izberi najbolj uspešna podrejena vozlišča do lista L. Pri tej izbiri nam pomaga zgoraj omenjeni izračun UCB.

Širitev

Če L ni končno stanje igre, ustvari nobeno, eno ali več novih vozlišč (otrok O), ki vodijo iz L. Izberi en O in začni simulacijo iz L.

Simulacija

Igraj naključno igro iz vozlišča O.

Vzvratno poročanje

Za vsako vozlišče na poti od O do korena K osveži podatke o izidu igre in število igranih iger povečaj za ena. Zgoraj opisani postopek se izvaja vse dokler je znotraj predpisanega časa oziroma prostora. Za tem se lahko izbere bodisi vozlišče, ki ima največje število zmag, bodisi najbolj obiskano vozlišče. Pogosto ti dve izbiri pomenita eno in isto stvar, ne pa vedno.

Psevdokoda

Spodaj je psevdokoda ene izmed največkrat uporabljenih izvedb algoritma MCTS. Imenuje se UCT.

 funkcija iskanjeUct(s0)
            ustvari začetno vozlišče v0 s stanjem s0
            dokler znotraj predpisanega časa/prostora izvajaj
                vl = drevo(v0)
                d = predpiši(s(vl))
                poročaj(vl, d)
            vrni a(najboljšiOtrok(v0, 0))
Začetna, 'glavna' funkcija. Že takoj na začetku je treba pojasniti, da ima vektor vozlišča v naslednje 4 komponente: (stanje s, dejanje oz. akcija a, vrednost Q, število obiskov N). vrni a(najboljšiOtrok(v0, 0)) bi lahko brali tudi kot »odigraj potezo z najboljšim izidom«. Če je drugi argument funkcije najboljšiOtrok enak 1, potem izberemo najbolj obiskano vozlišče, namesto tistega, ki ima najboljši izid. Ti dve možnosti največkrat vodita do istega položaja, ne pa vedno.
 funkcija drevo(v)
            dokler v ni končen izvajaj
                če v ni v celoti razširjen potem
                    vrni razširi(v)
                drugače
                    v = najboljšiOtrok(v, cp)
            vrni v
 
Dopolnjujemo drevo z novimi vozlišči.
 funkcija razširi(v)
            izberi a iz nepreizkušenih dejanj A(s(v))
            v dodaj novega otroka v'
            s stanjem s(v') = f(s(v), a)
            in a(v')=a
            vrni v'
 
Dejanja A so odvisna od konkretne igre, torej ali igramo go, šah, reversi, hex itd. f(s(v), a) je prav tako odvisna od igre same.

 funkcija najboljšiOtrok(v, c)
            vrni 

 pri čemer je v' otrok v
 

Q(v') je seštevek vseh izidov, ki sledijo iz vozlišča v'. N(v') je število vseh obiskov tega vozlišča. Raziskovalni parameter je po dogovoru lahko 0 ali 1. V našem primeru je 0, kar nas vodi k 'otroku' z najvišjo vrednostjo. Če je 1, nas vodi k najbolj obiskanemu.
 funkcija predpiši(s)
            dokler s ni končen izvajaj
                naključo izberi a iz A(s)
                s = f(s, a)
            vrni vrednost za stanje s
A(s) je odvisen od igre same, podobno f. Dejansko gre za simulacijo igre, začenši s stanjem s od vozlišča, ki ga je poprej vrnila funkcija drevo.
 funkcija poročaj(v, d)
            dokler v ni prazen (oz. null) izvajaj
                N(v) = N(v) + 1
                Q(v) = Q(v) + d
                v = starš od v
 
Funkcija poroča svojim nadrejenim vozliščem oz. t.i. otrokom. Določi jim število obiskov in seštevek vrednosti podrejenih vozlišč.

Postopek

Lastnosti algoritma UCT

Algoritem UCT je:

  • ahevrističen: ena izmed največjih prednosti tega algoritma je ta, da ne potrebuje posebnega znanja o nekem področju, zato ga lahko uporabimo za katerokoli domeno, ki se jo da modelirati s pomočjo drevesa; tudi pri šahu, kjer so se z ustvarjanjem kvalitetnih hevrističnih algoritmov ukvarjali leta, se UCT odreže zelo dobro; posebej uporaben je kot že omenjeno pri igri go, kjer tradicionalni minimax odpove; vendar je treba poudariti, da sodobni programi za go kombinirajo tako različne izvedbe algoritma MCTS, kot tudi specifično znanje o igri; tu nastopi vprašanje, koliko tega znanja dodati v program, da se hitrost izvajanja preveč ne spremeni; hitrost pa je ravno ena izmed prednosti algoritma UCT, ki nima implementiranega znanja;
  • ažuren: izid naključne igre se poroča navzgor takoj, zato imamo na vsakem koraku iteracije sveže podatke;
  • asimetričen: algoritem favorizira bolj obetavna vozlišča, zato graf postopoma pridobiva asimetrično obliko.

Primer

Omejimo se na primer 5x4, na levi je konfiguracija koordinat. Črni je računalnik, ki uporablja algoritem MCTS. Kamne odlagamo na križišča. Dodajamo dva otroka. Ujetih kamnov ni.

(http://www.nauk.si/materials/6758/src/Monte_Carlo_drevesno_iskanje/mcts-primer-polje.png)
Igralno polje
(http://www.nauk.si/materials/6758/src/Monte_Carlo_drevesno_iskanje/go2.pngi)
Korensko vozlišče
0%
0%