Računalo i šah

Šahovski svijet ovih dana bruji o potencijalnom varanju stanovitog velemajstora. Postoje statistički indikatori varanja, korišteni ponajviše od stranica za online igranje poput chess.com, koji mjere koliko se potezi igrača podudaraju s potezima koje bi u istoj poziciji igrali šahovski programi (koji su odavno daleko nadmašili ljudske prvake). Ispada da rezultati mogu biti kontroverzni: dok stručnjak za šahovsko varanje Ken Regan ne pronalazi ništa sumnjivo u partijama Hansa Niemanna, analize od prije nekoliko dana koje kolaju društvenim mrežama upućuju na suprotno, tj. na neobično veliku podudarnost s računalom u nekim njegovim partijama.

Htio sam staviti nekoliko poveznica, ali ima toliko toga da ne znam odakle bih počeo, pa je najbolje ostaviti ovaj tekst čistim od linkova i skočiti na zaključak – jumping to conclusions! A praktični zaključak glasi: tko god je sklon statistici, može napraviti doktorat o detekciji varanja u šahu na osnovi poteza, jer to se područje očigledno tek razvija. Štoviše, čini mi se relativno jednostavno napisati nekakav znanstveni rad iz ovog područja. Zašto? Postoji stotinu načina da mjerimo performans igrača i uspoređujemo ga sa strojem; dovoljno je od golemih mogućnosti skrojiti neku metriku, ili nekoliko njih, koja daje dobre rezultate na bazama šahovskih partija. Tanak sam s vremenom, ali neću se žaliti ako mi se javi netko tko želi surađivati i odraditi dosadniji dio posla – istraživanje dosadašnjih radova, usporedba s postojećim mjerama, bla bla – a ja da pomognem s idejama 😀 😀

Ipak, osobno me više privlači nešto mnogo beskorisnije, nešto što su drugi već napravili i to daleko bolje – izrada programa koji dobro igra šah. Recimo, bolje od mene – s tim bih bio sasvim zadovoljan. To bih radio iz čiste zabave, kao lijep, težak i prilično bogat programerski izazov. Bogat u smislu različitih podizazova koji se javljaju: od optimizacije utroška vremena i memorije, do samog algoritma, redoslijeda pretraživanja pozicija i rezanja grana (pruning) te ključnog i najtežeg dijela – evaluacije pozicije. Nije lako ni odabrati jezik: program u C++-u bio bi daleko brži od onog u Pythonu, ali u Pythonu je brže i ljepše programirati, a budući da sve to radim iz gušta, moj je odabir jasan… Jedini je uvjet da ne koristim nikakve postojeće šahovske biblioteke. Ali smijem koristiti baze šahovskih partija!

Za one koji ne znaju, a zanima ih, pokušat ću ugrubo objasniti kako računalo igra šah.

Za početnu ilustraciju odaberimo jednostavniju igru: kružić-križić. U bilo kojoj poziciji ove igre možemo razmišljati ovako: ako ja odigram ovo, što će protivnik igrati? Ako on odigra ovo, što ću nakon toga ja igrati? Ako ja na to odigram ovo, što će onda on… I tako dalje, sve do kraja, do pozicije gdje je jasan pobjednik (ili je neriješeno). Kada postoji više mogućih odgovora, treba isprobati sve “grane stabla”. Uz dovoljno vremena i papira možemo nacrtati sve dohvatljive pozicije i točno znati što treba igrati da bismo zajamčili pobjedu ili izbjegli poraz. Tako će, naravno, igrati i računalo.

U šahu se primjenjuje sličan postupak, ali postoji velika razlika. U križić-kružiću već nakon nekoliko poteza dolazimo do kraja, do pozicije za koju znamo ishod (pobjeda/poraz/neriješeno). U šahu je broj pozicija prevelik i analiza ne može doći do kraja. Možda možemo pregledati sve pozicije do kojih možemo doći nakon jednog, dva, tri, četiri i pet poteza – ali u nekom trenutku moramo stati jer smo vremenski i memorijski ograničeni. Mnoge od predviđenih pozicija neće biti ništa jasnije, ništa bliže završetku partije od pozicije u kojoj se trenutačno nalazimo. Što onda?

Dolazimo do ključnog dijela šahovskog programa, a to je evaluacija pozicije. Kad provjerava neku poziciju, ako se više nema vremena granati, program mora na drugi način ocijeniti koliko je ta pozicija poželjna. Ta procjena bit će neki broj: recimo, od -10 do 10, gdje nula znači da su snage izjednačene, pozitivan broj znači prednost bijeloga, a negativan broj prednost crnoga. Ali kako se on računa? Program Stockfish procjenjuje poziciju zbrajajući elemente za koje iskustvo kaže da su važni: vrijednosti figura, sigurnost kralja, struktura pješaka, kontrola središta ploče, napadanja, odmakli pješaci itd. Težinski parametri u formuli podešavaju se strojnim učenjem na osnovi goleme baze partija šahovskih velemajstora – za koje znamo kako su završile, pa za sve pozicije koje su se javile u tim partijama znamo kakav je bio njihov ishod. Općenito, u takav program ugrađeno je mnogo ljudskog znanja o šahu. To nije slučaj s još boljim programima kao što je AlphaZero koji ne koristi nikakvo ljudsko znanje o šahu (osim samih pravila). On poziciju ubacuje u golemu formulu koja ljudskom oku nije razumljiva – neuronsku mrežu – čije brojeve podešava kad sazna je li pogriješio, a uči igrajući sam protiv sebe.

To su osnovne ideje u pozadini šahovskih programa. Naravno, preskočili smo mnoge detalje, ali kraće je slađe. Ne znam hoću li se na kraju upustiti u programiranje ovako nečega, ali ako se netko želi natjecati, možda me to dodatno motivira… 😉

2 misli o “Računalo i šah

  1. Nisam ekspert, ali zašto varalica ne bi ovako igrao: za svako stanje na ploči vidi kojih su top N poteza koja preporuča algoritam, uz pretpostavku da je politika algoritma stohastička, i varalica bira neki od ta 3 poteza, ne nužno uvijek najbolji. Na taj način izbjegava preklapanje s algoritmom i teže je dokazivo, a ako je algoritam jak moguće da je varalica unatoč tome i dalje dovoljno dobar da pobijedi. Možda je bolji put detekcije varanja sljedeći: mjeriti koliko igrač odstupa od svog stila igre (u prijašnjim igrama). Ne znam koliko bi to dobro za šah funkcioniralo, jer je moguće da igrači prilagođavaju stil protivniku. No možda ima nekih invarijanti kršenje kojih bi se dalo detektirati i koje je dovoljan uvjet za veliku vjerojatnost varanja.

    Sviđa mi se

Komentiraj

Popunite niže tražene podatke ili kliknite na neku od ikona za prijavu:

WordPress.com Logo

Ovaj komentar pišete koristeći vaš WordPress.com račun. Odjava /  Izmijeni )

Twitter picture

Ovaj komentar pišete koristeći vaš Twitter račun. Odjava /  Izmijeni )

Facebook slika

Ovaj komentar pišete koristeći vaš Facebook račun. Odjava /  Izmijeni )

Spajanje na %s