1
_____________________________________
UVOD
Stalni razvoj hardvera i softvera računara omogućio je značajno povećanje složenosti obrade
informacija i izazvao uvođenje nekih novih računarskih disciplina. Istorijski tok razvoja
računarstva se kretao od aplikacija namenjenih obradi pre svega numeričkih podataka ka
aplikacijama koje obrađuju simboličke i druge složene tipove podataka.
Sama oblast veštačke inteligencije utemeljena je još pedesetih godina, radovima velikih
teoretičara (Claude Shannon, Alan Turing, John for Neumann i drugi). Cilj istraživanja u ovoj
naučnoj oblasti je dizajniranje mašina koje će omogućiti obradu kompleksnih vidova
informacija i realizaciju sistema za:
Obradu simboličkih (ne-numeričkih) matematičkih operacija,
Prevođenje sa jednog prirodnog jezika na drugi,
Donošenje stratešhih odluka u jednostavnijim vojnim operacijama,
Komponovanje i orkestraciju muzike,
Logičku dedukciju,
Prepoznavanje oblika i automatsku percepciju prostora,
Kompjuterski šah.
Teoretski i praktični aspekti navedenih problema izuzetno su složeni, tako da većina ni do
danas nije na zadovoljavajući način rešena. Međutim, kao proizvod istraživanja u ovim
oblastima došlo je do razvoja programskih jezika veštačke inteligencije (LISP, PROLOG),
objektno-orijentisanih koncepata u programiranju, alternativnih pravaca kao što su veštačke
neuronske mreže …
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Kompjuterski šah je oblast veštačke inteligencije koja je po rezultatima izuzetno
napredovala. Danas, čak i na personalnim računarima postoje šahovski programi koji igraju
na nivou velemajstora, a pobeda IBM-ovog superkompjutera nad svetskim šampionom G.
Kasparovim 1997 smatra se za istorijski događaj i prekretnicu u razvoju vešatačke
ineligencije jer je po prvi put mašina uspela da u direktnom duelu porazi svetskog šampiona u
intelektualnoj igri.
Sama oblast kompjuterskog šaha je integracija mnogih naučnih i inženjerskih disciplina
kao što su: matematičke teorija igara, formalizacije znanja i evaluaciona funkcija, ekspertnih
sistemi, metoda za rad sa višestrukim stablima odlučivanja, programiranje, paralelizacija,
metode za rad sa bazama podataka, softverska i hardverska optimizacija, teorija odlučivanja.
U tezi će se obraditi sve relevantne oblasti koje su direktno ili indirektno uključene u
projekat kompjuterskog šahovskog sistema.
U teoretskom delu, obradiće se algoritmi koje se mogu svrstati u grupu naprednih
programskih tehnika. Najveći broj novina je publikovan u odgovarajućim radovima i
eksperimentalno proveren u laboratorijskim i realnim, turnirskim uslovima.
Kao praktični deo rada, biće prikazana struktura programa Axon, koga autor razvija više
godina i koji je u poslednjoj verziji dostigao šahovsku snagu intermajstora (rejting 2500). Od
2001. program je uspešno učestvovao na nizu turnira, ravnopravno se takmičivši sa
šahovskim majstorima. Paralelna verzija šahovskog sistema Achilles, koja je razvijena na bazi
istraživanja naprednih algoritama u oblasti paralelizacije pokazuje izuzetno dobre rezultate u
igri protiv drugih programa. Takođe, korišćenjem Internet tehnologija paralelni sistem
Achilles je povezan sa najvećim svetskim šahovskim serverom ChessBase.
Teza se logički sastoji iz 2 osnovna dela. Prvi deo, koji obuhvata prva četiri poglavlja,
posvećen je teoretskim osnovama kompjuterskog šaha, koje predstavljaju bazu za razvoj
praktičnih šahovskih aplikacija. U drugom delu biće obrađeni teoretski i praktični doprinosi
samog autora ovoj oblasti veštačke inteligencije.
Po temama i poglavljima, teza ima sledeću strukturu:
o TEORETSKE OSNOVE KOMPJUTERSKOG ŠAHA
TEORIJA IGARA
KOMPJUTERSKI ŠAH I VEŠTAČKA INTELIGENCIJA
STRUKTURA ŠAHOVSKOG PROGRAMA
TRANSPOZICIONE BAZE OTVARANJA I ZAVRŠNICA
o TEORETSKI I PRAKTIČNI DOPRINOSI AUTORA
TEORETSKA ISTRAŽIVANJA NAPREDNIH ALGORITAMA
IMPLEMENTACIJA I EVALUACIJA SISTEMA
TESTIRANJE I EKSPERIMENTI
2
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
U prvom delu biće obrađene osnove matematičke teorije igara, koja predstavlja bazu svih
strateških igara. Osnovni pojmovi kompleksnosti i problema kombinatorne eksplozije biće
razmatrani. Takođe, dva bazična pristupa vezana za selektivnost u traženju (Shannon-A i
Shannon-B tip) biće obrađeni u smislu teoretskih i praktičnih aplikacija. Povezanost i uticaj
kompjuterskog šaha na razvoj veštačke ineligencije takođe će biti naglašen. U ovom delu
prikazaće se i kraći istorijat ove veoma propulzivne oblasti računarstva, od njenog
utemeljivanja pa do poslednjih velikih mečeva sa svetskim šampionima. Osnovna koncepcija
i struktura trenutno najjačih paralelnih šahovskih mašina biće takođe analizirana. U nastavku
teze, prikazaće se teoretske osnove svih do danas poznatih algoritama u kompjuterskom šahu,
kao i softversku organizaciju samog šahovskog programa i programskog interfejsa prema
standardnom grafičkom (GUI) okruženju. Detaljno će se razmatrati struktura osnovnih
komponenti: generatora poteza, evaluatora i algoritma za traženje-obradu stabla (searcher),
kao i njihova međusobna povezanost i interakcija. U poglavlju o generatorima poteza
prikazaće se osnovni tipovi predstavljanja šahovske table preko dvodimenzionalnih oivičenih
matrica i preko bitboard-ova. U ovom delu razmatraće se uticaj redosleda poteza (move
ordering) na performanse samog sistema za traženje. U delu o evaluatorima razmatraće se
problemi statičke i dinamičke evaluacije, SSE tehnika, kao i formalizacija znanja na nivou
evaluacione funkcije korišćenjem principa pozicione evaluacije. U poglavlju o tehnikama
obrade stabla biće prikazane i analizirane sve vodeće klasične teoretske tehnike: ALFA-BETA,
PVS (Principal Variation Search), NegaScout, Null-move heuristika, MTD(f) algoritam,
Quiescence traženje, heurističke ekstenzije i redukcije traženja. Alternativni algoritmi kao što
su Berlinerov B* i pristup preko konspirativnih brojeva biće takođe prikazani.
Drugi deo teze posvećen je teoretskim i praktičnim doprinosima samog autora, kao i
osnovama na kojima je izgrađen šahovski program Axon I paralelni šahovski sistem Achilles.
Sva nova teoretska rešenja i poboljšanja implementirana su i testirana u posebnoj verziji
programa, čime je dokazana njihova praktična vrednost. U ovom delu će pre svega biti
obrađeni novi koncepti u kompresiji hash memorije koja je sastavni deo realizacije efikasnog
sistema za obradu stabala, zatim novi koncept detekcije ponavljanja pozicija korišćenjem
varijantnih nizova čime se dopunjuje postojeći sistem baziran na 64-bitnim Zobrist hash
ključevima, koncept “inteligentnih” figura koji omogućava optimalni raspored i strukturu
taktičkog i strateškog znanja koje program poseduje, metoda adaptivne promene horizonta
traženja u funkciji lokalnih vrednosti maksimuma evaluacione funkcije, metoda integracije i
nasleđivanja informacija u fazi generator poteza-evaluaciona funkcija. Takođe, biće
razmatrana i struktura paralelnih algoritama i priloženo rešenje za paralelizaciju algoritma za
obradu stabla na distribuiranim, slabo-spregnutim sistemima. Velika većina današnjih rešenja
u domenu paralelizacije zasniva se na korišćenju dual i quad mašina koje su skupe i u znatno
manjem procentu pristupačne nego klasične PC mašine. Sa druge strane, integracijom
mrežnih interfejsa na samu matičnu ploču računara danas se veoma lako mogu izgraditi brze
100 Mbitne ili 1 G-bitne lokalne mreže sa proizvoljnim brojem jednoprocesorskih sistema.
Novi koncept paralelizacije koji je razrađen u tezi se upravo i oslanja na upotrebu ovih mreža.
Drugi značajan doprinos zasniva se koncepciji originalne baze otvaranja (opening tablebase)
koja ima mogućnost samo-podešavanja i samo-generisanja novih čvorova, čime je ostvaren
jedan od osnovnih koncepata veštačke inteligencije. Takođe, u fazi završnica autor je razvio i
generisao novi tip baza, veličine reda 5 gigabajta, koji omogućava da se u svim mogućim
rasporedima 3, 4 ili 5 figura na tabli direktno očita evaluacija pozicije, bez potrebe da se ide
dalje u algoritmu za traženje. Na ovaj način, značajno se poboljšava igra u završnici sa jedne
strane, dok se sa druge strane omogućavanja potpuno rešavanje pojedinih pozicija u
šahovskim problemima i studijama.
3
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
U nastavku teze izložiće se principi realizacije programa Axon čija je struktura i način
rada u potpunosti teoretski obrađen u predhodnim poglavljima u tezi. Razmatraće se hibridna
struktura programa koji je delimično pisan na programskom jeziku Pascal (oko 4000 linija) i
asembler (oko 50000 linija) i pokazaće se da je ovo optimalno rešenje za programe slične
namene jer omogućava fleksibilnost i rekurzivnost svojstvene višim i objektno-orijentisanim
programskim jezicima uz istovremeno zadržavanje brzine jezika niskog nivoa. Takođe, u
ovom delu prikazaće se empirijski rezultati testiranja programa u najrazličitijim modovima
rada, jednoprocesorskim i višeprocesorskim, čime će se jasno utvrditi prednosti ili nedostaci
pojedinih teoretskih tehnika i algoritama. Struktura paralelnog distribuiranog sistema Achilles
baziranoj na novoj 32-bitnoj verziji programa Axon II će biti detaljno obrađena. Metodi koji
će se koristiti za empirijska istraživanja su: benčmark testovi, standardni strateški i taktički
EPD testovi, mašinski (engine-engine) mečevi, kao i partije odigrane na realnim šahovskim
turnirima uz učešće šahovskih majstora. Do 2006 god. program Axon je učestvovao na 5
majstorskih turnira, na brzopoteznom turniru u okviru međunarodne ICEST konferencije
2003, na četvoromeču uz učešće 3 šahovska intermajstora i u dva meča protiv intermajstora i
velemajstora sa konstantno vrhunskim performansama. Takođe, u ovom delu razmatraće se i
standardizacija i povezivanje programa na standardna GUI okruženja uz korišćenje Winboard
i UCI komunikacionih protokola.
Rezultati teze se mogu izraziti u teoretskom i praktičnom, inženjerskom domenu.
Teoretske novine koje su uvedene od strane autora i koje će biti detaljno analizirane u tezi su:
Princip detekcije ponavljanja pozicije korišćenjem varijantnih nizova,
Princip nulte evaluacione funkcije u aplikacijama za rešavanje matova (Mate
Solver Application),
Algoritam za adaptivnu kontrolu dubine (A.D.C.),
Metoda za distribuiranu paralelizaciju šahovskih algoritama korišćenjem lokalne
mreže,
Princip individualizacije figura i integracije generatora poteza i evaluatora,
Definicija transpozicione baza otvaranja sa mogućnošću mašinskog učenja,
ENAX baze završnica.
Sve ove tehnike su implementirane i evaluirane u realnoj šahovskoj aplikaciji.
Praktični doprinos autora je višegodišnji rad na implementaciji i realizaciji šahovskog
programa Axon za jednoprocesorske PC mašine koji ima nivo jakog internacionalnog
majstora, kao i paralelnog distribuiranog sistema Achilles koji igra na nivou velemajstora.
Programski sistemi koje je autor samostalno razvio sadrže nekoliko stotina hiljada linija koda
na mašinskom jeziku i programskom jeziku Delphi for Windows. U poslednjoj verziji, sistem
Achilles je povezan preko Interneta na najveći svetski šahovski server ChessBase, kao jedini
sistem te vrste u ovom delu Evrope.
U zaključku, autor će izložiti svoju koncepciju i viziju budućeg razvoja ove izuzetno
dinamične oblasti veštačke inteligencije, kao i plan razvoja sledećih verzija programa Axon I
Achilles.
4
2
_____________________________________
TEORIJA IGARA
Teorija igara je naučna oblast koja svoje korene ima još u 17. veku, kada su neke osnovne
ideje izložene u prepisci velikih matematičara Pascal-a i Fermat-a. Ova teorija je u osnovi
povezana sa matematičkom teorijom verovatnoće [Beasley, 1989], ali se kasnije razvila u
potpuno samostalnu teoriju koja obuhvata tretiranje ne samo logičkih igara već i brojnih
problema koji su u vezi sa ekonomskim, vojnim i sociološkim fenomenima.
U ovom poglavlju izložene su osnovne postavke i klasifikacije u teoriji igrara. One
pružaju osnovu za razvoj metoda na kojima se bazira realizacija algoritama za tretiranje
logičkih igara. Šah, kao jedna od igara po svojoj definiciji može biti tretiran kao klasičan tip
igre i na njega mogu biti primenjeni svi teoretski i praktični rezultati koji su u vezi sa teorijom
igara. Ako se primene i metode koje su nadgradnja teorije, kao što je minimax princip, može
se realizovati kompjuterski program koji igra šah – odnosno, ako se ima u vidu terminologija
teorije igara, program koji prolazi Tjuringov test inteligencije. Na taj način ostvarena je
direktna veza dve velike naučne oblasti – teorije igara i veštačke inteligencije koji predstavlja
osnovu na kojoj je baziran rad autora u oblasti kompjuterskog šaha. Takođe, postoji izuzetna
povezanost velikog broja šahovskih problema sa mnogim oblastima matematike [Petković,
1997] .
2.1 Osnovni pojmovi u Teoriji igara
Teorija igara predstavlja teoriju o nezavisnom donošenju odluka u organizacijama gde
odluke donose dva ili više autonomnih igrača – odnosno u organizacijama ne-hijerarhijskog
tipa, gde ne postoji jedan centar odlučivanja [Fudenberg, 1995],[Jones, 1980],[Owen, 1982].
Igrači koji samostalno donose odluke potpuno su nezavisni i ne podležu uticaju i upravljanju
od strane nekog višeg entiteta. Klasične logičke igre kao što su šah, bridge, go direktno se
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
svrstavaju u grupu igara koje se mogu tretirati metodama teorije igara, ali je ona tokom
vremena značajno generalizovana tako da se danas mnogi problemi u sociologiji, ekonomiji i
drugim oblastima mogu proučavati primenom teorema i pravila iz teorije. Osnovna
pretspostavka koja omogućava da se neki sistem tretira teorijom igara je apsolutna
nezavisnost odluke igrača od uticaja drugih igrača što je moguće izvesti jedino u oblasti
logičkih igara. U stvarnom životu to naravno ne može da bude u potpunosti tačno, tako da se i
danas, principi iz teorije igara ne mogu u potpunosti primeniti na društvene fenomene.
Prema interesima igrača koji učestvuju u igri postoje nekoliko klasa igara koje se mogu
izdvojiti.
Kooperativne igre - (cooperative games) je klasa igara kod kojih igrači imaju
zajednički interes. Dobar primer je sa automobilima koji idu jedan drugom u susret.
Vozači, koji predstavljaju igrače u ovom sistemu, imaju tri mogućnosti na
raspolaganju: da skrenu levo, desno ili nastave pravo. Situacija se može svrstati u
oblast koju je moguće tretirati sredstvima iz teorije igara zato što igrači odluke donose
nezavisno. Međutim, u datim okolnostima oni moraju sarađivati da ne bi došlo do
situacije koja ni jednom igraču ne odgovara (udes). Zato je ovo kooperativna igra u
kojoj igrači moraju da signaliziraju drugim igračima u vezi sa svojim odlukama, tako
da utiču u nekom stepenu i na njihove odluke.
Nekooperativne igre (non-cooporatve games) - U mnogim igrama su interesi igrača
u potpunosti suprotni. Šah su dobar primer za takvu situaciju. Igre tog tipa se u teoriji
igara nazivaju nekoperativne igre sa nultim sumiranjem (zero-sum non-cooperative
games) – što implicira da vrednovanje iste situacije kod igrača ima negativan
predznak, tako da na svakom nivou ukupna suma evaluacija teži nuli.
Igre sa kombinovanim motivima (mixed-motive game) – U koliko igrači imaju
elemente i kooperativnosti i nekooperativnosti istovremeno, igre se mogu svrstati u
ovu klasu. Primer za ovaj tip igre je odnos sindikata radnika i uprave nekog preduzeća.
U osnovi, ova dva igrača imaju suprotne interese ali pošto pripadaju istom preduzeću
oni moraju da budu do nekog nivoa kooperativni – da bi preduzeće kao celina
donosilo profit od koga imaju koristi i jedna i druga strana. U teoriji se za ovu klasu
igara kaže da istovremeno imaju i zajedničke i suprotne interese. Teorija igara ima
zadatak da pronađe optimalnu strategiju u konfliktnim slučajevima koji mogu da
nastanu u ovoj klasi igara, naravno pod pretpostavkom da oba igrača deluju racionalno
u obostranom interesu.
Pretpostavka o racionalnom delovanju igrača je veoma važna u teoriji igara. Osnovna
premisa je da u odlučivanju o svakom potezu igrač poštuje sopstveni interes i da racionalno
bira najbolje nastavke od onih koji su mu na raspolaganju. U realnom životu ovo naravno ne
može da bude uvek slučaj jer igrači često rukovođeni nekim iracionalnim razlogom biraju i
manje dobra rešenja koja ih dovode u neoptimalne konačne situacije. Međutim, zahvaljujući
prirodnim zakonima selekcije koji postoje u prirodi, kao i zakonima tržišta koji postoje u
ekonomiji, igrači koji ne donose najbolje i najracionalnije odluke budu nadjačani od drugih,
boljih igrača. Regulacija na ovom nivou igre je automatska i sledi zakone opstanka najboljih.
Prema tome, najbolja strategija za svakog igrača je zapravo i najracionanija od svih
potencijalnih koji mu stoje na raspolaganju. U slučaji da igrači ne koriste princip racionalizma
ne može se postaviti odgovarajući model koji bi se mogao tretirati metodama iz teorije igara.
6
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
2.2 Terminologija
Teorija igara predstavlja apstraktni model donošenja odluka. Osnovna pretpostavka je da u
modelu učestvuju dva ili više nezavisnih igrača koji donose nezavisne odluke. Pri tome se i
pojam prirode uzima uslovno kao “igrač”. Priroda podrazumeva zapravo racionalno
okruženje u kome se neka igra odvija i koja utiče na igru na probablistički način. U nekim
igrama kao što je šah ne postoji uopšte uticaj prirode.
Broj igrača koji može da bude veoma veliki mora da bude konačan, i svi igrači moraju da
budu poznati. Svaki igrač mora da ima na raspolaganju više od jednog poteza. Razlog sa ovu
pretpostavku veoma je jednostavan, jer bi u slučaju da svaki igrač ima samo jedan potez
njegova igra bila forsirana i on ni na koji način ne bi mogao da razvije strategiju ili da utiče na
krajnji ishod.
Pod pojmom rezultat igre se podrazumeva stanje koje je nastalo delovanjem strateških
odluka i poteza svih igrača koji učestvuju u igri u toku vremena. Pri tome se podrazumeva da
svaki igrač može da po principu racionalnosti bira nastavke odnosno poteze koji vode ka
stanju koje ima najpovoljniji rezultat za njega. Da bi se mogla matematički obrađivati i
predviđati najbolja strategija za igrače, potrebno je izvršiti vrednovanje konačnih pozicija i
stanja u matematičkom obliku. Zato se uvodi matematička funkcija isplativosti (pay-off)
odnosno evaluaciona funkcija koja omogućava vrednovanje i upoređivanje različitih
rezultujućih stanja u igri.
Strategija igre za svakog igrača se definiše kao konstantni plan delovanja kroz ceo tok
igre kao i mogućnost da se unapred predvide odgovori na svaku moguću eventualnost koja
može da nastane u toku igre. Ako igrač odabere strategiju bez informacijama o strategijama
koje mogu da izaberu drugi igrači, onda se njegova strategija zapravo svodi na pitanje pukog
izbora jedne od više ponuđenih šansi - dakle na igru verovatnoće. Ako se igra jednog igrača
bazira na znanju o mogućim strategijama drugih igrača, onda zakoni strategije preuzimaju
primat nad verovatnoćom, i sama igra ulazi u oblast koja može biti analizirana metodama
teorije igara.
Ako igrač zna u potpunosti sve moguće strategije drugih igrača i njihove funkcije
isplativosti onda se igra klasifikuje u igru sa kompletnim informacijama (complete
information game). Ako igrač poznaje samo pravila po kojima igraju drugi igrači i njihove
prioritete, ali ne i funkcije isplativosti po kojima oni vrednuju stanja u igri, onda se radi o igri
sa nekompletnim informacijama (incomplete information game).
2.3 Klasifikacija igara
Postoje tri kategorije igara:
Igre veštine (games of skill) - U ovu grupu spadaju igre koje igra jedan igrač koji ima
potpunu kontrolu nad svim mogućim ishodima. Igre iz ove grupe pripadaju zapravo
egzistencijalnim veštinama, ali se u principu ne tretiraju korišćenjem metoda iz teorije
igara zato što ne postoji uticaj drugih igrača.
7
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Igre šansi (games of chance) – U ovu grupu spadaju igre koje jedan igrač igra protiv
prirode. Definicija prirode kao drugog igrača omogućava nešto viši nivo tretiranja
ovih igara u odnosu na igru veštine. Osnovna karakteristika je da igrač ne može da
konroliše sve moguće ishode u igri, već da može da prilikom građenja strategije ima u
vidu samo verovatnoće nekih ishoda. U literaturi se ove igre nazivaju takođe i igrom
rizika. Unutar ove grupe moguće je podeliti tipove igara na još dve podgrupe:
o ako su poznate verovatnoće pojedinih mogućih ishoda u okviru prirodnih
zakona (involving risk games),
o ako su mogući ishodi i verovatnoće u potpunosti nepoznati.
U prvom slučaju moguće je izgraditi prilaz u biranju mogućih poteza na osnovu
opadajućeg predviđenog niza verovatnoća, dok je u drugom slučaju ukupni ishod i
njegove verovatnoće apsolutno nepoznat.
Igre strategije (games of strategy) – Uključuju dva ili više igrača, bez uključivanja
prirode, od kojih svaki ima delimičnu kontrolu nad mogućim ishodima. Pošto svaki
igrač poseduje autonomnost u odlučivanju, verovatnoće ishoda ili donošenja odluka
drugih igrača su potpuno nepoznate svakom igraču. Ova grupa igara se takođe deli na
dve podgrupe – igre sa dva ili više igrača. Unutar svake podgrupe postoji još tri
podgrupe igara u zavisnosti od toga u kakvom je odnosu funkcija isplativosti jednog
igrača u odnosu na ostale: Ako su interesi igrača u potpunosti koincidentni, ako su u
potpunosti suprotni ili ako su delimično koincidentni a delimično suprotni. Igre
strategije dva ili više igrača u kojima su interesi igrača koincidentni se nazivaju
kooperativne igre strategije. Igre u kojima su interesi igrača u potpunosti suprotni se
nazivaju igre strategije sa nultim sumiranjem (zero-sum games of strategy) zbog
težnje nuli ukupne sume funkcija isplativosti u svakom potezu. Osobina ovog tipa
igara proističe iz suprotnog predzanaka koji imaju funkcije isplativosti za ova dva
igrača. Igre koje nisu u potpunosti kooperativne ili suprotne se nazivaju igre strategije
sa kombinovanim motivima (mixed-motive games of strategy). Ovaj poslednji tip
najbolje modeluje igre u sociološkom okruženju, gde postoje više igrača sa delimično
istim a delimično suprotnim motivima, tako da je najveći broj modernih istraživanja
upravo koncentrisan na ovu grupu.
2.4 Kratak pregled istorije teorije igara
U nastavku je dat kraći pregled ključnih momenata u osnivanju i razvoju teorije igara:
Teorija igara je osnovana u 17. veku od strane matematičara koji su nastojali da reše
probleme u raznim kockarskim igrama koje su se igrale na francuskom dvoru.
Osnovne ideje proističu iz prepiske velikih matematičara Pascal-a i Fermat-a oko
1650 god. Ova rana istraživanja su takođe bila usmerena i na osnovne tipove igara za
dve osobe sa nultim sumiranjem, kao što je to slučaj sa šahom. Kasnije su ove ideje u
nekim oblicima proširene i generalizovane i na sociološke i ekonomske fenomene u
radovima Francis-a Edgeworth-a 1881 koji su otkriveni i usavršeni 1959 radovima
Martin-a Shubik-a.
Teorija igara u modernom smislu je ustanovljena 1913 god. u radu nemačkog
matematičara Ernist-a Zermelo-a pod nazivom “Uber eine Anwendung der
8
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Mengenlehre auf die Theorie des Schachspiels” gde je dokazao da se svakoj igri za
dve osobe, ukoliko obe strane imaju kompletnu informaciju o pravilima i funkciji
isplativosti, može izgraditi najbolja strategija igre. Ovo je zapravo dokaz minimaks
teoreme koja predstavlja teoretsku osnovu za razvoj modernih algoritama za tretiranje
logičkih igara. Zanimljivo je da je formulacija ove teoreme predviđena dva veka ranije
u radovima engleskog matematičara James-a Waldegrave-a koji je predložio tip
minimaks rešenja za popularnu igru kartama za dve osobe, ali nije predvideo njenu
moguću generalizaciju. Slične ideje su navođenje u prepiskama matematičara Pierre
de Montmort-a i Nicholas-a Bernoulli-ja. Ideje vezana za aplikacije minimaks teoreme
su dugo vremena bile skoro zaboravljene, da bi naglo oživele posle objavljivanja u
znamenitoj knjizi A History of the Mathematical Theory of Probability autora Isaaca Todhunter-a koji je u jednom poglavlju u svom delu uvrstio i rad Waldegrave-a. I
pored toga, minimaks teorema je ostala na marginama nauke sve do 20. veka.
Posle 1921 znameniti francuski akademik Emil Borel objavjuje niz radova iz oblasti
teorije igara, čija je teoretska osnova bazirana na radovima Zermelo-a. U jednom od
njegovih rasparava prvi put je sa uspehom formulisana igra sa kombinovanim
motivima. 1924 god. Borel pokušava da dokaže, ali bez uspeha minimaks teoremu.
Prvi uspešan dokaz minimaks teoreme za generalni slučaj objavio je matematičat John
von Neumann decembra 1926. Kompletan dokaz je objavljen 1928 u saradnji von
Neumann-a, Jean Ville-a i Herman Wezl-a.
1938 god. ekonomista Oskar Morgenstern zajedno sa von Neumann-om počinje rad na
primeni matematičkih principa i fundamentalne minimaks teoreme na rešavanje
ekonomskih pitanja. 1940 von Neumann vrši sintezu svojih radova iz oblasti teorije
igara, da bi sledeće godine, zajedno sa Morgensternom objavio čuvenu knjigu iz
teorije igara pod nazivom: Theory of Games and Economic Behavior. [Neumann,
1944]. Knjiga je veoma znamenita jer u njoj zapravo postoji jedna teorija napisana na
dva jezika: matematičkim simboličkim jezikom i opisno, jezikom ekonomije.
1957 god. dva naučnika Duncan Luce i Howard Raiffa objavljuju knjigu: Games and
Decisions čime ideje iz nove teorije postaju dostupne širem krugu čitalaca. U knjizi je
naročito analiziran pojam funkcije isplativosti.
1967 god. John Harsanzi konstruiše teoriju igara sa nekompletnim informacijama
čime je izvršen značajan proboj u jednu novu oblast teorije igara.
1951 god. John Nash generalizuje minimaks teoremu dokazujući da svaka igra
poseduje bar jednu ravnotežnu tačku bilo da se koristi igra sa čistom strategijom ili sa
kombinovanim motivima. Ove tačke zapravo predstavljaju svojevrsna optimalna
rešenja koja pružaju mogućnost za razvoj racionalne strategije u datim tipovima igara.
Ovo otkriće primenjeno na ekonomiju omogućilo je razradu optimalne ekonomske
teorije na principima teorije igara što je i donelo kasnije Nash-u Nobelovu nagradu za
ekonomiju. Radovima ovog naučnika teorija igara dobija značajnu akademsku osnovu.
1953 god. Harold Kuhn otklanja ograničenja koje postoji u Zermalo-ovom
originalnom dokazu i uopštava minimaks teoremu na igre sa n-igrača zamenjujući
9
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
koncept najbolje individualne strategije sa konceptom Nash-ovih strategija. U ovom
radu se uvodi pojam pod-igara.
U radovima Sharpley-Shubik-a (1954) kao i Banzhaf (1965) teorija igara počinje da se
značajno primenjuje u oblasati socioloških nauka najviše za modeliranje rezultata
izbora. U njihovim radovima javlja se koncepcija strateškog glasanja koja kasnije
postaje jedna od osnovnih koncepcija u političkoj nauci.
Na današnjem nivou teorija igara predstavlja zrelu i razvijenu generalnu teoriju sa jakim
matematičkim osnovama koja uspešno objašnjava i predviđa mnoge fenomene u raznim
oblastima primene. Teorija igara je primenjena u nizu udaljenih područja nauke: politici,
ekonomiji, evolutivnoj biologiji, teoriji evolucije prirodnih sistema, sociologiji, kompjuterskoj
nauci.
Na bazi minimaks teoreme čija je generalizovana verzija u osnovi teorije igara razvijene
su posebne aplikacije i algoritmi (ALFA-BETA kao verzija minimaks teoreme) za igre sa
nultim sumiranjem. Ovi algoritmi predstavljaju osnovu za izgradnju programa za igranje tog
tipa igara [Adelson-Velskiy, 1988], [Bell, 1972], [Marsland, 1984]. U ovu grupu igara spada i
kompjuterski šah, koji je osnovni predmet interesovanja u tezi [Simon, 1992], [Michie, 1981].
2.5 Osnovne definicije
U nastavku će biti navedene neke osnovne definicije iz teorije igara sa akcentom na njihovu
primenu u teoriji kompjuterskog šaha.
Definicija 1
-
Igra je formalni opis strateške situacije.
Definicija 2
-
Igrač je entitet koji učestvuje u igri i donosi samostalne odluke.
Definicija 3
-
Funkcija isplativosti (pay-off function) koja je sinonim za evaluacionu
funkciju predstavlja numerički opis značajnosti nekog ishoda za nekog
od igrača.
Definicija 4
-
Igra sa nultim sumiranjem (zero-sum game) podrazumeva tip igre gde
je suma svih ishoda za sve igrače nula. Kod igara gde su interesi igrača
suprotni, kao što je to slučaj u šahu, funkcije isplativosti imaju suprotan
predznak. Ako neka pozicija koja je rezultat igre ima vrednost +E za
belog, to istovremeno znači da ona ima vrednost -E za crnog.
Definicija 5
-
Igra sa potpunim informacijama (perfect information game) znači da u
svakom momentu samo jedan igrač može da povuče potez. Svaki igrač
poseduje sve inforamcije o svim mogućnostima koje može da odigra
drugi igrač računajući i informacije o funkciji isplativosti
Definicija 6
-
Ekstenzivna forma igre (extensive game form) je stablo koje
predstavlja tok odigravanja igre. Stablo se generiše na osnovu
naizmeničnog redosleda odigravanja poteza. U svakoj tački u stablu
svaki igrač poseduje perfektnu informaciju (prema definiciji 5).
10
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Definicija 7
-
Strategija je jedna od više mogućih akcija (poteza) nekog igrača. U
ekstenzivnoj formi igre, strategija je kompletan plan izbora mogućnosti
za svaku tačku (čvor) odlučivanja za svakog od igrača.
Definicija 8
-
Matrica isplativosti je analogija funkciji isplativosti. Vrednost
isplativosti za svakog igrača je predstavljena odgovarajućom matricom
umesto jedinstvenom numeričkom vrednošću.
Definicija 9
-
Racionalnost je osnovna pretpostavka u teoriji igara i podrazumeva da
svaki igrač igra sa ciljem da izvrši maksimizaciju svoje funkcije
isplativosti.
Definicija 10 -
Konačna igra je tip igre koja svakom igraču dozvoljava samo konačan
broj poteza i ograničenu mogućnost izbora u svakom potezu.
Definicija 11 -
Kombinaciona igra predstavlja igru za dva igrača sa potpunim
informacijama i strogo definisanim pravilima po kojima se generišu
potezi. Skup pozicija je definisan pravilima igre i konačan. Terminalna
pozicija se definiše kao ona pozicija u kojoj strana koja je na potezu
nema više legalnih poteza na raspolaganju.
Definicija 12 -
Nepristrasnom igrom (impartial game) se smatra ona igra za dva igrača
kod koje je skup poteza podudaran za bilo koju stranu koja je na potezu
u istoj poziciji. Ako je taj skup poteza različit igra se smatra tipom
partizan.
Definicija 13 -
Normalana definicija kraja igre podrazumeva da u terminalnoj poziciji
igrač koji je na potezu dobija. U suprotnom igra je tipa misere.
Definicija 14 -
Igra je konačna ako se završava u končanom broju poteza.
2.6 Definicija šaha kao igre
Definisaćemo šahovsku igru na osnovu terminologije koju smo ranije usvojili. Šah ćemo i
formalno definisati kao jednu instancu teorije igara čime se omogućava da se na njegovo
proučavanje primene zakoni i pravila teorije igra [Fray, 1977], [Marsland, 1990]. Na taj način
je formirana naučna osnova za realizaciju šahovskih algoritama koji kreiraju kompjuterski
šahovski program predstavljajući formalizaciju mašinskog razmišljanja (veštačke ineligencije)
u oblasti teorije igara.
Definicija 15 -
Šah je strateška igra u kojoj učestvuju dva igrača čiji se potezi smenjuju
naizmenično. Igrači se označavaju pojmovima beli i crni. Podrazumeva
se da igrači igraju racionalno.
Definicija 16 -
Šah je igra sa perfektnim informacijama i nultim sumiranjem (zero-sum
perfect information game).
11
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Definicija 17 -
Šah je kombinaciona igra tipa partizan. Broj mogućih legalnih poteza u
svakoj poziciji je konačan i može biti različit za svakog od igrača.
Definicija 18 -
Šah ima tri moguće vrednosti funkcije isplativosti: pobedu belog,
pobedu crnog i nerešen rezultat - remi.
Definicija 19 -
Šahovska parija se uvek završava u konačnom broju poteza bez obzira
na strategije igrača.
Definicija 20 –
Funkcija isplativosti u šahu se može definisati matricom isplativosti:
Tabela 2.1 Matrica isplativosti za šahovsku igru.
Pobeda
Beli Pobeda
Igrač Remi
-1,1
Poraz
Crni igrač
Remi
Poraz
1,-1
0,0
-
imajući u vidu ispunjene uslove, na šah se može primeniti osnovna minimaks teorema:
Za svaku konačnu igru sa potpuno definisanim informacijama, u kojoj učestvuju
dva igrača i koja ima nultu sumu može se definisati optimalna strategija igre.
Pod datim uslovima može se definisati sledeća jednakost:
maxXminYXTAY=minYmaxXXTAY=v
Gde je:
V - vrednost igre (evalucacija),
A - matrica isplativosti (tabela 2.1),
X,Y – matrica rešenja.
Logički gledano, ova teorema definiše postupak nalaženja najboljeg nastavka za igrača A
koji istovremeno predstavlja maksimalnu vrednost mogućih nastavaka koji su mu na
raspolaganju. Igrač B, koji igra protiv igrača A nastoji da maksimizuje svoju funkciju
isplativosti, odnosno da minimizuje funkciju isplativosti igrača A.
Prikazane definicije i minimaks teorema predstavljaju osnovu za razvoj algoritama za
tretiranje logičkih igara u oblasti veštačke inteligencije kao i za kreiranje kompjuterskih
programa koji igraju šah [Bruin, 1994].
12
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
2.7 Pojam kompleksnosti i kombinatorne eksplozije
U realnoj šahovskoj partiji uloge igrača A i B se menjaju naizmenično, tako da se u
prikazanoj formuli stalno smenjuju postupci minimizacije i maksimizacije. Primena formule
je zapravo rekurzivnog karaktera. Određivanje pravilne strategije za igrača koji je na potezu
se zasniva na ekstenziji u formi stabla (Definicija 6). U svakom čvoru u stablu se vrši
postupak maksimizacije ili minimizacije vrednosti. Ako pretpostavimo da svaki čvor ima 30
izlaza jasno je da je broj čvorova u eksponencijalnoj zavisnosti od dubine d, tako da je ukupan
broj čvorova u stablu reda 30d. Na taj način, gledano iz oblasti teorije igara, problem
kompleksonsti se javlja u vidu ektremnog povećavanja broja čvorova u stablu što je i sinonim
za pojam kombinatorne eksplozije koji je poznat u oblasti veštačke inteligencije. Kako dubina
minimaks stabla direktno utiče na šahovsku snagu programa, jasno je da problem
kompleksnosti mora biti rešen na zadovoljavajući način da bi se dobio racionalan metod za
kreiranje šahovskih programa.
2.8 Metode za prevazilašenje problema kompleksnosti
Jasno je da se problem kompleksnosi ne može prevazići metodom sirove snage, dakle
kalkulacijom svih mogućih čvorova prilikom rešavanja minimaks formule [Marsland, 1986],
[Kaindl, 1990], [Bhattacharya, 1986]. Imajući u vidu limitirane mogućnosti hardvera,
problemu prevazilaženja kompleksnosti se pristupa na dva načina: metodom heurističkog
sečenja stabla (forward pruning) [Birmingham, 1977]. ili metodom numeričkog sečenja
(backward pruning). Ove dve strategije je opisao Shannon u svom originalnom radu i nazvao
ih strategija tipa A i strategija tipa B.
2.9 Metoda heurističkog sečenja stabla odlučivanja (forward pruning)
Metoda heurističkog sečenja potiče od analogije sa načinom razmišljanja šahovskih majstora
Očigledno je da ljudi ne raspolažu velikom brzinom
[Björnsson, 2000], [Ballard, 1983].
računanja a mogu postići izuzetno visok nivo igre. Takođe, studiranjem načina razmišljanja
šahovskih majstora dolazi se do zaključka da je lista varijanti koje razmatraju šahisti krajnje
sužena i da se pojedine varijante proračunavaju do velikih dubina dok se druge linije
zanemaruju [Adelson-Velskiy, 1975], [Wilkins, 1982], [Kaindl, 1989]. Dakle, primena
heurističkog, ekspertskog znanja u fazi generisanja nastavaka iz svakog čvora je primarna.
Ako prepostavimo da imamo funkciju koja u svakom čvoru generiše samo 3 najbolja nastavka
koja se dalje razmatraju, jasno je da je broj čvorova u stablu 3n. Ako zatim pretpostavimo da
se u svakom čvoru razmatra 30 poteza, za stablo dubine 5 će biti potrebno 24.3 miliona
čvorova. Za 3 izlaza po čvoru na dubini 15 biće potebno samo 14.3 miliona čvorova. Može se
zaključiti da se sa 50% manje čvorova postiže se 3 puta veća dubina proračuna.
Osnovna pretpostavka kod ovog tipa sečenja stabla je postojanje stabilne heuristike koja
će razmatrati zaista važne poteze [Hünen, 1989], [Baum, 1992], [Allis, 1992]. Najveći problem,
koji nije nikada u potpunosti rešen je heuristika odbacivanje nastavaka za koje se smatra da su
irelevantni [Ke, 1993]. U praktičnoj igri često dolazi do odbacivanja važnih nastavaka i velikih
previda u proračunu [Chen, 2001]. Problem uspešne heuristike u ovom slučaju do danas nije
rešen na zadovoljavajući način [Muszycka, 1985], [Nau 1980], [Pearl, 1980].
13
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
2.10 Metoda numeričkog sečenja stabla odlučivanja (backward pruning)
Druga metoda polazi od pretpostavke da nije potrebno razrađivati posebne heuristike, već je
potrebno maksimalno ubrzati sve funkcije i razmatrati sve nastavke [Korf, 1985]. Ovaj tip
heuristike zapravo predstavlja metodu sirove snage gde algoritam prolazi kroz sve legalne
nastavke u minimaks stablu [Rivest, 1988]. Heuristika koja je u vezi sa samom šahovskom
igrom je implementirana u evaluacionoj funkciji koja se računa za svaki terminalni čvor.
Imajući u vidu da su minimaks vrednosti dostupne u raznim fazama igre, uvodi se nov pojam
sečenja stabla koji se naziva numeričko sečenje ili sečenje unazad (backward pruning). Ova
metoda obuhvata osnovni ALFA-BETA algoritam, čije će funkcionisanje biti detaljno
objašnjeno u narednim poglavljima u radu. Za razliku od heurističkog sečenja koje je teoretski
nesigurno, numeričko ALFA-BETA sečenje, koje se zasniva na propagaciji numeričkih
vrednosti evaluacije terminalnih čvorova unazad, je apsolutno sigurno [Müller, 2001]. U svim
mogućim varijantama stabla, ALFA-BETA algoritam daje iste najbolje poteze kao i osnovni
minimaks algoritam, tako da se u kompjuterskom šahu ova metoda primenjuje kao osnova
gotovo svih programa.
2.11 Ograničavanje ekspanzije stabla
Kao što smo istakli, problem kombinatorne eksplozije značajno ograničava mogućnost obrade
stabla do većih dubina. Sa druge strane, ograničenje dubine proračuna u svim varijantama je
osnovna tehnika za ograničenje ekspanzije stabla.
Uticaj dubine stabla na snagu igre je detaljno proučen u radovima Schaeffer-a, koji je
došao do zaključka da isti program koji računa do fiksne dubine D osvaja 80% pobeda u
odnosu na program koji računa do dubine D-1 [Schaeffer, 1996]. Po ovom zakonu snaga
šahovskog programa raste gotovo linearno sa dubinom, tempom od oko 200 ELO poena po
polupotezu. Prema Ken Thomson-ovom zakonu, da bi se pobedio svetski šampion u šahu,
potrebno je u svakom potezu obraditi stablo računanja do dubine od 14 polupoteza (Slika 2.1):
Slika 2.1 Ken Thompson-ov zakon.
14
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Ovaj zakon je jednostavno objasniti ako se ima u vidu da je Gari Kasparov imao snagu
oko 2800 ELO poena kada je bio na poziciji svetskog šampiona u šahu.
Prema tome, ograničavanje dubine kao osnovna metoda realizacije obrade stabla u
konačnim vremenskim uslovima i sprečavanja kombinatorne eksplozije je kontraproduktivna
u pogledu šahovske snage.
Primenom tehnike ograničavanja dubine dolazi do pojave još jednog negativnog efekta
koji je u literaturi nazvan horizontski efekat i koju je otkrio proučavao Berliner [Berliner,
1974]. Ako se direktno ograniči dubina stabla, na nivou terminalnih čvorova dolazi do velike
nestabilnosti u evaluaciji. Veštačko ograničenje dubine može da prekine seriju izmena figura
ili da generiše neki drugi vid dinamičke nestabilnosti. Zbog toga se umesto evaluacije
terminalnih čvorova u tim tačkama upotrebljavaju pozivi posebne procedure čiji je zadatak
svođenje dinamički aktivnih pozicija na njihove statičke ekvivalente. Upotreba dodatnih
procedura na nivou terminalnih pozicija dovodi do dinamičke promene dubine u funkciji
nestabilnosti čvora koji se evaluira. Na ovaj način postiže se najoptimalnija struktura stabla:
na osnovnom nivou Shannon tip A metod obrade, a na nivou terminalnih čvorova Shannon tip
B selektivna obrada stabla (quiescence search).
Sve navedene tehnike biće detaljno objašnjene i analizirane u nastavku rada.
15
3
_____________________________________
KOMPJUTERSKI ŠAH I
VEŠTAČKA INTELIGENCIJA
U ovom poglavlju analiziraće se osnovni pojmovi i veza kompjuterskog šaha, kao jedne od
osnovnih disciplina veštačke inteligencije, sa ostalim relevantnim oblastima. Istorijski tok
razvoja ove discipline biće detaljno prikazan. Takođe, osnovni sistemi i standardi koji su
koncipirani na ovom nivou razvoja će biti analizirani.
3.1
Pojam i definicija
Kompjuterski šah je oblast veštačke inteligencije koja ima zadatak izgradnje programa i
sistema koji automatski igraju šahovsku igru, poštujući šahovska pravila. Moderni šahovski
programi koji se izvršavaju na standardnim personalnim računarima su integral brojnih
teoretskih i implementacionih tehnika i može se slobodno reći da predstavljaju jednu od
značajnih prestižnih oblasti visoke tehnologije. Najširi spoj matematičke teorije, baza
podataka, jednoprocesorskih i višeprocesorskih sistema, programiranja, hardvera i softvera
predstavlja unikatnu pojavu o modernoj tehnologiji. Oblast istraživanje je široka sa mnogo
novih potencijalnih mogućnosti za proučavanje. Pristup kompjuterskom šahu imaju široki
slojevi potencijalnih vrhunskih eksperata u ovoj oblasti, od talentovanih programera koji
mogu da razvijaju programe na svojim kućnim računarima, pa do ozbiljnih naučnih timova na
fakultetima i institutima. Šahovski programi majstorske snage rade na procesorima mobilnih
telefona, PalmTop i LapTop računarima, specijalizovanim šahovskim mašinama, kućnim
računarima, standardnim PC računarima, višeprocesorskim PC serverima sve do nivoa
superkompjutera. Ulaskom najveće svetske kompjuterske kompanije IBM u oblast
kompjuterskog šaha i izgradnjom najjačeg kompjutera na svetu IBM Deep Blue koji je u meču
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
u maju 1997 god. pobedio svetskog šampiona Garija Kasparova, ova oblast dobija veoma
veliki značaj na globalnom nivou.
3.2
Istorijski razvoj računskih šahovskih mašina
U nastavku, biće izloženi najznačajniji momenti iz istorije kompjuterskog šaha. Razvoj ove
oblasti veštačke inteligencije bio je veoma intenzivan. Od prvobitnih mašina, koje su imale
snagu šahovskih početnika, razvijeni su kompjuteri koji su u stanju da u direktnom duelu
pobeđujuju najjače velemajstore i prvake sveta.
1769 – Prvi pokušaj konstruisanja automata izveo je nemački inženjer Baron
Wolfgang von Kempelen sa znamenitom mašinom «turčin» (Slika 3.1). U mašini je
zapravo bio sakriven neki šahovski majstor koji je razmišljao o potezima. Prevara je
otkrivena kada je jednom prilikom došlo do požara u prostoriji u kojoj se nalazio
«turčin». Šahista je u strahu iskočio iz svog zaklona u uređaju.
Slika 3.1 Prva šahovska mašina.
1945 – Engleski matematičar Alan Tjuring (1912-1954) koristi šah kao jedan od
medija na kome se može pokazati šta sve kompjuteri mogu da urade.
1946 – Alan Tjuring je u svojim radovima prvi put povezao mašinsku inteligenciju sa
problemom mašinskog igranja šaha.
1947 – Alan Tjuring je specificirao prvi šahovski program.
1948 – Izgrađen je kompjuter UNIVAC. On je bio najjači kompjuter tog doba. Neki
teoretičari su smatrali da ako se programira da igra šah, može pobediti svakog igrača
na svetu.
1948 – Alan Tjuring je izazvao matematičara Donalda Mičija na svojevrsni
matematički dvoboj, bi odredili ko može prvi da napiše šahovski program.
Mart 1949 – Američki naučnik Klod Šenon (1916-2001) opisao je program koji je
koristio Ferranti kompjuter i mogao da reši mat u dva poteza. On je opisao osnovne
17
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
strategije za umanjivanje broja mogućnosti u stablu odlučivanja. Svoju ideju o
mogućnosti izgradnje kompjutera za igranje šaha izložio je u Nacionalnom institutu za
Radio inženjere u Njujorku.
1950 – Alan Tjuring je napisao prvi šahovski program. Iste godine on je postulirao
Tjuringov test i predložio da šah bude jedan od osnovnih medija za testiranje veštačke
inteligencije. Konkretno, ako u toku šahovske partije čovek-šahista ne može da odredi
da li igra sa drugim čovekom-šahistom ili sa kompjuterom koji nije na istoj lokaciji
(potezi se prenose nekim uređajem, recimo telegrafom), u slučaju da partiju igra
kompjuter, on prolazi test veštačke inteligencije.
1950 – Claude Shannon je opisao principe izgradnje šahovskog programa u radu pod
nazivom "Programming a computer for playing chess", štampanom u časopisu
Philosophical Magazine, Series 7, Vol. 41 (No. 314, March 1950). Ovo je bio prvi rad
o kompjuterskom šahu.
Novembar 1951 – Dr. Dietrich Prinz je napisao originalni šahovski program za
kompjuter Ferranti. Njegov program je mogao da reši jednostavne matove u dva
poteza.
1952 – Alick Glennie, koji je poznat po pisanju prvog kompilatora, je pobedio
Tjuringov šahovski program TurboChamp. On je bio prva osoba koja je pobedila
kompjuterski program u šahu.Tjuring nikada nije završio svoj šahovski program.
1953 – Tjuringov primer šahovskog programa je uključen u 25. poglavlju knjige,
Faster then Thought B. Bowden-a, pod nazivom Digitalni kompjuteri primenjeni u
igrama.
1956 – Prvi eksperimenti sa kompjuterskim šahom na mašini Univac MANIAC i koji
je mogao da izvršava 11000 pozicija u sekundi u Los Alamos-u (Slika 3.2). Napisan je
program za igranje šaha na tabli 6x6, bez lovaca. Mašini je bilo potrebno 12 minuta da
pretraži stablo do 4 poteza dubine. Ako bi se dodali i lovci, pretraživanje do iste
dubine bi trajalo 3 časa. MANIAK i je imao radnu memoriju od 600 mašinskih reči,
operativnu memoriju 80k, 11Khz takt, i sastojao se od 2400 vakumskih cevi.
Programerski tim je predvodio Stan Ulam.
Slika 3.2 Računar MANIAC I.
18
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
1957 – Naučnik Alex Bernstein sa MIT-a je napisao šahovski program za IBM 704
koji je mogao da izvršava 42000 instrukcija u sekundi i imao memoriju od 70k.
Njegov program je uspeo da odigra prvu potpunu šahovsku partiju. Mašina je za
svaki potez razmišljala 8 minuta i vršila proračun do dubine 4.
1957 – Naučnik Herbert Simon iznosi predviđanje da će za 10 godina, digitalni
kompjuter postati svetski šampion u šahu.
1958 – Otkriven je ALFA-BETA algoritam kao rezultat istraživanja 3 naučnika sa
Carnegie-Mellon univerziteta (Allen Newell, John Shaw i Herbert Simon). Algoritam
radi na sledeći način. Program evaluira potez do određene dubine. Prilikom
evaluiranja sledećeg poteza, ako se pokaže da je nova linija slabija od predhodne,
može se prekinuti traženje u toj grani u stablu, bez uticaja na izbor najboljeg poteza.
1958 – Šahovski program NSS je po prvi put pobedio ljudskog protivnika. Oponent je
bio sekretar koji je pravila šaha naučio sat vremena pre partije. Kompjuterski program
je igrao na mašini IBM 704. Mašina je pokazala veće razumevanje šaha od protivnika,
koji nije imao praksu igranja.
1959 – Neki programeri kompjuterskih šahovskih programa su predvideli da će
kompjuter biti svetski šampion pre 1970.
1962 – Student završnih studija na MIT-u Alan Kotok je u okviru svoje diplomske
teze a pod rukovodstvom prof. John McCarthz-ja sa Stenford-a napisao prvi šahovski
program koji igra šah primenjujući sva pravila igre. Program je radio na kompjuteru
IBM 7090 i uspevao da generiše 1100 pozicija u sekundi.
1963 – Svetski šampion u šahu Mihajl Botvinik je predvideo da će ruski šahovski
program biti u stanju da pobedi svetskog šampiona u šahu.
1965 – Dizajniran je prvi šahovski program u Sovjetskom Savezu, na Institutu za
teoretsku i ekperimentalnu fiziku (ITEP) u Moskvi. Programerski tim je predvodio
Georgi Adelson-Velskiz.
22 novembar 1966 – Sovjetski program i program Kotok-McCarthz-ja otpočinju
dopisni šahovski meč koji je trajao 9 meseci. Meč se završio pobedom Sovjetskog
programa 3-1, bez remija.
1966 – Prvi šahovski program koji je učestvovao na nekom turniru sa ljudskim
igračima je MacHACK VI napisan na MIT na mašinskom jeziku za kompjuter DEC
PDP-6 (MiDAS) od strane Richard Greenblatt-a. Kompjuter je igrao na turniru
Massachussets Amateur Championship i osvojio pola poena (uz 4 poraza). Ovo je bio
prvi rangirani program sa USCF rejtingom od 1243.
Proleće 1967 – MacHACK VI postaje prvi program koji pobeđuje čoveka (sa USCF
1510 rejtingom) u direktnom duelu na turniru Massachussets State Championship. Na
kraju iste godine program igra 4 šahovska turnira. Pobeđuje 3 partije, gubi 12 uz 3
remija. 1967 godine program postaje i deo US šahovske federacije. MacHACK je bio
prvi program koji se distribuirao i koji je postao dostupan širim krugovima korisnika.
Takođe, ovo je bio i prvi program za koga je napisana knjiga otvaranja.
1968 – Internacionalni šahovski majstor David Levy je objavio čuvenu opkladu u
3000 dolara, da ga ni jedan šahovski program ne može pobediti za 10 godina. On je
dobio opkladu. Prvobitna opklada je zapravo bila sa John McCarthz-jem u toku
trajanja konferencije o mašinskoj inteligenciji na Stenford-u, ali je kasnije proširena.
1970 – Održano je prvo kompjutersko prvenstvo u Nju Jorku. Prvo mesto zauzeo je
program Chess 3.0 koji je radio na CDC 6400 kompjuteru. Program je napisan od
strane Slate, Atkin and Gorlen sa Northwestern Univerziteta. Šest programa je
učestvovalo u prvenstvu koji je ogranizovala asocijacija ACM Association for
19
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Computing Machinery i Montz Newborn. Ostali programi koji su učestvovali su
DALY CP, J Brit, COKO III, SCHACH, and the Marsland CP.
1971 – Institut za kontrolne nauke u Moskvi je dizajnirao program Kaissa, koji je
radio na kompjuteru engleske proizvodnje.
1971 – Ken Thompson piše svoj prvi šahovski program.
1971 – Program Chess 3.5 pobeđuje na drugom ACM kompjuterskom šampionatu u
Čikagu.
1972 – Program Chess 3.6 pobeđuje na trećem ACM kompjuterskom šampionatu u
Bostonu.
1973 – Program Chess 4.0 pobeđuje na četvrtom ACM kompjuterskom šampionatu u
Atlanti.
1974 – Svetski šampion u dopisnom šahu Hans Berliner piše svoju doktorsku tezu
"Chess Computers as Problem Solving.". Ovo je prva doktorska disertacija napisana
na temu kompjuterskog šaha.
1974 – Program Kaissa koji je radio na kompjuteru ICL 4/70 pobeđuje na prvom
svetskom šampionatu u kompjuterskom šahu, održanom u Stokholmu sa perfektnim 40 rezultatom. Program su napisali Donskoj i Arlazarov. Drugo mesto osvojio je
program Chess 4.0.
1975 – Velemajstor David Bronštajn koristi baze završnica programa Kaissa da dobije
prekinutu partiju na turniru u Viljnusu.
1975 – Program Chess 4.4 pobeđuje na šestom ACM kompjuterskom šampionatu u
Mineapolisu.
1976 – Program Chess 4.5 pobeđuje u grupi B turnira Paul Masson u Severnoj
Kaliforniji. Postignut rejting je 1950.
1976 – Kompjuterski program je prvi put korišćen za parovanje na šahovskoj
olimpijadi u Haif-i.
1976 – Program Chess 4.5 pobeđuje na sedmom ACM kompjuterskom šampionatu u
Hjustonu.
1976 – Svi legalni potezi prilikom rokade se prvi put programiraju.
1977 – Dizajnirana je prva mikrokompjuterska šahovska mašina CHESS
CHALLENGER. Formirana je organizacija International Computer Chess Association
(ICCA). Osnovali su je šahovski programeri, broji više od 400 članova.
1977 – Chess 4.5 pobeđuje na turniru Minesota Open sa 5 pobeda i samo jednim
porazom. Rejting mašine iznosi 2271. Stenberg je prvi igrač iz klase A koji gubi od
kompjutera.
1977 – Program SNEAKY PETE je prvi kompjuter koji je učestvovao na U.S. OPEN
turnuru u Kolumbiji, Ohajo.
1977 - Michael Stean postaje prvi velemajstor koji je izgubio od kompjutera, u
brzopoteznoj partiji.
1977 – Konstruisan je prvi paralelni šahovski sistem BELLE koji je koristio specijalno
dizajniran hardver (Slika 3.3). Brzina mašine iznosila je 160000 pozicija u sekundi.
Korišćeno je preko 1700 integralnih kola. Ovaj kompjuter izradio je Ken Thompson.
Kasnije je mašina korišćena za izgradnju baze završnica. Cena mašine je bila 20000
dolara.
20
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Slika 3.3 Višeprocesorski šahovski sistem BELLE.
1977 – Program Chess 4.6 pobeđuje na osmom ACM kompjuterskom šampionatu u
Sijetlu.
1977 – Program Chess 4.6 pobeđuje na drugom svetskom kompjuterskom šampionatu
u Torontu.
1977 – Zvanično je osnovana Međunarodna organizacija kompjuterskog šaha
(International Computer Chess Association).
1977 – IM David Levy je igrao protiv prvog kompjutera (Kaissa) u okviru opklade.
Pobedio je.
1978 – BELLE pobeđuje na devetom ACM kompjuterskom šampionatu u Vašingtonu,
DC.
1968 – Devid Levy pobeđuje program MacHack u dve partije.
1979 – Program Chess 4.9 pobeđuje na desetom ACM kompjuterskom šampionatu u
Detroitu.
1980 – Mikrokompjuter CHAMPION SENSORY CHALLENGER pobeđuje na prvom
svetskom šampionatu za mikrokompjutere, održanom u London-u.
1980 – Edward Fredkin osniva nagradni fond (Fredkin Prize) za kompjuterski šah.
Nagrada od 100000 dolara ide prvom programu koji pobedi svetskog šampiona u
šahu.
1980 – Program BELLE pobeđuje na jedanaestom ACM kompjuterskom šampionatu u
Nešvilu.
1980 – Program BELLE pobeđuje na trećem svetskom šampionatu u kompjuterskom
šahu održanom u Linz-u.
1981 – CRAY BLITZ pobeđuje na državnom šampionatu Misisipija sa savršenim 5-0
rezultatom, sa rejtingom 2258. U četvrtoj rundi pobeđuje Joe Sentef-a (2262) i postaje
prvi kompjuter koji je u regularnim uslovima pobedio šahovskog majstora i dostigao
majstorski rejting.
1981 - Program BELLE pobeđuje na dvanaestom ACM kompjuterskom šampionatu u
Los Anđelesu.
21
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
1982 – BELLE je dobio zabranu učestvovanja u Sovjetskom Savezu na šahovskom
turniru. State Department je koristio zakon o zabrani transfera vrhunske tehnologije u
druge zemlje. Prvi put se dešava da politika interveniše u oblasti kompjuterskog šaha.
Iste godine BELLE je igrao na U.S. openu u brzopoteznom šahu, i zauzeo je drugo
mesto.
1982 – Kompanije koje proizvode šahovske mašine beleže prodaju od preko 100
miliona dolara.
1982 – Program BELLE pobeđuje na trinaestom ACM kompjuterskom šampionatu u
Dalasu.
1983 – Prvi pobeda šahovskog mikrokompjutera nad šahovskim majstorom u
turnirskim uslovima. BELLE je postao prvi kompjuter koji je postigao majstorski
rejting u oktobru 1983, kada je njegov rejting iznosio 2203.
1983 – CRAY BLITZ pobeđuje na četvrtom svetskom kompjuterskom šampionatu u
Njujorku.
1984 – Prvi put mikrokompjuter pobeđuje u partiji protiv velikih kompjutera na
turniru u Kanadi.
1984 – CRAY BLITZ pobeđuje na četrnaestom ACM kompjuterskom šampionatu u
San Francisku.
1985 - Program HITECH dostiže rejting od 2530. To je prvi program koji je dostigao
rejting preko 2400.
1985 – Gari Kasparov igra protiv 15 najjačih šahovskih kompjutera u Hamburgu u
Nemačkoj, i dobija svaku partiju, sa rezultatom 32-0.
1985 – Program HITECH pobeđuje na 15. ACM kompjuterskom šampionatu u
Denveru.
1986 – Program BELLE pobeđuje na 16. ACM kompjuterskom šampionatu u Dalasu.
1986 – Program CRAY BLITZ pobeđuje na 5. svetskom kompjuterskom šampionatu u
Cologne-u.
1987 – U.S. Amaterski šampionat postaje prvi nacionalni šampionat organizovan
kompjuterski.
1987 – CHIPTEST-M pobeđuje na 17. ACM kompjuterskom šampionatu u Dalasu
(Slika 3.4).
1988 – DEEP THOUGHT i velemajstor Tony Miles dele prvo mesto na U.S. Open
šampionatu. DEEP THOUGHT dostiže rejting 2745.
Slika 3.4 CHIPTEST - Osnovni hardverski elemenat DEEP THOUGHT mašine.
22
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
1988 – HITECH osvaja državni šahovski turnir u Pensilvaniji posle pobede nad
internacionalnim majstorom Ed Formanek-om (2485). HITECH takođe pobeđuje
velemajstora Arnolda Denker-a u meču. HITECH postaje prvi šahovski program koji
dostiže velemajstorku snagu.
1988 – Velemajstor Bent Larsen postaje prvi velemajstor koji gubi od kompjutera na
nekom važnom turniru – American Open.
1988 – DEEP THOUGHT pobeđuje na 18. ACM kompjuterskom šampionatu u
Orlandu.
Novembar 1988 – Zvanični rejting DEEP THOUGHT iznosi 2550.
1989 – DEEP THOUGHT pobeđuje na 6. Svetskom kompjuterskom šampionatu u
Edmontonu sa 5-0 rezultatom. DEEP THOUGHT dobija velemajstora Roberta Birna u
partiji u meču. Mašina dostiže 2 miliona pozicija u sekundi. U martu 1989 Gari
Kasparov dobija DEEP THOUGHT u meču pobedom u 2 partije. DEEP THOUGHT
dobija internacionalnog majstora Dejvida Levija sa 4-0. Programski tim DEEP
THOUGHT-a izjavljuje da će kompjuter biti svetski šampion u narednih 3 godine.
1989 – Prva kompjuterska šahovska olimpijada se održava u London-u.
1989 – IBM počinje da radi na mašini Big Blue. Kasnije projekat prerasta u DEEP
BLUE.
1989 – Program HITECH pobeđuje na 19. ACM kompjuterskom šampionatu u Renu.
1990 – Svetski šampion Anatolij Karpov gubi od šahovskog mikrokompjutera
MEPHISTO u simultanci u Minhenu. Mašina takođe pobeđuje velemajstore Roberta
Hibnera i Davida Bronštajna i osvaja Nemačko prvenstvo u ubrzanom šahu stekavši
normu za zvanje internacionalni majstor sa skorom 7-4 na turniru u Dortmund-u.
1992 – Kasparov igra sa programom Fritz 2 na 5 minura u Cologne u Nemačkoj.
Kasparov dobija meč sa 6 pobeda, 1 remijem i 4 poraza. Ovo je prvi put da je program
pobedio svetskog šampiona u kompjuterskom šahu.
Mart 1993 – Velemajstor Judit Polgar gubi od kompjutera DEEP THOUGHT u 30
min partiji.
1994 – WCHESS postaje prvi kompjuter koji je nadmašio velemajstore na Harvard
kupu u Bostonu.
1994 – Kasparov gubi od programa Fritz 3 u Minhenu na blic turniru. Program je
takođe pobedio velemajstore Ananda, Šorta, Geljfanda i Kramnika. Velemajstor
Robert Hibner je odbio da igra. Mec je izgubio sudijskom odlukom, što se prvi put
desilo. Kasnije, Kasparov je odigrao i drugi meč protiv Fritz-a koji je dobio sa 4
pobede i 2 remija, bez poraza.
1994 – Na turniru Intel Speed Chess Grand Prize u Londonu Kasparov gubi od
programa Chess Genius 2.95 u partiji na 25 min. Ovaj poraz eliminiše Kasparova od
daljeg učešća na turniru.
Oktobar 1995 – 13. Svetski šampionat u šahu za mikroračunare je održan u
Paderborn-u u Nemačkoj. Pobedio je program Mchess Pro 5.0 (Martz Hirsch) posle
play-off meča sa programom Chess Genius (Richard Lang).
Maj 1995 – Osmi svetski kompjuterski šampionat održan je u Hong Kong-u. Pobedio
je Fritz u play-off partiji protiv programa StarSocrates.
Novembar 1995 – Kasparov je pobedio program Fritz 4 sa jednim porazom i jednim
remijem. Takođe, protiv programa Chess Genius 3.0 u Cologne-u, dobija meč sa
identičnim rezultatom.
Decembar 1995 – Održava se 6th Harvard Cup Human Versus Computer gde igra
ekipa velemajstora protiv kompjutera. Ekipa velemajstora dobija meč sa rezultatom
23
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
23.5 prema kompjuterskih 12.5 poena. Kompjuteri su osvojili 35% ukupnih poena, što
je mala degradacija performansi od 1994. Joel Benjamin i Michael Rohde su imali
najbolji skor, 4.5 poena iz 6 partija. Najbolji kompjuter je bio Virtual Chess sa 3.5
poena iz 6 partija.
Februar 1996 – Gari Kasparov pobeđuje IBM-ov kompjuter DEEP BLUE sa
rezultatom 4-2 u Filadelfiji. DEEP BLUE je dobio prvu partiju, čime je postao prvi
kompjuter koji je pobedio svetskog šampiona u normalnim turnirskim okolnostima.
Mašina je obrađivala 50 milijardi pozicija na svakih 3 min, prema Kasparovu koji je
mogao da obrađuje svega desetak pozicija za isto vreme. DEEP BLUE se sastojao od
200 procesora.
April 10-17 1996 – Održan je 11. AEGON turnir (Mankind vs Machine) u Hagu u
Holandiji. Učestvovalo je 50 šahovskih majstora, internacionalnih majstora i
velemajstora kao i 50 šahovskih kompjutera. Najbolji rezultat postigao je velemajstor
Yasser Seirawan sa 6 pobeda iz 6 partija. Najbolji kompjuter je bio QUEST (verzija
Fritz-a) sa 4.5 poena iz 6 partija i rejtingom 2652. Kompjuteri su pobedili u ovom
velikom meču osvojivši 162.5 poena prema 137.5 poena koliko su osvojili šahovski
majstori.
Oktobar 1996 – Održan je 14. Svetski šampionat u šahu za mikroračunare. Pobedio je
SHREDDER koji je u play-off meču pobedio program FERRET.
Maj 1997 – Održan je istorijski meč u kome je IBM Deep Blue pobedio Gari
Kasparov-a u meču od 6 partija u New York-u (Slika 3.5). Ovo je prvi put u istoriji da
je kompjuter pobedio šahovskog šampiona u klasičnom šahu u regularnim uslovima.
DEEP BLUE je koristion 30 IBM RS-6000 SP procesora povezanih sa 480 šahovskih
čipova. Mogao je da evaluira 200 miliona pozicija u sekundi.
Slika 3.5 Šahovski meč Gari Kasparov - DEEP BLUE.
Novembar 1997 – Održano je 15. svetsko prvenstvo u kompjuterskom šahu za
mikroprocesore u Parizu. Pobedio je program Junior.
1997 – Ken Thompson i Joe Condon dobijaju nagradu Allen Newell Medal for
Research Excellence za pionirski rad na programu Belle.
1997 – Fredkinovu nagradu od 100000 dolara osvajaju konstruktori DEEP BLUE
mašine, Feng Hsu, Murraz Campbell, and Joseph Hoane.
24
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Jun 1999 – 9. Svetski kompjuterski šampionat i 16. Svetski šampionat za
mikrokompjutere održavaju se u Paderbornu u Nemačkoj. Oba šampionata osvaja
SHREDDER.
1999 – Najjači šahovski kompjuteri prema SSDF rang listi su: Hiarcs 7.0, koga slede
Fritz 5.32, Fritz 5.0, Junior 5.0, Nimzo 98, Hiarcs 6.0, Rebel 9.0, MChess Pro 7.1,
Rebel 8.0, i MChess Pro 6.0
Avgust 2000 – Program DEEP JUNIOR učestvuje na Super Turniru u Dortmund-u.
Osvaja 50% poena sa ELO performansama preko 2703.
2000 - 17. Svetski šampionat za mikrokompjutere održava se u Londonu. Šampion je
SHREDDER.
Avgust 2001 - 18. Svetski šampionat za mikrokompjutere održava se u Londonu.
Šampion je DEEP JUNIOR.
Maj 2002 – Meč između velemajstora Mihajla Gureviča i programa Junior 7 održan je
u Grčkoj. Junior je pobedio sa 3 pobede i jednim remijem.
Juli 2002 - 10. Svetski šampionat u kompjuterskom šahu održava se u Maastricht-u.
Šampion je DEEP JUNIOR posle pobede u play-off meču protiv SHREDDER-a.
Oktobar 2002 – Kramnik igra 4-4 u meču protiv DEEP FRITZ-a u Bahreinu, sa po
dve pobede za oba protivnika.
2003 – Kasparov igra meč protiv Deep Junior-a 7 u New York-u. Meč je završen
remijem, sa po jednom pobedom za svakog protivnika. Ovo je prvi put da je šahovski
meč održan pod patronatstvom FIDE. Na programu Deep Junior njegovi autori Amir
Ban i Shay Bushinsky su radili 10 godina. Program računa 3 miliona pozicija u
sekundi do dubina 15 poteza.
2003 – Kasparov igra protiv X3d Fritz-a u New Yorku. Meč je završen nerešeno 2-2.
Fritz je dobio 2. partiju a Kasparov treću. Prvi put je igrano na virtuelnoj, 3D
šahovskoj tabli.
Novembar 2003 - 11. Svetski šampionat u kompjuterskom šahu održava se u Graz-u.
Šampion je SHREDDER posle play-off meča sa DEEP FRITZ-om.
2003 – Prema SSDF rang listi, nabolji šahovski programi su: Shredder 7.04 (2810),
Shredder 7.0 (2770), Fritz 8.0 (2762), Deep Fritz 7.0 (2761), Fritz 7.0 (2742),
Shredder 6.0 (2724), i Chess Tiger 15.0 (2720).
2004 - 12. Svetski šampionat u kompjuterskom šahu održava se na univerzitetu Barllan u Ramat-Gan u Izraelu. Šampion je DEEP JUNIOR, drugo mesto zauzeo je
SHREDDER, treće DIEP. SHREDDER je zauzeo prvo mesto na šampionatu u
ubrzanom šahu, Crafty je bio drugi.
2005 – 13. Svetski šampionat u kompjuterskom šahu održao se na Islandu. Pobedio je
američki program Zappa.
21-27 juni 2005 – Održan je meč između najboljeg engleskog velemajstora Adamsa
(2723) i paralelnog šahovskog kompjutera Hydra u 6 partija (Slika 3.6). Meč je
završen pobedom kompjutera 5.5 prema 0.5, što je najveća pobeda neke mašine nad
vodećim svetskim velemajstorom.
24 maj – 2 jun 2006 – Održan je 14. Svetski šampionat u kompjuterskom šahu u
Torinu, Italija. Pobedio je program Junior 10 ispred Shredder-a 10 i Rybke.
25
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Slika 3.6 Završni momenti u meču meča Adams-Hydra.
3.3 Analiza postojećeg stanja u kompjuteskom šahu
Sa porastom snage hardvera i novih tehnologija u računarskoj tehnici, nastao je proces širenja
teoretskih i pratičnih znanja koja su potrebna za izgradnju jakih šahovskih mašina. Pravci
razvoja, koji su delimično predstavljeni u predhodnom istorijskom pregledu, su direktno
sledili razvoj hardvera. Najvažniji impulsi za oblast kompjuterskog šaha su prodori u
mikroelektronskoj tehnologiji. Pojava sve bržih procesora je direktno uticala na porast
šahovske snage programa. Sa druge strane, na teoretskom nivou su se usavršavali sve bolji
algoritmi za pretragu stabla, pored osnovne ALFA-BETA tehnike pronađena je klasa PVS i
null-move algoritama. Sa treće strane, usavršavanje memorija i periferijskih uređaja je
omogućilo razvoj baza podataka tipa Ken Thomson i Nalimov kojima se može pristupati u
realnom vremenu, čime se ekstremno pojačala igra kompjutera u mnogim tipovima završnica.
Na današnjem nivou, možemo biti veoma zadovoljni globalnim stanjem u kompjuterskom
šahu. Od više stotina šahovskih programa koji su razvijeni, par desetina ima velemajstorski
rejting. Odigrani su mnogi mečevi sa vrhunskim svetskim šahistima. Svetska šahovska
federacija FIDE je u novi pravilnik predvidela mogućnost nadmetanja sa šahovskim
mašinama, tako da se veliki mečevi, sa igračima koji pripadaju vrhunskoj klasi od prvih 20tak na svetu, organizuju pod pokroviteljstvom FIDE. Postoje nekoliko kompanija koje se bave
kompjuterskim šahom na tržišnoj osnovi. Najznačajnije kompanije koje se bave razvojem
šahovskog softvera su: ChessBase, LokaSoft i Arena. Nekoliko vrhunskih profesionalnih
programa, koji su usavršeni do nivoa jakog velemajstora, mogu se instalirati na bilo kom
standardnom PC računaru. Operativan je šahovski superkompjuter Hydra, naslednik IBM
Deep Blue mašine. Svake godine se održava svetsko šahovsko prvenstvo u kompjuterskom
šahu, sa mogućnošću pristupa amaterima i profesionalcima iz čitavog sveta. Brojne su
konferencije i radovi na temu kompjuterskog šaha.
26
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
3.3.1 Samostalne šahovske mašine
Princip samostalnih šahovskih mašina podrazumeva integraciju hardvera i softvera u vidu
kompaktnog uređaja. Potezi se u procesor prenose preko senzorske šahovske table na gornjem
delu uređaja. Nekada su uređaji ovog tipa bili veoma popularni zbog svoje mobilnosti, ali
danas, pojavom prenosnih PC računara oni gube na svom značaju.
3.3.2 PC orijentisani integrisani šahovski programi
Pojavom PC računara, čija se brzina eksplozivno razvijala, snaga programa baziranih na ovim
mašinama je rapidno rasla. U početku su programeri razvijali integrisane sisteme koji sadrže
istovremeno i šahovsko grafičko okruženje i šahovski program (chess engine) u istoj izvršnoj
datoteci. Tom tipu pripadaju i rani projekti autora, programi Geniss Axon I Axon.
Slika 3.7 Integrisani šahovski sistem – grafičko okruženje i program.
Prednosti integracije su brojni, jer postoji direktna memorijska sprega između dva
sistema, tako da problemi sinhronizacije ne postoje. Podešavanje opcija šahovskoh programa
direktno iz programskog okruženja je neposredno.
Osnovni nedostatak ovog pristupa je potreba da se simultano razvija i grefičko okruženje i
program. Sa druge strane, odigravanje automatskih partija protiv drugih programa, koje su
najbitnije u pogledu objektivnog sagledavanja jačine programa, je veoma teško realizovati.
Principi povezivanja dva računara preko komunikacionog kabla u ovu svrhu su skoro
napušteni.
Bez obzira što je ovaj pristup bio veoma popularan u početku čak i kod vrhunskih
profesionalnih kompanija, on je napušten, tako da su sada dominanti sistemi kod kojih je
razdvojeno grafičko okruženje od samog šahovskog programa.
27
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
3.3.3 Koncept razdvajanja interfejsa i šahovskog programa
Koncept razdvajanja grafičkog okruženja (GUI) od samog šahovskog programa pojavio se u
skladu sa potrebom da se poveća efikasnost celokupnog sistema, pre svega rada programera.
Podelom šahovskog programa na dve celine postižu se mnoge prednosti:
Omogućeno je šahovskom programeru potpuno fokusiranje na rešavanje
problema vezanih za šahovski algoritam.
Nezavisni tim programera može da radi na razvoju grafičkog okruženja.
Moderna grafička okruženja predstavljaju univerzalne platforme na koje je
moguće priključiti jedan ili više eksternih šahovskih programa.
Grafička okruženja najčešće obezbeđuju svoju bazu otvaranja, tako da fazu
otvaranja mogu odigrati automatski, bez intervencije šahovskog programa.
Ostale usluge: dimenzionisanje hash memorije za svaki program, povezivanje
sa Nalimov bazom završnica, učitavanje i snimanje partija… GUI automatski
podržava.
Grafička okruženja poseduju mogućnost za automatsko organizovanje turnira i
mečeva između definisanih programa. Ova osobina veoma je važna za
testiranje programa.
Grafička okruženja poseduju mogućnost za konekciju preko Interneta i igranje
na nekom od svetskih šahovskih servera.
Razvajanje grafičkog okruženja od samog šahovskog programa otvara izvesne probleme
koji su u vezi sa konkurentnim izvršavanjem, komunikacijom i sinhronizacijom procesa. Ovi
problemi se rešavaju uvođenjem standardnih protokola za komunikaciju.
3.3.4 Standardni interfejsi za šahovske programe
Danas postoje nekoliko kvalitetnih standardnih grafičkoh okruženja za šahovske programe na
PC računarima. Najviše korišćena okruženja su profesionalnog karaktera: ChessBase i
ShredderClassic. Takođe, značajno je zastupljena Arena GUI (Slika 3.7).
Funkcije GUI su u principu veoma slične, i objašnjene su u predhodnom delu rada.
Veoma značajno je istaći, da je opcija automatskog održavanja mečeva, koja predstavlja jednu
od najznačajnijih opcija svakog grafičkog okruženja, integrisana sa automatskim proračunom
ELO rejtinga. Na taj način, mogu se automatski pratiti promene u ELO rejtingu programa koji
je u razvoju. Najjednostavnija tehnika koju većina programera koristi je da se svaka promena
u programa odmah evaluira u meču od više desetina partija protiv nekog standardnog
protivnika. Ako je došlo do porasta rejtinga u odnosu na prošlu verziju programa, usvaja se
novina, u suprotnom ona se odbacuje.
28
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Slika 3.8 Najzastupljenija GUI okruženja za PC – ChessBase, ShredderClassic i Arena.
3.3.5 Standardi za memorisanje pozicija i partija
Pamćenje pozicija i partija predstavlja jednu od osnovnih osobina svakog grafičkog
okruženja. U oblasti kompjuterskog šaha razvijeni su standardi koji se koriste univerzalno,
kako za analizu i snimanje partija na disk, tako i za slanje preko elektronske pošte i e-mail-a.
3.3.5.1 Standard za predstavljanje pozicije – FEN
FEN standard omogućava pamćenja šahovske pozicije i pratećih informacija u jedinstvenom
ASCII nizu. Generisanje alfanumeričkog niza u funkciji trenutne pozicije veoma je
jednostavno. FEN standard poseduje sledeće elemente:
Broj N – označava broj praznih polja,
p,n,b,r,q,k – označava crne figure: pešaka,skakača,lovca,topa,damu i kralja
respektivno.
P,N,B,R,Q,K – označava bele figure: pešaka,skakača,lovca,topa,damu i kralja
respektivno.
Karakter “/“ označava novi red.
Za poziciju na slici 3.8, pozicioni FEN string bi imao sledeći oblik:
4rrk1/ 4Qppp/ p2P1n2/ 1p6/ 3p4/ PB6/ 1PP3Pq/ 1K1RR3
Potpun pozicioni string, sa informacijama o poziciji, najboljem potezu, statusu rokade i
komentarom bi imao sledeći oblik:
4rrk1/4Qppp/p2P1n2/1p6/3p4/PB6/1PP3Pq/1K1RR3 w - - 0 1 bm Bxf7+; id "YAZ.19";
c0 "Velimirovic-Csom";
29
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Slika 3.9 Dijagram koji predstavlja FEN poziciju: 4rrk1/ 4Qppp/ p2P1n2/ 1p6/ 3p4/ PB6/
1PP3Pq/ 1K1RR3
Generisanje pozicije na osnovu FEN niza veoma je jednostavno. Algoritam regenerisanja je
linearan i jednostavno interpretira FEN niz počevši od polja A8 prema polju H1.
FEN nizovi su danas postali standard za predstavljanje i razmenu šahovskih pozicija.
3.3.5.2 Standard za predstavljanje partije – PGN
Drugi značajan standard koji se odnosi na predstavljanje i pamćenje partija je PGN. Slično
kao kod FEN nizova, ideja je da se celokupna partija i pomoćne informacije zapamte u ASCII
datoteci, čime bi njihovo slanje i obrada postali maksimalno jednostavni. Za pamćenje
pojedinih poteza koristi se skraćena poziciona notacija. Primer kodiranja jedne partije sa
objašnjenjem pojedinih elemenata dat je u nastavku:
[Event "Arena tournament"]
// Ime dogadjaja
[Site "ATHLON2200"]
// Hardver
[Date "2006.01.12"]
// Datum igranja partija
[Round "3"]
// Turnirsko kolo
[White "Axon"]
// Identifikacija belog igrača
[Black "Movei00_8_295"]
// Identifikacija crnog igrača
[Result "1-0"]
// Rezultat
[ECO "C44"]
// ECO kod otvaranja
[Opening "Scotch"]
// Naziv otvaranja
[Time "22:27:56"]
// Vreme odigravanja
[Variation "Goering Gambit"]
// Varijacija otvaranja
[TimeControl "40/300:40/300:40/300"] // Vremenska kontrola
[Termination "normal"]
// Modalitet prekida partija
[PlzCount "82"]
// Broj odigranih poteza
[WhiteType "program"]
// Tip igrača (beli)
[BlackType "program"]
// Tip igrača (crni)
30
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
// U nastavku sledi kodirana partija ...
1.e4 Nc6 2.Nf3 e5 3.d4 exd4 4.c3 d5 5.exd5 Qxd5 6.cxd4 Bb4+ 7.Nc3
Nf6 8.Be2 Ne4 9.Bd2 Bxc3 10.bxc3 O-O 11.O-O Nxd2 12.Nxd2 Bf5 13.Qb3
Qa5 14.Nc4 Qa6 15.Ne3 Qxe2 16.Nxf5 Qa6 17.Rae1 Rae8 18.h3 Nd8
19.Ne7+ Kh8 20.d5 Qf6 21.Nc8 a6 22.Qb4 b5 23.a4 Nb7 24.Na7
Rea8 25.axb5 a5 26.Qc4 Rxa7 27.Qxc7 Qd8 28.Re7 Qxc7 29.Rxc7
Rb8 30.d6 Raa8 31.d7 Nd8 32.b6 Ne6 33.Ra7 Rbd8 34.Rxa8
Rxa8 35.Ra1 Nd8 36.Ra4 Nb7 37.Rc4 Rd8 38.Rc7 Nd6 39.c4 g6
40.c5 Kg7 41.cxd6
1-0
Svaki potez se kodira u skraćenoj notaciji koja je veoma slična standardnoj šahovskoj
notaciji. PGN format kodiranja partije je danas najpopularniji i široko prihvaćen kako u
oblasti kompjuterskog tako i u oblasti klasičnog šaha.
3.3.6 Standardi za povezivanje intefejsa i programa
Primenom strategije razdvajanja grafičkog okruženja od samog programa za igranje šaha, o
čemu je već bilo reči, pojavili su se problemi komunikacije i sinhronizacije dva procesa koji
se izvršavaju konkuretno. Rešenje je pronađeno korišćenjem memorijskih PIPE struktura koje
su podržane od strane operativnog sistema. Između GUI i šahovskog programa se otvaraju
dva kanala kroz koje ova dva sistema komuniciraju. Inicijalizacija komunikacionog kanala se
obavlja sledećom procedurom na Delphi 7 programskom jeziku:
procedure start_uci_connection;
// Kreiranje konekcije
begin
gHandleout:=getstdhandle(std_output_handle);
createthread(nil,0,@read_uci,nil,0,Threadid);
end;
Slanje podataka od strane šahovskog programa ka GUI se obavlja u vidu slanja ASCII niza u
proceduri koja je ekvivalentna standardnom konzolnom izlazu:
procedure uci(msg:string); // Slanje poteza podataka
var len:cardinal;
x:pChar;
begin
len:=length(msg);
x:=pchar(msg+#10);
_lwrite(gHandleout,x,len+1);
end;
Kroz pomenuta dva kanala, programi komuniciraju ASCII porukama. Razvojem
komercijalnih GUI-a, razvijeno je nekoliko standarda za komunikaciju. ChessBase poseduje
svoj zatvoreni standard za komunikaciju za programima koji su u .ENG formatu. Otvoreni
standardi koji se danas koriste su UCI (Universal Chess Interface) i Winboard.
3.3.6.1 Univerzalni šahovski interfejs UCI (Universal Chess Interface)
Univerzalni šahovski interfejs UCI standardizuje određeni broj tekstualnih komandi koje se
razmenjuju između grafičkog okruženja i samog šahovskog programa. Osnovne karakteristike
31
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
UCI protokola su: nezavisnost od operativnog sitema, rad sa standardnim stdio ulaznoizlaznim komandama i mogućnost unutrašnje sinhronizacije ova dva programska sistema čak i
u slučaju da je šahovski program trenutno u fazi obrade tekuće šahovske pozicije. UCI
protokol je veoma jednostavan, lak za implementaciju i omogućava stabilnu vezu i
komunikaciju dva nezavisna programa. Broj naredbi koje protokol definiše se mogu podeliti u
dve grupe:
Naredbe koje grafičko okruženje GUI šalje šahovskom programu:
uci
debug [ on | off ]
isready
setoption name <id> [value <x>]
register
ucinewgame
position [fen <fenstring> | startpos ]
<movei>
go
stop
ponderhit
quit
moves <move1> ....
Naredbe koje šahovski program šalje GUI okruženju:
id
uciok
readyok
bestmove <move1> [ ponder <move2> ]
copyprotection
registration
info
option
Detalji u vezi sa UCI protokolom mogu se pronaći na Internetu. Autorova verzija programa
Axon II sadrži potpunu implementaciju UCI protokola.
3.3.6.2 Winboard
Wiboard predstavlja prvo univerzalno grafičko okruženje koje je bilo Freeware tipa, dakle
besplatno i dostupano širokom krugu korisnika (Slika 3.9). GUI je dizajniran veoma
jednostavno i omogućava efikasnu razmenu podataka između grafičkog okruženja i
šahovskog programa. Organizacija komunikacije ova dva podsistema obavlja se na sličan
način kao i kod UCI protokola.
32
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Slika 3.10 Winboard GUI – Prvo Freeware grafičko okruženje.
Podrška velikih formi, pre svega ChessBase-a UCI protokolu je omogućila potpunu
dominaciju UCI standarda, tako da se danas gotovo više i ne razvijaju programi za Winboard
grafičko okruženje.
3.3.7 PC bazirani programi
Naglim razvojem PC tehnologije došlo je do migracije šahovskih aplikacija ka novoj
hardverskoj platformi i do velikog zamaha u razvoju amaterskih i profesionalnih šahovskih
programa na novom hardveru. Danas postoje više stotina amaterskih programa i nekoliko
desetina profesionalnih. Pojavio se problem određivanja realne šahovske snage pojedinih
programa i njihovo ELO rangiranje. Upoređivanje programa može se izvršiti jedino u
direktnim mečevima. Problemi koji se pri tome javljaju su: velika zavisnost snage istog
programa od hardvera na kome radi, problemi međusobnog variranja rejtinga u situacijama
gde neki program mnogo bolje igra protiv drugog programa nego protiv onog sa kojim se
testira, kao i problem statističke margine greške, što se može jedino korigovati velikim
brojem međusobno odigranih partija.
Imajući u vidu ove probleme, švedska asocijacija za kompjuterski šah SSDF je razvila
metodologiju za najracionalnije testiranje šahovskih programa koja daje objektivnu sliku o
njihovoj međusobnoj snazi. Od 1996 godine, ova organizacija provodi neprekidno testiranje
šahovskih programa na standarnim kompjuterima sa AMD procesorom na 1200Mhz, pod
ekvivalentnim uslovima, sa istim hash tabelama, bazama otvaranja i završnica… Programi
igraju međusobno u serijama od više desetina partija. Na naj način, postižu se maksimalno
ravnopravni uslovi i statistički se veoma stabilno određuju rang liste programa. Periodično se
formiraju ELO tabele na osnovu kojih se određuje redosled najboljih svetskih programa. Lista
koja je objavljena 10.2.2006. bazirana je odigravanju 105.197 partija koje su odigrali 275
kompjutera:
33
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
SSDF lista 30 najjačih programa na dan 10.2.2006.
Rating
-----1
2
3
4
5
6
7
8
9
9
11
12
13
14
15
16
17
18
19
20
20
22
22
24
24
26
27
28
29
30
Fruit 2.2.1 256MB Athlon 1200 MHz
Hiarcs 10 HzpMod 256MB Athlon 1200 MHz
Shredder 9.0 UCI 256MB Athlon 1200 MHz
Fritz 9.0 256MB Athlon 1200 MHz
Shredder 8.0 CB 256MB Athlon 1200 MHz
Shredder 7.04 UCI 256MB Athlon 1200 MHz
Junior 9.0 256MB Athlon 1200 MHz
Deep Fritz 8.0 256MB Athlon 1200 MHz
Junior 8.0 256MB Athlon 1200 MHz
Shredder 7.0 256MB Athlon 1200 MHz
Deep Fritz 7.0 256MB Athlon 1200 MHz
Fritz 8.0 256MB Athlon 1200 MHz
Deep Junior 8.0 256MB Athlon 1200 MHz
Fritz 7.0 256MB Athlon 1200 MHz
Gandalf 6.0 256MB Athlon 1200 MHz
Hiarcs 9.0 256MB Athlon 1200 MHz
Pro Deo 1.1 256MB Athlon 1200 MHz
Chess Tiger 2004 256MB Athlon 1200 MHz
Shredder 6.0 Pad UCI 256MB Athlon 1200
Chess Tiger 15.0 256MB Athlon 1200 MHz
Chess Tiger 14.0 CB 256MB Athlon 1200
Deep Fritz 256MB Athlon 1200 MHz
Chessmaster 9000 256MB Athlon 1200 MHz
Shredder 6.0 256MB Athlon 1200 MHz
Gambit Tiger 2.0 256MB Athlon 1200
Junior 7.0 256MB Athlon 1200 MHz
Shredder 7.0 UCI 128MB K6-2 450 MHz
Rebel 12.0 256MB Athlon 1200 MHz
Hiarcs 8.0 256MB Athlon 1200 MHz
Ruffian 1.0.1 256MB Athlon 1200 MHz
2853
2845
2815
2807
2806
2802
2786
2782
2767
2767
2765
2752
2750
2739
2738
2736
2727
2725
2723
2719
2719
2716
2716
2714
2714
2697
2693
2683
2681
2679
+
--26
33
23
27
23
22
25
24
24
26
24
20
30
28
25
21
27
23
22
20
29
30
36
29
29
22
29
32
21
24
- Games
--- -----25
-31
-22
-25
-22
-21
-24
-23
-24
-25
-23
-20
-29
-27
-25
-20
-26
-23
-22
-20
-28
-29
-36
-29
-29
-22
-29
-32
-21
-24
835
559
1035
813
1115
1175
826
982
888
841
938
1286
567
674
793
1156
733
917
1033
1219
597
571
376
587
583
1008
561
484
1116
831
Won
--71%
75%
69%
73%
71%
68%
64%
69%
65%
69%
65%
61%
63%
61%
57%
60%
64%
55%
62%
55%
60%
61%
55%
60%
58%
51%
49%
57%
51%
50%
Opp.
----
2701
2652
2675
2635
2649
2670
2682
2643
2661
2630
2655
2670
2659
2660
2685
2667
2629
2688
2639
2682
2649
2641
2678
2644
2655
2687
2702
2631
2673
2681
SSDF lista predstavlja značajnu referencu za statistički stabilno određivanje snage
najmodernijih šahovskih programa. Dugi niz godina vodeći na listi su bili profesionalni
programi, da bi poslednjih godina nekoliko amaterskih programa dospelo u sam vrh po
rezultatima.
3.3.8 Korišćenje paralelizma i specijalizovanog hardvera
Usavršavanje i napredovanje šahovskih programa na nivou programskih tehnika za
jednoprocesorske sisteme je ograničeno ako se ima u vidu da je većina današnjih tehnika
detaljno ispitana i testirana u raznim šahovskim aplikacijama. Uvođenje novih heurističkih
znanja koja bi poboljšala rad evaluacione funkcije na sekvencijalnoj mašini znači u suštini
usporavanje rada samog evaluatora i izvestan gubitak snage u taktičkim pozicijama. Sa druge
strane, uvođenje heuristika sečenja stabla povećava rizik od previda i smanjuje mogućnost
igre u strateškim, zatvorenim pozicijama.
Novi pristupi u povećavanju snage mašine se zasnivaju pretežno na korišćenju algoritama
Shannon A tipa (full width) uz upotebu paralelizma. Hardver koji se koristi za ovu namenu je
34
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
serverskog tipa, sa računarima koji imaju višeprocesorska jezgra i velike oblasti zajedničke
memorije. Takođe, u cilju povećavanja brzine rada i NPS faktora, što je ključ za uspešnu
aplikaciju ovog pristupa, razvijaju se i pomoćni šahovski koprocesori koji se ugrađuju na
standardne periferijske magistrale.
Mašine ovog tipa se danas smatraju za apsolutno najjače šahovske entitete. Njihova
izgradnja i održavanje veoma je skupo, tako da mogu biti servisirane samo od strane velikih
korporacija koje imaju direktan komercijalni interes u ovoj oblasti visoke tehnologije.
3.3.9 IBM Deep Blue šahovski superkompjuter
Najpoznatija mašina u klasi paralelnih šahovskih kompjutera je IBM Deep Blue. Paralelna
mašina je izgrađena oko 32-procesorskog IBM RS/6000 SP servera. Svaki procesor poseduje
poseban mikro kanal za povezivanje sa 8 šahovskih koprocesora. Svaki od koprocesora
predstavlja specijalno dizajnirano VLSI kolo, koje ima zadatak da generiše poteze i evaluira
poziciju. Ukupna procesna snaga sistema od 32 centralna procesora i 256 koporocesora iznosi
200 miliona pozicija u sekundi i do danas nije prevaziđena. Softver je kodiran na
programskom jeziku C pod IBM AIX operativnom sistemu. Za međusobnu komunikaciju se
koristi MPI (message passing) metod koji je standard za IBM SP paralelne sisteme. Prema
istraživačima iz IBM-a, uticaj paralelizacije na ukupne performanse sistema se može objasniti
uz pomoć sledećeg grafikona (Slika 3.11):
Slika 3.11 Uticaj paralelizacije na CPP faktor (IBM).
Grafikon pokazuje porast brzine rada sistema u funkciji napretka u dizajnu procesora i u
tehnologiji algoritama. Jasno je pokazano da graf performansi za paralelni sistem prevazilazi
Moor-ov zakon za jednoprocesorske sisteme, tako da istraživači zaključuju da je paralelni
sistem uspešan. Prema rezultatima IBM-a, paralelni sistem ima efikasnost od 30%.
Posle uspešnog završetka meča sa svetskim šampionom Garijem Kasparovom, kada je
Deep Blue pobedio rezulatom 3.5-2.5, IBM se povukao iz razvoja kompjuterskog šaha, tako
da planirani superkompjuter IBM Deep Blue II, koji bi prema prognozama dostigao brzinu
proračuna od milijardu pozicija u sekundi, nije izgrađen.
35
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
3.3.10 Šahovski kompjuter Hydra
Inicijativom Kena Thomspon-a, započeo je rad na formiranju timova i izgradnji novog
šahovskog superkompjutera Hydra (Slika 3.12). Rukovodstvo na projektu je povereno Dr.
Chrilly Donninger-u, autoru šahovskog programa Nimzo i ekspertu za programiranje FPGA
kola. Posle početnog perioda razvoja preko projekta Brutus, od 2003 god. Hydra postaje
operativna, i odmah pokazuje da po snazi prevazilazi sve postojeće šahovske programe i
sisteme.
Slika 3.12 Hardver šahovskog superkompjutera Hydra.
Sistem Hydra, koji je finansiran od strane PAL grupe, sastoji se od serverskog jezgra sa
32 procesora tipa INTEL PIV koji rade na 3Ghz. Sistem je dizajniran kao LINUX klaster, sa
unutrašnjom komunikacijom realizovanom preko 1Gbit optičke Myrinet mreže. Po dva
procesora su smeštena na istu matičnu ploču, na kojoj se nalazi dva nezavisna PCI kanala,
preko kojih su povezane 2 FPGA kartice u paraleli. FPGA kartice koje su tipa VirtexV1000E.
Kartice rade na 33Mhz i sadrže logiku za realizaciju generatora poteza i evaluatora. Svaka od
nih je takođe u mogućnosti da izvrši quiescence algoritam nad nekim od terminalnih čvorova
koji su na dubini za tri polupoteza manjoj od osnovne dubine. Centralni procesori mogu da
komuniciraju sa FPGA karticama brzinom od 100 000 pristupa u sekundi.
Prema rezultatima mnogih testova, u turnirskim uslovima Hydra je u stanju da razvije
brzinu do 30 miliona pozicija u sekundi u središnjici, uz ELO snagu od preko 2900 poena
protiv velemajstora ili drugih kompjutera, što je svrstava u grupu najjačih šahovskih mašina
današnjice.
36
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
3.3
Povezanost kompjuterskog šaha i ostalih oblasti obrade
strateških informacija
Na današnjem nivou znanja, kompjuterski šah se smatra jednim od najrazvijenijih i
najreprezentativnijih pravaca veštačke inteligencije. U realizaciji vrhunskih šahovskih
aplikacija na nivou jednoprocesorskih ili višeprocesorskih sistema, koriste se najmodernija
znanja i tehnike kako u oblasti softvera tako i u oblasti hardvera. Veliki broj amaterskih i
profesionalnih istraživača je uključen u ovu veoma propuzivnu oblast istraživanja.
Sam po sebi, kompjuterski šah predstavlja referencu za istraživače veštačke inteligencije.
Stvaranje kompjuterskih sistema koji su u stanju da u direktnom meču nadmaše najjače
šahovske majstore je direktan tehnološki izazov koji može da dovede do razvoja novih
tehnologija, koje će se na nekom drugom nivou iskoristiti za rešavanje alternativnih problema.
Tako su tehnologije paralelne obrade i kompozicije višeprocesorskog servera sa hardverskim
kolima razvijane u toku realizacije superkompjutera IBM Deep Blue kasnije iskorišćene u
realizaciji superkompjutera za rešavanje problema u farmaceutskom dizajnu.
Algoritmi za pretragu višestrukih stabala odlučivanja, koji predstavljaju osnovu svakog
šahovskog sistema, mogu se iskoristiti i za niz drugih primena. Softverske tehnologije koje se
koriste za generisanje i obradu stabala, direktno se mogu primeniti na rešavanje problema
vezanih za evolutivni pristup, za obradu velikih količina informacija heurističkim metodama,
za primenu u generalnoj teoriji binarnih stabala odlučivanja… Tehnologije koje se koriste u
fazi strateškog odlučivanja u sprezi sa konkretnim taktičkim kalkulacijama, mogu se primeniti
u strateškom planiranju i generisanju scenarija u ekonomiji, u planiranju i modeliranju
promena na berzi, u vojnim primenama za strateško i taktičko planiranje scenarija za vođenje
borbi kao i u oblasti sintetičkog generisanja rasporeda u raznim sistemima. Algoritmi za
traženje, koji svoju osnovu imaju u algoritmima koji se koriste u kompjuterskom šahu, su
uspešno primenjeni u realizaciji paralelnog kompjuterskog programa koji je uspešno
dešifrovao ljudski genom.
Generalno, kompjuterski šah danas je jedna od vodećih visokih tehnologija i predstavlja
osnovu i servis za ispitivanje vrhunskih sistema i algoritama za obradu informacija, sa
mnogobrojnim sekundarnim primenama u nizu strateški važnih tehnoloških i praktičnih
oblasti nauke.
37
4
_____________________________________
STRUKTURA ŠAHOVSKOG
PROGRAMA
U ovom delu rada biće prikazani principi konstruisanja kao i osnovni elementi strukture
šahovskog programa. Kao što je već naglašeno u ranijim poglavljima u tezi, šahovski program
je veoma kompleksna aplikacija koji u sebi sadrži implementirane brojne tehnike iz raznih
oblasti programiranja.
Teoretska osnova za izgradnju programa koji igraju na nivou jakih šahovskih majstora
proističe iz osnovnog minimaks principa odlučivanja koji svoju analogiju ima i u oblasti
normalnog odlučivanja u raznim oblicima strateških igara. Ukratko, ako postoje dve strane
koje igraju logičku igru, a to je upravo situacija u šahovskoj partiji, svaka od njih se trudi da
od svih poteza koji su joj na raspolaganju odabere najbolji. Sa druge strane, i strategija
protivnika je da odabere najbolji potez za sebe. Kako su u principu direktno suprostavljeni
interesi protivničkih strana, strana koja je na potezu ima zadatak da odabere najbolji potez ne
samo u funkciji svoje pozicije, nego i u perspektivi odgovora koje protivnik može da igra.
Imajući u vidu ove činjenice, formira se takozvani minimaks princip zaključivanja koji
predstavlja prvi i osnovni postulat svih šahovskih i drugih programa koji obrađuju logičke
igre u kojima učestvuju dve strane. Primenom datog principa formira se stablo igre koje u
teoriji predstavlja zapravo stablo odlučivanja. Završetak – bazične elemente stabla čine
terminalni čvorovi koji čija se numerička vrednost izračunava primenom evaluacione
funkcije. Koristeći minimaks princip, vrednosti najboljih evaluacija čvorova obe strane se
prolongiraju kroz stablo prema osnovnom – izvornom čvoru (root node). Strana koja je na
potezu, kao najbolji nastavak bira potez koji vodi do terminalnog noda sa najvećom mogućom
apsolutnom vrednošću terminalnog čvora, primenjujući minimaks princip na svakom nivou
stabla.
Osnovni teoretski i praktični problem koji je potrebno rešiti primenom ovog principa je
prevazilaženje problema kombinatorne eksplozije. Ako pretpostavimo da u proseku u
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
središnjici svaka pozicija ima 40 legalnih poteza na koje protivnik odgovara sa svojih 40
poteza, na prvom nivou bi bilo registrovano ukupno 402=1600 mogućih pozicija. Na drugom
nivou bi taj broj dostigao 403 što iznosi 64000. Iz šahovske teorije je poznato da je jačina
šahovske igre u direktnoj zavisnosti od dubine proračuna stabla koju program postiže. U
nastavku je data tabela koja prikazuje broj čvorova na pojedninim nivoima igre kao i vreme
koje je potrebno za izračunavanje pojednih nivoa pod pretpostavkom da se obrada obavlja na
mašini koja postiže milion pozicija u sekundi.
Tabela 4.1 Vreme izračunavanja kompletnog stabla za pojedine nivoe.
Dubina (nivo) Broj pozicija Vreme kalkulacije Procenjena snaga
1
40
40 mikrosec
2
1 600
1.6 milisec
3
64 000
64 milisec
4
2 560 000
2.56 sec
5
102*10 6
102 sec
6
4*10 9
67 min
Pocetnik
9
7
163.8*10
45.5 sati
IV
8
6.55*10 12
75.8 dana
III
12
9
262*10
8.4 godina
II
10
10*10 15
336 godina
I
11
419*10 15
13 500 godina
Majstorki kandidat
12
16.8*10 18
…
Majstor
13
671*10 18
…
FIDE majstor
14
26.8*10 21
…
Intermajstor
24
15
1*10
…
Velemejstor
Prikazana tabela generisana je uz pretpostavke da je primenjena metoda iscrpljivanja,
odnosno da je primenjen osnovni minimaks princip – generisanje svih mogućih kombinacija u
stablu. U poslednjoj koloni prikazane su kategorije igrača koje korespondiraju sa nivoom koji
je postignut prilikom proračuna, pri čemu je naravno podela data samo aproksimativno.
Kratka analiza predhodne tabele prikazuje realnu situaciju kada se primeni osnovni
minimaks princip na kreiranje stabla. Da bi šahovski program metodom iscrpljivanja stabla
igrao na nivou prvokategornika na svaki potez bi morao da razmišlja 336 godina !
Jasno je da se moraju potražiti drugi algoritmi i principi kako bi se u relnom vremenu
postigla što veća snaga šahovske mašine. Osnovne tehnike koje se koriste za prevazilaženje
problema kombinatorne eksplozije koji je prikazan, zasnivaju se na korišćenju specifičnih
klasa algoritama koji obavljaju razne oblike sečenja stabla (tree pruning). Na taj način
efektivno se smanjuje obim proračuna stabla bez gubitaka u snazi igre.
39
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
4.1 Osnovni pojmovi
Prilikom analize šahovskih programa mogu se uočiti osnovne celine koje su postulirane na
samom početku razvoja ove discipline i koje su u nešto izmenjenim i dopunjenim oblicima
ostale u upotrebi do danas. Ukratko, osnovne strukture su:
Stablo igre – koje se formira dinamički prilikom razvoja početne pozicije, koristeći
poseban stek ili unutrašnji - programski stek. Najveći broj šahovskih algoritama je
rekurzivnog tipa tako da su prirodne strukture za predstavljanje podataka upravo stek i
stablo.
Terminalni čvorovi – predstavljaju tačke u kojima se završava razvoj stabla. Svim
terminalnim čvorovima pridružuju se numeričke vrednosti dobijene evaluacijom u tim
tačkama.
Algoritam za traženje – implementira rekurzivnu proceduru koja organizuje
ekspanziju stabla, obradu terminalnih čvorova i rekurzivno maksimiziranje
evaluacinoh vrednosti.
U vezi sa ovim osnovnim elementima, dodaju se brojne pomoćne tehnike i strukture koje
imaju zadatak da povećaju efikasnost i snagu šahovskog programa.
4.1.1
Stablo igre (Game Tree)
Osnovna struktura koja se formira u fazi generisanja poteza kompjutera i koja predstavlja
analitički oblik mašinskog razmišljanja i odlučivanja je stablo igre. Stablo igre predstavlja
plan onoga sto se može desiti u neposrednoj budućnosti na tabli, imajući u vidu sopstvene
mogućnosti kao i mogućnosti odgovora protivnika. Da bi ilustrovali princip generisanja stabla
odlučivanja poslužićemo se sledećim pojednostavljenim primerom. Pretpostavka je da svaki
čvor u stablu generiše tri izlaza, mada u realnoj situaciji svaki čvor ima više desetina izlaza.
Međutim, princip generisanja i obrade potpuno je isti za sva stabla ovog tipa.
Na slici 4.1 belim krugovima su označeni čvorovi u kojima je beli na potezu, a crnom
kružićima oni čvorovi gde je na potezu crni. Analiza se obavlja počevši od osnovnog čvora.
Pretpostavimo da u toj poziciji beli ima na raspolaganju tri nastavka, a,b i c. Sva tri nastavka
generišu tri moguće pozicije za crnog na drugom nivou. Pretpostavimo dalje, da za svaku od
generisanih pozicija crni ima takođe po tri nastavka (D,E,F), (G,H,I), (J,K,L). Svaka od tri
pozicije crnog generiše još tri pozicije tako da na trećem nivou ukupno imamo 9 čvorova u
kojima je beli na potezu. Zaustavimo se sada na trećem nivou. Jasno je da prema prikazanom
principu možemo nastaviti ekspanziju stabla, pri čemu, naravno sa povećanjem dubine dolazi
do pojave delovanja efekta kombinatorne eksplozije. Na trećem nivou dodelićemo numeričke
vrednosti čvorovima koji predstavljaju njihovu vrednost za belog odnosno za crnog. Ako čvor
ima pozitivnu vrednost u datoj poziciji beli je u prednosti a ako je vrednost negativna u
prednosti je crni. Vrednost nula označava remi situaciju. U realnom programu, na
terminalnom nivou se poziva procedura evaluator, koja analizira i vrednuje trenutnu poziciju.
40
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Slika 4.1 Stablo igre koje sadrži tri nivoa. Ilustrovan je minimaks princip.
Dakle, jasno se ističu dva procesa prilikom rada sa stablima odlučivanja u šahovskoj
aplikaciji.
Prvi proces je analitičkog tipa i podrazumeva ekspanziju stabla, koje se generiše iz
osnovnog čvora ka terminalnim čvorovima. U ovom procesu se formiraju unutrašnji
čvorovi u stablu odlučivanja. Završni čvorovi se evaluiraju - dodeljuje im se konkretna
numerička vrednost.
Drugi proces je sintetički i podrazumeva generisanje najboljeg poteza i njegove
evaluacije na osnovu formiranog stabla. U ovom procesu se polazi od vrednosti
završnih čvorova i koristeći minimaks princip na svakom nivou se odlučuje o
najboljem potezu i njegovoj evaluaciji. Konkretno, na primeru sa slike 4.1, na trećem
nivou su prisutne vrednosti terminalnih čvorova, koje ulaze u odluku na drugom
nivou. Pošto je na drugom nivou na potezu crni, on u svakoj tački bira najpovoljniji
nastavak za sebe, a to je minimum evaluacija u svim granama. Zbog toga, vrednosti
najboljih nastavka za crnog su respektivno min(D,E,F)=0, min(G,H,I)=-3,
min(J,K,L)=-3. Na prvom nivou, na kome je na potezu beli, nastavci su a,b,c.
Najbolji nastavak za belog je max(a,b,c)=0. To je istovremeno i potez koji će program
da odigra posle završetka proračuna.
Na datom primeru veoma jednostavno se objašnjava pojam osnovne linije (principal
variation). To je varijanta koja sadrži najbolje nastavke za belog i crnog. Početak osnovne
linije ili varijante je u osnovnom čvoru a kraj u nekom od terminalnih čvora. Za dati primer to
je varijanta (a,F). Prvi potez u glavnoj varijanti je (a) što istovremeno predstavlja i najbolji
potez u osnovnoj poziciji. Evaluacija osnovne pozicije predstavlja vrednost završnog čvora u
glavnoj varijanti, u datom slučaju je to 0.
41
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
4.1.2
Terminalni čvorovi
Vrednosti terminalnih čvorova su od izuzetnog, možda odlučujećeg značaja za kvalitet igre
šahovskog programa. Proračun stabla je ograničen vremenom tako da se svaka varijanta koja
je generisana u fazi ekspanzije stabla mora završiti u nekom čvoru. Kao što smo u
predhodnom delu poglavlju pokazali, čvorovi u kojima se završava ekspanzija stabla zovu se
terminalni čvorovi. Na tom završnom nivou proračuna terminalni čvorovi moraju se
evaluirati, kako bi se kroz minimaks proces odlučivanja odabrala najbolja varijanta kroz
stablo. Procedura koja na osnovu date pozicije generiše numeričku vrednost naziva se
evaluator i njena struktura će detaljno biti objašnjena u nastavku. Od kvaliteta evaluacije
terminalnih čvorova zavisi i mogućnost pojave grešaka i degradacija u nivou igre. Takođe i
stil igre programa, njegova taktička ili strateška orijentacija direktno zavisi od evaluacije
terminalnih čvorova.
U problematici evaluatora terminalnih čvorova osnovni zadatak koji je potrebno rešiti je
određivanje ravnoteže između količine heurističkog znanja koje se programira u proceduri
kao i brzine rada samog evaluatora. Istraživanja pokazuju da se 60-90% vremena u toku
proračuna odnosi na rad sa terminalnim čvorovima, tako da je brzina izračunavanja u ovom
delu od ekstremnog značaja za samu brzinu rada programa, odnosno za broj nivoa koji
program postiže u realnim uslovima. Pokazano je da je u čisto taktičkim pozicijama brzina
proračuna, odnosno dubina varijanti od prvorazrednog značaja, dok u pozicijama koje su
zatvorene, odnosno strateškog karaktera, znanje koje je implementirano u evaluaciji dolazi do
maksimalnog izražaja.
4.1.3
Minimaks princip odlučivanja
Rekurzivna definicija pomenutog minimaks principa odlučivanja istovremeno predstavlja
osnovnu definiciju jezgra rekurzivnog šahovskog programa.
Pojam rekurzije je poznat kako u oblasti matematike tako i u oblasti programiranja,
premda sa nešto drugačijim značenjem. U oblasti matematike, veoma je interesantna nova
oblast koja se naziva teorija haosa. Za matematičke objekte tipa fraktala struktura rekurzije je
od osnovnog značaja. U programiranju se obično pod rekurzivnom procedurom smatra
procedura koja u svom telu sadrži poziv te iste funkcije, sa izmenjenim ulaznim parametrima.
Na taj način se veoma složeni problemi kakvi se javljaju u oblasti kompjuterskog šaha mogu
rastaviti na niz jednostavnijih problema, sve do nivoa na kome su rešenja trivijalna. U teoriji
programiranja pokazana je direktna veza između rekurzivnih procedura i stabla odlučivanja
odnosno steka kao struktura podataka, tako da je najprirodnija struktura procedure koja
generiše stablo odlučivanja upravo rekurzija.
Na sledećem listingu (Slika 4.2) prikazana je osnovna procedura koja implementira
minimaks princip. Detalji konkretne aplikacije baziraju se na jednoj varijanti koja se u
literaturi često naziva NegaMax [Althöfer, 1989]. Razlika koja postoji između klasične
minimaks i NegaMax procedure je u načinu tretiranja evaluacija na osnovu strane koja je na
potezu. Kod osnovne varijante minimaks procedure, ako je poziciona vrednost povoljnija za
belog, evaluacija ima pozitivnu vrednost, a ako je povoljnija za crnog vrednost je negativna.
Kod NegaMax pristupa, ako je strana koja je na potezu u povoljnijoj poziciji, bez obzira da li
je u pitanju beli ili crni, vrednost je pozitivna, inače čvor dobija negativnu vrednost. U ovom
42
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
pristupu, koji je nešto jednostavniji i fleksibilniji za implementaciju, koristi se okolnost da se
potezi belog i crnog smenjuju naizmenično, tako da se regulacija evaluacije postiže prostom
upotrebom negacije na svakom nivou rekurzivne procedure.
procedure NegaMax (Position, Depth): integer;
var …
{ Position – Tekuca pozicija }
{ Depth – Dubina u stablu odlucivanja }
begin
if (depth=0) then
begin
Evaluate(Position); { Evaluacija terminalnog cvora, izlaz iz procedure }
Exit;
end;
best: = -INFINITY;
{ Inicijalna vrednost za minimaks proceduru }
succ: = Successors(Position); { Pronađi naslednika… }
while not Empty (succ) do
{ Petlja obradjuje sve legalne naslednike tekućeg cvora }
begin
Position: = RemoveOne(succ);
{ Izbaci jednog naslednika iz liste }
Value: = -NegaMax(Position, depth-1); { Rekurzivni poziv sa umanjenom dubinom }
if (value > best) then best: = value;
{ Nova vrednost evaluacije }
end;
NegaMax:=best; { Povratna vrednost evaluacije koja minimum ili maksimum u odnosu na postojeću }
end;
Slika 4.2 Standardni rekurzivni NegaMax algoritam.
Ulazni argumenti za poziv funkcije predstavljanju poziciju i dubinu do koje je potrebno
izvršiti proračun. Procedura Successors ima zadatak da na svakom nivou generiše listu poteza
koji predstavljaju izlaze iz određenog čvora u grani. Rekurzivni poziv, koji je posebno
označen, generiše sledeći nivo sa umanjenom dubinom za 1 i novom pozicijom, koja je
dobijena odigravanjem poteza u odgovarajućoj grani. Na taj način, procedura rekurzivno
generiše nivoe sa sve manjom dubinom da bi se proces na kraju završio na dubini 0, kada se
obavlja proces evaluacije. Na taj način, problem izračunavanja vrednosti pozicije na dubini d
se svodi na rešavanje niza jednostavnijih problema koji imaju dubinu d-1. Broj pozicija koje
se rekurzivno definišu na ovaj način raste eksponencijalno ali pošto se sve grane zatvaraju
terminalnim čvorovima vreme proračuna je konačno, bez obzira na početnu poziciju i dubinu.
Na osnovnom nivou, procedura koja izračunava potpunu vrednost evaluacije stabla na
dubini 7 se poziva na sledeći način:
val = NegaMax(position,7);
Po završetku rada procedure, vrednost val sadrži evaluaciju najbolje varijante, odnosno
najbolju vrednost završne pozicije za stranu koja je na potezu, pod pretpostavkom da obe
strane biraju najbolji od ponuđenih nastavaka. Ako suprotna strana ne izabere najbolji
nastavak, njena odluka ne može da utiče na izbor najboljeg poteza. U grani u kojoj se
određuje najbolji nastavak if (value > best) then best: = value; moguće je
43
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
dodati kod za memorisanje najboljeg poteza čime u svakoj tački u stablu postaje dostupna
informacija o najboljem nastavku. U tom slučaju, najbolji potez-nastavak na nultom,
osnovnom nivou, zapravo predstavlja najbolji potez koji je program proračunao u tekućoj
poziciji sa određenom dubinom.
4.2 Strukture podataka
Definicija i organizacija struktura podataka koje se koriste u šahovskom programu od
ekstremne je važnosti za funkcionisanje samog algoritma za obradu stabla odlučivanja.
Strukture podataka koje se usvajaju na samom početku razvoja programa kasnije definišu
funkcionalnost i optimalnost svih ostalih procedura. U tipičnom šahovskom programu mogu
se izdvojiti sledeće osnovne strukture podataka:
•
•
•
•
matrica ili niz matrica koje predstavljaju samu šahovsku tablu i prataće informacije
vezane za njih,
univerzalni stek koji ima zadatak da pamti sve relevantne informacije koje su u vezi
sa radom algoritma za traženje po stablu igre,
transpoziciona tabela koja pamti pozicije i vrednosti koje su ranije generisane,
tabela istorije poteza (hystory table) koja pamti poteze koji su generisali najveći broj
sečenja u stablu.
U nastavku rada obradiće se detaljnije navedene strukture podataka.
4.2.1 Metodi predstavljanja šahovske table
Šahovska tabla je matrica dimenzija 8x8 elemenata pri čemu na svakom polju mogu da se
pozicioniraju ukupno 13 različitih entiteta: po 6 tipova belih i crnih figura (pešak, skakač,
lovac, top, dama i kralj) kao i prazno polje. Za definiciju pojedinačnog polja u matrici
dovoljno je 4 bita (nibl). Imajući u vidu ove osnovne osobine i okolnost da su dimenzije
šahovske table umnošci broja dva, razvijena su nekoliko tipa internog predstavljanja table u
šahovskom programu. Ko što smo već istakli, način predstavljanja šahovske table je
izuzuzetno bitan u pogledu optimalnosti i efikasnosti samog algoritma za traženje zato što se
sve ključne procedure (generator poteza, evaluator, rad sa stablom) oslanjaju na tu osnovnu
strukturu.
•
Matrična reprezentacija
Osnovna struktura koja se može usvojiti je jednostavna matrica od 64 elemenata od kojih je
svaki elemenat tipa bajt. Korišćenje 8 umesto 4 bita koji su dovoljni za definisanje jednog
polja u matrici je iz razloga optimalnosti odnosno efikasnosti pristupa matrici. Izgled
šahovske table predstavljen je na tabeli 4.2:
44
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Tabela 4.2 Osnovna definicija šahovske table matricom 8x8.
A8
…
A3
A2
A1
B3
B2
B1
H8
…
C2
C1
…
…
H1
Problem koji se javlja u radu sa prikazanom definicijom table je niska efikasnost u
pogledu određivanja legalnosti poteza. Na primer, ako se skakač nalazi na polju A1, legalna
polja na koje on može da odigra potez su B3 i C2. Utvrđivanje nelegalnosti poteza za ovu
poziciju skakača svodilo bi se na upoređivanje X i Y destinacionih koordinata svakog polja na
koje može da se povuče potez. Ovaj nedostatak naročito je izražen kod dalekomentrnih figura
koje imaju veliki broj potencijalnih destinacionih polja - dama na praznoj tabli može da se
kreće na 27 polja. Da bi se ubrzalo ispitivanje legalnosti poteza, uvode se proširene pozicione
matrice dimenzija 10x12 odnosno 12x12. Ideja je u tome da se sva polja unutrašnje matrice
8x8, koja su legalna, markiraju bitom 0, a polja koja su ivična bitom 1 (Slika 4.3):
1
1
1
1
1
1
A8
0
0
*
1
…
0
0
…
1
…
0
…
1
1
1
1
…
…
…
…
B3
*
C2
A1
*
*
*
*
Slika 4.3 Ekspandovana matrica dimenzija 12x12.
Utvrđivanje legalnosti poteza je sada znatno efiksanije. Na primer, ako se skakač nalazi na
polju A1 potrebno je samo ispitati status destinacionog polja - bez upoređivanja koordinata.
Ako destinaciono polje ima status 0, potez je legalan, a ako ima status 1 potez nije legalan i
on se ne unosi u listu poteza; na slici 4.3 su nelegalna polja označena zvezdicom.
Da bi se još više ubrzao pristup, sama matrica se definiše kao niz bajtova kome se umesto
preko dve koordinate pristupa koristeći samo jednu. Linerna definicija sa slike 4.3 bi imala
ukupno 144 bajta. Linerano predstavljanje table omogućava veoma efikasno inkrementalno
definisanje poteza korišćenjem relativnih pomeraja. Ako se bilo koja figura nalazi na nekoj
45
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
legalnoj poziciji, njeni potezi se na osnovu linearne adrese mogu veoma efikasno definisati
koristeći sledeću tabelu pomeraja:
Tabela 4.3 Relativni linearni pomeraji za pojedine figure (osnovni niz 144 bajta).
Figura
Beli Pešak
Beli Skakač
Beli Lovac
Beli Top
Beli Dama
Relativni linearni pomeraji
- 12 (osnovni potez) -11, -13 (dijagonalni potezi)
-25, -23, -14, -10, +10, +14, +23, +25
-11, +11 (leva dijagonala) –13, +13 (desna dijagonala)
-12, +12 (vertikala) +1, -1 (horizontala)
+11 -11 (leva dijagonala) +13 -13 (desna dijagonala),
+12 -12 (vertikala), +1 -1 (horizontala)
-13,-12, -11, -1, +1, +11, +12, +13
Beli Kralj
Crni Pešak + 12 (osnovni potez) +11, +13 (dijagonalni potezi)
Crni Skakač -25, -23, -14, -10, +10, +14, +23, +25
Crni Lovac -11, +11 (leva dijagonala) –13, +13 (desna dijagonala)
-12, +12 (vertikala) +1, -1 (horizontala)
Crni Top
Crni Dama +11 -11 (leva dijagonala) +13 -13 (desna dijagonala),
+12 -12 (vertikala), +1 -1 (horizontala)
-13,-12, -11, -1, +1, +11, +12, +13
Crni Kralj
Na osnovu predhodno izloženih definicija, moguće je izgraditi veoma efikanu proceduru
za generisanje pseudo-legalnih poteza. Na primer, ako se top nalazi na polju A1, čiji je
relativni pomak u odnosu na početak liste +26, svi vertikalni potezi mogu se generistti
sledećom procedurom:
LinearAdr:=26;
WHILE (Board[LinearAdr]=0) DO
Begin
LinerAdr:=LinearAdr+12;
MemorizePseudoLegalMove(LinerAdr)
end;
Kada vrednost matrice Board[LinearAdr] postane 1, izlazi se iz procedure zato što je
generator poteza napustio oblast legalnih poteza.
Prikazana struktura podataka 12x12 sa linearnom definicijom, predstavlja osnovu za rad
šahovskih programa Geniss Axon I Axon u kojima je njena vrednost i efikasnost u potpunosti
dokazana.
46
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
•
Reprezentacija korišćenjem pozicije svake figure
U početnoj poziciji na šahovskoj tabli postoji ukupno 32 figure. Promocijama i izmenama se
broj šahovskih figura može održavati ili smanjivati, tako je je 32 maksimalan broj figura koje
se moraju pamtiti. Koristeći ovu okolnost, razvijen je sistem za predstavljanje pozicije
korišćenjem niza od 32 bajta od kojih svaki bajt sadrži poziciju figure i dva bita za flegove.
Pozicije figura su kodirane linearno sa po šest bita, počevši od gornjeg desnog ugla (Polje A8
ima koordinatu 000000, a polje H1 koordinatu 111111). Ako je na tabli osnovna pozicija:
Slika 4.4 Osnovna pozicija.
Odgovarajući sadržaj je prikazan na tabeli 4.4.
Prikazana metoda kodiranja omogućava veoma komprimovano predstavljanje šahovske
table jer se koristi samo 32 bajta operativne memorije. Prenos pozicije kroz stablo igre veoma
je brz. Generisanje nove pozicije na osnovu predhodne veoma je jednostavno; dovoljno je
promeniti koordinatu figure na samo jednoj poziciji u prikazanoj tabeli. Problemi koji nastaju
pri korišćenju ove memorijske strukture za reprezentaciju su brojni, pre svega prilikom
razmene figura, en’passant poteza, promocija …. Takođe, ispitivanje uticaja figura, na primer
da li je kralj u šahu, takođe zahteva korišćenje dodatnih procedura. Zbog navedenih
negativnih osobina, u modernim šahovskim programima ova struktura se gotovo i ne koristi.
47
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Tabela 4.4 Tabela koja definiše 32 bajtno predstavljanje šahovske table.
Figura
Beli pešak (1)
Beli pešak (2)
Beli pešak (3)
Beli pešak (4)
Beli pešak (5)
Beli pešak (6)
Beli pešak (7)
Beli pešak (8)
Beli skakač (9)
Beli skakač (2)
Beli lovac (1)
Beli lovac (2)
Beli top (1)
Beli top (2)
Bela dama (1)
Beli kralj (1)
Crni pešak (1)
Crni pešak (2)
Crni pešak (3)
Crni pešak (4)
Crni pešak (5)
Crni pešak (6)
Crni pešak (7)
Crni pešak (8)
Crni skakač (9)
Crni skakač (2)
Crni lovac (1)
Crni lovac (2)
Crni top (1)
Crni top (2)
Bela dama (1)
Crni kralj (1)
•
Pozicija (decimalna
vrednost)
48
49
50
51
52
53
54
55
57
62
58
61
56
63
59
60
8
9
10
11
12
13
14
15
1
6
2
5
0
7
3
4
0x88 reprezentacija
Ova struktura podataka je izvedena iz ideje ekstenzije dimenzija matrica da bi se postigao
dobitak u performansama [Hyatt, 2004]. U ovom vidu reprezentacije, trenutna šahovska
pozicija se memoriše u matrici dimezija 16x8, dakle sa dva puta većom širinom nego što je to
slučaj kod klasičnih definicija. Izgled 0x88 matrice sa numeracijom polja predstavljen je u
tabeli 4.5:
48
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Tabela 4.5 Tabela prikazuje 0x88 reprezentaciju i numeraciju polja.
112
96
80
64
48
32
16
0
113
97
81
65
49
33
17
1
114
98
82
66
50
34
18
2
115
99
83
67
51
35
19
3
116
100
84
68
52
36
20
4
117
101
85
69
53
37
21
5
118
102
86
70
54
38
22
6
119
103
87
71
55
39
23
7
120
104
88
72
56
40
24
8
121
105
89
73
57
41
25
9
122
106
90
74
58
42
26
10
123
107
91
75
59
43
27
11
124
108
92
76
60
44
28
12
125
109
93
77
61
45
29
13
126
110
94
78
62
46
30
14
127
111
95
79
63
47
31
15
Prikazana matrica se pamti kao vektor, a pojedinim poljima se pristupa preko indeksa koji
su prikazani. Aktuelna šahovska pozicija se pamti u levom delu tabele. Ovakav vid
reprezentacije table pruža mogućnost da se bez pristupa memoriji, kao što je to bio slučaj u
predhodnim tipovima predstavljanja, utvrdi da li je potez legalan ili nije. Elementima tabele se
pristupa preko dve 4-bitne (nibl) koordinate. Na primer, polje C8 koje ima kod 114 ima
koordinane 0111 (y) i 0010 (x). Polja koja su legalna u svakoj od ove dve koordinate imaju bit
najviše težine koji je jednak 0, a ako to nije slučaj potez čija je destinacija dotično polje nije
legalan. To znači da se legalnost poteza ispituje upotrebom AND operacije sa konstantom
0x88 nad dva nibla istovremeno, koji se zajednički mogu pamtiti u bilo kojoj jednobajtnoj
promenjivoj.
Da bi objasnili efikasnost metode poslužićemo se sledećim primerom:
Neka se lovac čije poteze želimo da generišemo nalazi na polju C8. U 0x88 tabeli indeks
tog polja je 114. Niz poteza koji se generišu po dijagonalnoj putanji lovca su potezi D7, E6,
F5, G4, H3 … sa indeksima 114,99,84,69,54,39 respektivno ili u heksadecimalnom obliku
72h,63h,54h,45h,36h,27h. Ovi potezi se dobijaju oduzimanjem trenutnog indeksa sa brojem
11 heksadecimalno. Posle izvršavanja AND operacije sa konstantom 0x88, lako je pokazati da
ni u jednom slučaju bit najveće tešine niblova nije 1, što implicira da su svi navedeni
dijagonalni potezi lovca legalni. Sledeći potez koji bi se razmatrao u listi generisanih poteza je
potez na polje se indeksom 24 odnosno 18 heksadecimalno. Posle obavljanja AND operacije
sa konstantom 0x88 dobija se rezultat 08h ili binarno 0000 1000. Jasno je da niži nibl ima
vrednost bita najveće težine 1, što znači da je potez nelegalan.
Ova tehnika pruža velike dobitke u vremenu, jer za proveru legalnosti ne zahteva pristup
memoriji već se informacija o tome dobija prostim korišćenjem brze AND mašinske naredbe
nad indeksom destinacionog polja i konstante 88 heksadecimalno. U praksi se ova tehnika
dosta koristi, jer pruža široke mogućnosti za dalje optimizacije, naročito u proceduri za
generisanje poteza.
49
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
•
64 bitne tabele - Bitboard
Ideja za korišćenje tabela bitova nastaja je 1960 god. sa pojavom 64 bitnih kompjutera i
servera [Hyatt, 1999], [Cracraft, 1984]. Tadašnji kompjuteri koristili su 64 bitne registre na
kojima su se mašinske operacije odvijale paralelno. Tako je na primer operacija AND između
dva 64 bitna registra mogla biti izvršena u jednom procesorskom taktu. Sa druge strane,
činjenica je da šahovska tabla sadrži upravo 64 polja. To znači, da ako se za pamćenje nekog
stanja na šahovskoj tabli upotrebi samo 0 ili 1, u jednom 64 bitnom registru je moguće
zapamtiti reprezent čitave table. Taj registar se naziva bitboard. Osnovna implementacija ove
metode predviđa pamćenje sadržaja pozicije po tipovima figurama, posebno za belog i crnog.
Za pamćenje celokupne šahovske table potrebno ukupno deset 64-bitnih registara - po jedan
registar za belog i crnog pešaka, skakača, lovca, topa i damu. Pošto se na šahovskoj tabli ne
može naći više od jednog kralja, za kraljeve se ne koristi bitboard, već indeks 0-63 koji se
pamti u 2 bajta - za belog i crnog kralja posebno. Pri tome se indeks 0 u bitboard-u odnosi na
bit najmanje težine (polje A1) a indeks 63 na bit najveće težine (polje H8). Pretpostavimo da
na tabli imamo sledeću poziciju pešačke završnice:
Slika 4.5 Pozicija sa pešacima i kraljem iz završnice.
Pošto se na tabli nalaze samo pešaci i kraljevi, pamćenje svih informacija u vezi sa tekućom
pozicijom se u ovom slučaju može izvršiti upotrebom samo dva bitboard 64 bitna registra.
Tabela 4.6 Bitoboard za bele i crne pešake.
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
50
Pozicije kraljeva se pamte u dvobajtnoj strukturi:
Beli_Kralj_index:byte ,
Crni_Kralj_index:byte,
za konkretni slučaj indeks je 12,
za konkretni slučaj indeks je 52.
U binarnom obliku, pamćenje pozicije bi se svelo na pamćenje dve 64-bitne memorijske reči:
Za belog:
0000 0000 0000 0000 0000 0000 0000 0000 0000 0010 0100 0101 0100 0000 0000 0000
Za crnog;
0000 0000 1100 0000 0000 0110 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
ili u heksadecimalnom obliku:
Za belog: 0000000002454000h
Za crnog: 00c0060000000000h
Potpuna definicija strukture podataka može se prikazati u 64-bitnom programskom jeziku
Pascal:
BITBOARD = Int64;
BOARDTYPE = record
BlackPieces : BITBOARD;
WhitePieces : BITBOARD;
BlackPawns : BITBOARD;
WhitePawns : BITBOARD;
BlackRooks : BITBOARD;
WhiteRooks : BITBOARD;
BlackKnights : BITBOARD;
WhiteKnights : BITBOARD;
BlackBishops : BITBOARD;
WhiteBishops : BITBOARD;
BlackQueens : BITBOARD;
WhiteQueens : BITBOARD;
All : BITBOARD;
BlackKing : integer;
WhiteKing : integer;
Side : integer;
EP : integer;
;
;
Definicija tipa bitboard
Definicije struktura za svaku figuru
;
;
;
;
;
;
Generalni bitboard
Lokacija crnog kralja 0..63
Lokacija belog kralja 0..63
Strana na potezu Beli = 0, Crni = 1
en-passant polje 0..63
ako en-passant nije moguć = -1
;
Definicija pokazivača na strukturu
end;
BOARDPTR = ^BOARDTYPE;
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Ova struktura je veoma kompaktna i može biti dopunjena drugim 64-bitnim tipovima
podataka. Na primer, često se prilikom realizacije generatora poteza koriste takozvane matrice
uticaja (attacking borads). Matrice ovog tipa predstavljaju polja na koja utiču figure koje su
pozicionirane u osnovnim 64-bitnim matricama. Na primer, za pešake na poziciji datoj na
slici 4.5 predstavljene su tabele 4.7 sa odgovarajućim matricama uticaja:
Tabela 4.7 Matrice uticaja za bele i crne pešake.
Beli pešaci:
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
Crni pešaci:
0
0
0
1
0
0
0
0
Matrice uticaja se lako generišu na osnovu memorijski predefinisanih tabela i veoma su
efikasne u rešavanju mnogih zadataka koji se javljaju u realizaciji procedure za generisanje poteza
ili evaluacione funkcije.
Kao ilustraciju, prikazaćemo postupak određivanja da li se beli kralj, pod pretpostavkom da je
beli na potezu, nalazi u šahu. Pretpostavimo da se na poziciji sa slike 4.5, beli kralj umesto na
poziciji E2 nalazi na poziciji D5. Pošto indeks polja D5 iznosi 35, generisanje 64-bitnog bitboard
registra za belog kralja se svodi na prostu rotaciju binarne jedinice za 35 pozicija ulevo:
Prema tome, bitboard za belog kralja bi imao sledeći izgled:
0000 0000 0000 0000 0000 0000 0000 1000 0000 0000 0000 0000 0000 0000 0000 0000
Ako sada izvršimo mašinsku TEST operaciju, koja predstavlja nedestruktivni mašinski AND,
između prikazanog 64 bitnog registra i matrice uticaja crnih pešaka oblika:
52
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
0000 0000 0000 0000 1110 0000 0000 1111 0000 0000 0000 0000 0000 0000 0000 0000
dobija se rezultat:
0000 0000 0000 0000 0000 0000 0000 1000 0000 0000 0000 0000 0000 0000 0000 0000
Ako je rezultat TEST odnosno AND operacije različit od nule, kao što je to slučaj u našem
primeru, to znači da se na poziciji na kojoj je kralj registruje uticaj protivničkih figura - odnosno da
je kralj u šahu. Ako protivnik osim pešaka ima i drugih figura postupak je i dalje jednostavan.
Testira se pozicija kralja sa svim 64-bitnim pozicionim registrima koji su različiti od nule. Postoji i
alternativni postupak, tako što se najpre izvrši mašinska OR operacija nad svim protivničkim
bitboard-ovima, a zatim se obavi naredba testiranja. Prilikom dodele težine poteza u generatoru
poteza, veoma korisna informacija se odnosi na status destinacionog polja - da li je ono pod
uticajem protivničkih figura i pešaka. Potezi koji sopstvenu figuru dovode pod uticaj protivničkih
lakih figura bez odbrane obično su slabi, pa u redosledu poteza za razmatranje je racionalno da
budu na poslednjim pozicijama. Koristeći ovaj postupak težine poteza se veoma jednostavno
generišu koristeći matrice uticaja.
•
Uticaj tipa procesora i operativnog sistema na efikasnost rada za bitboard strukturama
Korišćenje bitborad struktura ekstremno je efikasno ako se program izvršava na 64-bitnom
procesoru i 64-bitnom operativnom sistemu. Samo korišćenje 64-bitnog procesora koji izvšava
klasičan 32-bitni kod, ubrzava rad aplikacije za 15-20% na istoj frekvenciji procesora uglavnom
zbog bržeg pribavljanja mašinskih instrukcija u jezgro procesora. Najveća ubrzanja se postižu ako
je i osnovni kod 64-bitni zato što je jedino u tom slušaju moguće do maksimuma iskoristiti prednost
paralelne obrade koju pružaju 64-bitni registri. Kao ilustraciju prikazaćemo mašinski kod koji
obavlja operaciju testiranja ugroženosti kralja koristeći bitoboard strukture, kao na predhodnom
primeru:
•
32-bitni mašinski kod
MOV EAX,[BlackPionAttack_LOW]
MOV EBX, BlackPionAttack_HiGH]
TEST EAX,[KingBitboard_LOW]
JNZ KingUnderAttack
TEST EBX,[KingBitobard_HiGH]
;Niži deo 64-bitnog bitboard registra za pešaka
;Viši deo 64-bitnog bitboard registra za pešaka
;Testiranje sa nižim delom pozicionog bitboard
;-a za belog kralja. Ako je utvrđeno poklapanje,
;kralj je u šahu.
; Testiranje sa višim delom pozicionog bitboard
;-a za crnog kralja. Ako je utvrđeno poklapanje,
;kralj je u šahu.
JNZ KingUnderAttack
64-bitni mašinski kod
MOV QAX,QWORD PTR [PionBlackAttack]
TEST QAX, QWORD PTR [KingBitboard]
JNZ KingUnderAttack
;Učitavanje kompletnog 64-bitnog bitboard-a
za pešaka.
;Testiranje sa 64-bitnim bitboard-om koji
;predstavlja belog kralja
; kralj je u šahu
53
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Zbog mogućnosti učitavanja 64-bitnog registra u jednoj mašinskoj naredbi, 64 bitni kod koji je
prikazan u datom primeru je 50-100% brži u izvršavanju u odnosu na 32-bitni kod. Autori 64-bitnih
šahovskih programa, koji rade sa 64-bitnim bitboard strukturama podataka registruju značajan
porast performansi, tako da njihove aplikacije imaju ubrzavanje 40-70% u odnosu na 32-bitne
verzije pod istim uslovima. Programi koji ne koriste bitboard-ove, prilikom izvržavanja u 64bitnom okruženju imaju znatno manja ubrzanja, 10-15%.
Autor programa Rybka, za koga paralelno postoje 32-bitna i 64-bitna verzija prilikom testiranja
na mašini koja ima AMD-64 CPU na 2.4GHz, registruje porast brzine od 66% prilikom prelaska na
totalni 64-bitni rad. Njegov program sa 104 Knps koliko postiže u 32-bitnom modu, ubrzava na 166
Knps u 64-bitnoj verziji. Prikazani porast brzine odgovara porastu šahovske snage od 50-70 ELO
poena, na istom procesoru.
4.2.2
Kodiranje poteza
Kodiranje poteza najčešće se realizuje bitskim kodiranjem figure koja je na potezu, polaznog i
destinacionog polja. Za kodiranje figure dovoljno je koristiti 4 bita, pošto postoji 6+6+1 različitih
tipova figura, računajući i prazno polje. Na šahovskoj tabli postoji ukupno 26=64 polja, tako da je za
kodiranje izvornog i destinacionog polja potrebno 6+6 bita. Za kodiranje jednog poteza je potrebno
ukupno 16 bita, što je i optimalna vrednost za ovu strukturu podataka. Postoje i drugi formati
kodiranja, kao i potreba da se kodiraju specijalni potezi kao što je en-passant, rokada, promocija ali
se i oni veoma jednostavno mogu kodirati u isti 16-bitni format. Kod modernih 32-bitnih procesora,
ovo je veoma pogodan format zato što se preostalih 16 bita mogu koristiti za pohranjivanje težine
poteza, tako da se sve informacije mogu kodirati u jednu 32-bitnu reč kojoj se pristupa u jednom
taktu procesora.
4.2.3
Transpoziciona tabela
Transpoziciona tabela se definiše kao hash struktura tipa record koja sadrži informacije o
čvorovima u stablu koji su već analizirani [Beal, 1996]. Pristup tabeli je direktan, korišćenjem
modifikovane 64-bitne adrese koja je genererisana metodom Zobrist-a [Romein, 2002], [Breuker,
1994]. Detalji o formatu i elementima transpozicione tabele dati su u poglavlju 4.6.4.
4.2.4
Tabela vodecih odigranih poteza (history table)
Tabela vodecih odigranih poteza (history table) definisana je kao hash tabela koja se adresira 16
bitnom promenjivom koja sadrži definiciju poteza [Schaeffer, 1983], [Schaeffer, 1989]. Ako je svaki
elemenat u tabeli predstavljen jednom 32-bitnom mašinskom reči, potrebno je predvideti 65536x4
bajta = 262144 bajta u memoriji za realizaciju ove strukture. Pristup ovoj strukturi je u jednom taktu
procesora, a primena je naročito izražena kod implementacije move generator-a. Detalji u vezi sa
procedurama koje generišu pristup ovoj strukturi je dat u poglavlju 4.6.6.
4.2.5
Stek
Stek predstavlja jednu od osnovnih struktura podataka u šahovskom programu. Pored programske
strukture steka koja se generiše inherentno primenom rekurzivnih poziva osnovnih ALFABETA/PVS/null-move procedura, u šahovskom programu je često potrebno predvideti pomoćne
strukture tipa steka u kojima je potrebno pamtiti pozicije, ključeve, evaluacije i druge parametre
koji se dinamički definišu u toku rada procedure za obradu stabla. Iz teorije programiranja je
poznato da je stek osnovna struktura u procedurama koje se bave obradom stabla, kao što je to
neposredno slučaj u šahovskim aplikacijama.
54
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
4.3 Generator liste poteza (move generator)
Generator poteza ima zadatak da na osnovu trenutne pozicije i informacije o strani koja je na potezu
generiše listu poteza u formatu koji je predviđen u programu, najčešće u vidu 16-bitnog koda
(poglavlje 4.2.2). Imajući u vidu, da se dodeljivanje težine poteza obavlja kroz pristup history
tabeli, generator poteza generiše samo osnovne liste. Na ovom nivou, potezi se mogu veoma grubo
razvrstati u specijalne, gde se podrazumevaju pre svega potezi koji razmenjuju figure, šahovi i
promocije i ostale. Specijalne poteze je čak i da se ne koriste pomoćne tabele uvek dobro ispitati na
početku liste zato što generišu najveći broj sečenja u stablu. Sami generatori se takođe dele na
generatore legalnih i generatore pseudolegalnih (kvazilegalnih) poteza. Razliku između ova dva
tipa generatora možemo objasniti na sledećem primeru:
Slika 4.5b - Dijagram koji ilustruje rad generatora legalnih i pseudolegalnih poteza.
Funkcionisanje generatora poteza oslanja se na upotrebu liste dozvoljenih poteza za svaku
figuru. Mogući potezi u poziciji su određeni šahovskim pravilima kretanja svake figure. Osnovno
ograničenje koje je potrebno poštovati u realizaciji generatora je da se figure ne mogu kretati na
polja koja su van šahovske table, kao i na polja na kojima se nalazi figura sopstvene boje. Van ovih
ograničenja, generator pseudolegalnih poteza generiše listu poteza. Na primer, ako je na poziciji sa
slike 4.5b beli na potezu, pseudolegalni potezi koje je moguće generisati su:
Kg3, Kh3, Kf2, Kh2, Kf1, Kg1, Kh1, Se5, Sg5, Sd4, Sh4, Sd2, Sh2, Se1, Sg1, g5, gxh5.
U ovoj listi je specijalan potez samo gxh5.
Iz generisane liste pseudolegalnih poteza samo neki potezi su zaista legalni po šahovskim
pravilima. Naime, svaki potez koji otkriva sopstvenog kralja i koji je u sledećem potezu protivnika
napadnut je nelegalan i ne može se razmatrati. U poziciji na slici, ovoj grupi nelegalnih poteza
pripadaju svi potezi “vezanog” skakača sa polja f3, kao i potez gxh5. Primenom ovog novog pravila
lista poteza se redukuje na sledeću listu legalnih poteza koje beli zaista može povući iz tražene
pozicije:
Kg3, Kh3, Kf2, Kh2, Kf1, Kg1, Kh1, g5.
Generator legalnih poteza u principu radi znatno sporije od generatora kvazilegalnih poteza
zbog potrebe da se ispita legalnost svakog nastavka u smislu koji je predhodno izložen. Sa druge
55
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
strane, broj legalnih poteza je uvek manji ili jednak broju kvazilegalnih poteza tako da se u svakom
čvoru razmatra manji broj nastavaka čime se ubrzava rad sa stablom. U modernoj praksi šahovskog
programiranja se u najvećem broju slučajeva ipak koristi prva varijanta a ispitivanje legalnosti se
svodi na sondiranje u sledećem nivou stabla. Osnovni razlog ovakvog pristupa je brzina generisanja
i značaj korišćenja transpozicionih tabela koji omogućavaju da dobri legalni potezi već na početku
liste generišu dobre nastavke, tako da nije ni potrebno razmatrati ostale poteze niti ispitivati njihovu
legalnost. Druga osnovna podela generatora poteza je prema selektivnosti u fazi formiranja liste
poteza. Imajući u vidu ovaj princip generatori se dele na:
Selektivni generator poteza – koji generiše listu poteza na bazi veoma detaljne statičke
analize svih nastavaka. U ovom procesu se izdvajaju potezi koji na osnovu određenih
heurističkih pravila dobijaju maksimalnu težinu čime se izdvajaju od ostatka iz liste poteza.
U fazi obrade u stablu u obzir se uzimaju samo selektivni potezi, dok se ostatak liste ne
razmatra. Selektivni generatori predstavljaju osnovu za izgradnju algoritma Shannon B
klase. U praksi je međutim pokazano da selektivni algoritmi veoma zavise od heuristika koje
su upotrebljene za odabiranje poteza, se velikom verovatnoćom pojave grešaka i previda,
tako da je ovaj pristup u današnjoj praksi u potpunosti napušten.
Inkrementalni generator poteza – u jednom vremenskom trenutku se generiše samo grupa
poteza iz ukupne liste poteza. Prioritet u generisanju imaju potezi za koje je najveća
verovatnoća da mogu izazvati sečenje u stablu, pre svega potezi koji uzimaju figure, šahovi i
promocije. U slučaju da dođe do sečenja u stablu, pošto ostatak iz liste poteza nije ni
generisan, dobitak u vremenu je značajan. Ako to nije slučaj, inkrementalno se moraju
generisati svi ostali potezi sa naknadnim pozivima generatora.
Generator kompletne liste – u jednom pozivu generiše kompletnu listu kvazilegalnih
poteza. Ovo predstavlja najbrži način za generisanje potpune liste jer se generator poziva
samo jednom. Prednosti ove metode su u mogućnosti da se od cele liste odabere najbolji
potez, što nije slučaj kod ostalih metoda kod kojih se radi samo sa podskupom liste. Takođe,
generisanje potpune liste je najjednostavniji i najpouzdaniji mod rada generatora poteza koji
omoguđava primenu nekih drugih metoda za sečenje stabla, kao što je to ETC (Enhanced
Transposition Cutoff).
Koristeći 0x88 reprezentaciju table, čija je forma objašnjena u predhodnom delu rada, moguće
je izgraditi veoma brz i jednostavan generator poteza. Kao što je to pokazano, kontrola granica se u
ovom formatu veoma jednostavno ispituje upotrebom samo jedne AND operacije. Pošto 0x88
predstavlja linernu reprezentaciju šahovske table, generisanje poteza za neku figuru, na primer
lovca može se realizovati veoma jednostavno, pomoću nekoliko procedura:
while (!(index & 0x88)) {Generisanje liste linearnom promenom indeksa}
{
GenerateMove(index);
index += delta;
}
void GenerateMoves(int square, int * ptab)
{
for (; *ptab; ptab++) {
int
index;
for (index = square; !(index & 0x88); index += *ptab)
GenerateMove(index);
}
56
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
}
int argdBishop[] = { 17, 15, -17, -15, 0 };
{Definisanje pomeraja. Ako se ima u vidu struktura niza, ovim se definišu
dijagonalni pomeraji. Ako bi umesto lovca u pitanju bio top, pomeraji bi bili:
int argdRook[] = { 16, 1, -16, -1, 0 };
}
{ Glavni poziv procedure za generisnaje poteza. Promenjiva square definiše polje
na kome se nalazi figura }
void GenerateBishopMoves(int square)
{
GenerateMove(square, argdBishop);
}
Po istraživanju autora, generisanje poteza, uz evaluaciju pozicije je vremenski najznačajnija
procedura u šahovskom programu. Prema empirijskim istraživanjima, od ukupnog vremena
proračuna šahovski program potroši 55%-60% na izvršavanje same procedure za generisanje
poteza. Razlog za ovako visok postotak potrebno je potražiti delimično i u strukturi modernih
procesora kod kojih se čitanje podataka iz primarne hash memorije obavlja u jednom taktu a upis u
više taktova procesora. Pošto se kod generisanja kompletne liste više desetina poteza u svakom
pozivu generatora pamte u memoriji jasno je da se ovim značajno upošljava memorijski sistem.
Druge procedure, imajući u vidu i evaluator, su orijentisanje na učitavanje i obradu podataka u
registrima. Ove činjenice ukazuju da se realizaciji generatora poteza mora obratiti maskimana
pažnja, i da se on mora realizovati na efikasan način, u velikom broju slučajeva i na mašinskom
jeziku.
4.4 Evaluator
Evaluaciona funkcija predstavlja jednu od najvažnijih procedura u šahovskom programu [Frey,
1985], [Althöfer, 1991], [Althöfer, 1993]. U literaturi se ova funkcija često naziva i heuristička
evaluaciona funkcija, zato što se u njoj definiše heurističko odnosno ekspertsko šahovsko znanje
koje program poseduje [Christensen, 1986], [Anantharaman, 1997]. Evaluaciona funkcija je
odgovorna za stil igre programa; da li je u pitanju pretežno kombinatorni, pozicioni ili kombinovani
stil igre [Althöfer, 1995], [Beal, 1984].
Po definiciji, evaluaciona funkcija je matematička aditivna funkcija koja sumira materijalne i
pozicione aspekte trenutne šahovske pozicije koja je nastala u stablu igre i dodeljuje mu numeričku
vrednost.
Vrednost pozicije može se definisati u različitim formatima. U velikom broju programa,
uključujući i autorove aplikacije, usvojen je 16-bitni format evaluacije, tako da se numerička
vrednosti pozicije kreću u rasponu –32768 do +32767. Pri tome se ektremne vrednosti (veće od
30000 ili manje od 30000) koriste za evaluaciju matova.
Prilikom proračuna stabla algoritam u nekom momentu dostiže maksimalnu dubinu koja je
određena na početku procedure za traženje. Pozicije koje se evaluiraju na toj dubini su najčešće
nestabilne, odnosto u velikom procentu slučajeva postoje taktičke pretnje obe strane. Pokušaj
evaluacije taktički nestabilnih pozicija je neproduktivan, kao što je to pokazano u brojnim radovima
istraživača. U svim modernim programima na nivou terminalnih čvorova startuje se posebna
procedura (quiescence search) koja ima zadatak da stabilizuje poziciju kroz obradu taktički aktivnih
57
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
poteza - razmena figura, neki šahovi, promocije ... do nivoa kada evaluaciona funkcija može biti
primenjena sa najvećom mogućom pouzdanošću. Naravno, u zavisnosti od kvaliteta quiescence
procedure i evaluacione funkcije vrši se obrada krajnjih čvorova sa određenim nivoom tačnosti.
Navedene dve procedure su takođe odgovorne za minimizaciju štetnog uticaja takozvanog
horizontskog efekta. Izuzetno je važno podesiti optimalnost i odnos između čvorova koji se
obrađuju na nivou osnovnog stabla i na nivou quiescence procedure. Kod taktički komplikovanih
pozicija odnos broja čvorova koji se generišu na nivou quiescence procedure i glavnog dela stabla
je 90:10 dok je u taktički mirnim pozicijama taj odnos 50:50. Pokazano je da je korišćenje suviše
složenih quiescence procedura kontraproduktivno, programi ne mogu da dostignu značajniju
primarnu dubinu.
Pojam granularnosti evaluacione funkcije takođe je značajan. Granularnost ili rezolucija
evaluacije određuje minimalnu razliku koja može nastati između dve pozicije. Za prikazan opseg
evaluacije, ta razlika iznosi 1. Imajući u vidu mehanizam funkcionisanja procedure za obradu
stabla, koja se završavaju terminalnim čvorovima u kojima se primenjuje evaluaciona funkcija, veća
rezolucija je pogodnija jer omogućava veći broj ALFA-BETA sečenja u stablu. Sa druge strane,
rezolucija mora da bude dovoljna da bi se vršila gradacija sličnih pozicija, što je veoma bitno u
strateškim aspektima šahovske igre, naročito kada su u pitanju zatvorene, ne-taktičke pozicije. U
ovom delu nemu jasnih pravila i zaključaka, najčešće se aspekti evaluacione funkcije podešavaju
naknadno, pošto je cela šahovska aplikacija razvijena. Kod vodećih programa, koji imaju više
desetina pozicionih parametara, podešavanje evaluacije može da traje i godinama.
Za razliku od vrhunskog majstorskog šaha, gde se znanje o evaluaciji pozicija stiče godinama, i
gde je to znanje podložno promenama i usavršavanju, u kompjuterskom šahu je evaluaciona
funkcija u principu statičkog karaktera. Jednom definisana, ona se u nepromenjivom obliku
primenjuje u hiljadama i milionima pozicija koje mogu da nastanu prilikom proračuna stabla. U
nekim programima postoje opcije za promenu “stila” igre kompjutera – od agresivnog i napadačkog
stila do krajnje opreznog i pozicionog. Pri ekspertizi partija koje odigra isti program pod istim
uslovima gotovo se može zaključiti da su u pitanju različiti programi. Međutim, radi se o promeni
samo nekoliko parametara u evaluacionoj funkciji. Na osnovu svega navedenog, potpuno je jasan
značaj evaluacije i sa koliko se pažnje mora pristupiti proučavanju i implementaciji ove funkcije.
•
Simetrična evaluaciona funkcija
Pojam simetrične evaluacione funkcije odnosi se na potpunu simetriju izračunavanja materijalnih i
pozicionih aspekata figura bez obzira na boju, stranu koja je na potezu ili stanje pratećih
karakteristika pozicije [Buro, 1995]. Takođe, evaluacija mora da bude i horizontalno poziciono
simetrična. Pretpostavimo da je evaluacija +2.00 za belog i potom zamenimo boju svih figura tako
da crne figure pređu u bele i obratno. Rezultujuća evaluacija mora da bude –2.00 . Ako poziciju
figura na tabli promenimo koristeći horizontalnu simetriju tako da figure sa polja A1 i H1, A2 i H2
… zamene mesta, evaluacija mora da bude identična početnoj vrednosti. U praksi je pokazano da
korišćenje simetrične evaluacione funkcije dovodi do maksimalno stabilne igre u strateškom i
taktičkom vidu. Korišćenje nesimetričnih evaluacionih funkcija, koje mogu biti posledica grešaka u
programiranju same funkcije, dovode do nestabilnosti u proračunu i umanjuju kvalitet igre [Lee,
1988].
4.4.1
Materijalna evaluacija
Osnova evaluacije svake pozicije je materijalna evaluacija. U najvećem broju slučajeva, u
pozicijama koje se generišu u toku proračuna stabla, materijalni parametri su dovoljni za konačnu
ocenu pozicije. Ako se ovaj detalj posmatra u vezi sa sa quiescence procedurom, pokazuje se da je
58
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
proračun materijala gotovo dominantan u realizaciji kvalitetne i pouzdane procedure za evaluaciju
pozicije.
Ako se usvoji šesnaestobitni opseg evaluacije, prilikom konstrusanja evaluacione funkcije
potrebno je odrediti apsolutne materijalne vrednosti pojedinih figura kao i njihove međusobne
odnose [Marsland, 1985], [Meulen, 1989], [Mysliwietz, 1997], [Tunstall-Pedoe, 1991]. U sledećoj
tabeli prikazane su materijalne vrednosti svih figura, pod pretpostavkom da se figura najmanje
težine, pešak, evaluira vrednošću +100.
Tabela 4.8 Tabela prikazuje određene vrednosti evaluacije kod nekih aplikacija.
Figura Chess 4.5 Većina današnjih programa Axon II
Pešak
100
100
100
Skakač
325
300
300
Lovac
350
325
300
Top
500
500
500
Dama
900
900
900
Pošto svaka strana ima samo po jednog kralja njihove vrednosti se ne izračunavaju. Kao što je
prikazano u tabeli 4.8, vrednosti evaluacije se nisu značajnije menjale od konstrukcije prvih
šahovskih programa. Zapravo, jedine promene su u vrednostima skakača i lovca. Odnos figura koji
je prikazan je rezultat ekspertskog znanja (heuristike) koji je stvoren dugogodišnjim teoretskim i
praktičnim radom generacija šahovskih majstora. Ovaj odnos materijalne vrednosti figura takođe je
potvrdjen u brojnim šahovskim programima. U autorovoj aplikaciji, koristi se činjenica da su ove
vrednosti u idealnom matematičkom odnosu 1:3:5:9, odnosno 20+1,21+1,22+1,23+1. Za preciznije
korekcije evaluacije pojedinih figura, zadužen je pozicioni deo evaluacione funkcije.
Ako se za bele figure usvoji pozitivni predznak, crne figure će imati identične vrednosti, ali sa
negativnim predznakom. Formula, kojom se računa materijalna ravnoteža cele pozicije, može se
prikazati sledećom matematičkom funkcijom:
MEval = SUMA (Bi-Ci) Vi
(i je indeks svih figura),
dakle u pitanju je prosta suma tabelarnih vrednosti belih i crnih figura.
U početnoj šahovskoj poziciji, kada je broj figura isti za belog i crnog, materijalna evaluacija je
0. Ako evaluacija ima pozitivnu vrednost, beli je u prednosti u pogledu materijala, a ako je
evaluacija negativna u prednosti je crni. Početna materijalna vrednost figura sa jedne strane iznosi
8*100+2*300+2*300+2*500+900 = 3900, dakle približno 40 pešaka. Prikazana osnovna
materijalna evaluacija se često dopunjuje evaluacijom prednosti. Konkretno, ako je jedna strana u
materijalnoj prednosti u odnosu na drugu, racionalna strategija je da ta strana razmenjuje figure a ne
pešake, kako bi se realizacija prednosti što više pojednostavila. Iz šahovske teorije je poznato da se
realizacija materijalne prednosti obavlja najjednostavnije ako su samo pešaci na tabli. Sa druge
strane ako je neka strana slabija, u materijalnom zaostatku, dobra strategija je da razmenjuje pešake
a ne figure. Na taj način, sa malo pešaka na tabli realizacija prednosti jače strane je sve teža, tako da
se partija približava remiju. Jedna strana može da bude za čitavu figuru u prednosti (+3.00), ali ako
nema pešaka to je teoretski remi npr. kralj i lovac ili skakač protiv kralja. U tom smislu, zavisno od
programa, uvodi se proširenje postojeće evaluacione funkcije.
59
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
•
Materijalna evaluacija u završnici
Postoje pozicije u završnici u kojima materijalna evaluacija nema nikakvog značaja. Za slučaj da
jedna strana ima materijalnu prednost, ali da figura nije matirajuća (skakač ili lovac) pozicija se ne
evaluira na dati materijal, već joj se dodeljuje vrednost 0 - remi. U sledećoj tabeli date su
karakteristične kombinacije sa 2,3 ili 4 figura koje moraju da se odmah evaluairaju na 0, bilo gde da
se pojave u stablu, jer se radi o teoretski remi pozicijama.
Tabela 4.9 Prikazuje situacije koje se evaluaraju na 0, jer predstavljaju teoretski remi.
Beli
Kralj
Kralj+Skakač
Kralj+Skakač
Kralj+Skakač
Kralj+Skakač
Kralj+Lovac
Kralj+Lovac
Kralj+Lovac
Kralj+Lovac
Kralj+Skakač+Skakač
Kralj+Skakač+Skakač
Kralj+Skakač+Skakač
Kralj+Skakač+Skakač
Crni
Kralj
Kralj
Kralj+Skakač
Kralj+Lovac
Kralj+Skakač+Skakač
Kralj
Kralj+Skakač
Kralj+Lovac
Kralj+Skakač+Skakač
Kralj
Kralj+Skakač
Kralj+Lovac
Kralj+Skakač+Skakač
Razmatranje važi i za simetrične strukture, kada se promene boje figura. Kod pozicija sa 2 ili tri
figure može se odmah evaluarati remi ako se pojave rasporedi koji su predstavljenjeni u tabeli, a
kod složenijih struktura potrebno je ispitati da li je strana u šahu itd. Pre same evaluacije. Ako je
makar i jedan pešak prisutan ta tabli ne sme se evaluarati remi zbog mogućnosti promocije pešaka u
matirajuću figuru. Prikazane situacije se jednostavno rešavaju programski serijom naredbi uslovnog
skoka. Složenije situacije sa malim brojem figura se rešavaju upotrebom baza završnica.
•
Contemt faktor
Contempt faktor se uvodi kada je potrebno da program izbegne ponavljanje poteza ili remi
varijante, najšeće kada je potrebno igrati na pobedu. Contempt faktor znači da se remi koji nastaje
ponavljanjem pozicije putem večitog šaha, ne evaluira sa 0.00 već nekom malom negativnom
vrednošću. Na taj način, program izbegava igranje na remi osim ako je evaluacija negativna i manja
od contempt faktora. Na primer, ako se contempt faktor postavi na –1, program će igrati na pobedu
čak i kada ima pešaka manje. U suprotnom, program bi se trudio da postigne remi u slučaju da
ocenjuje da je njegova pozicija slabija.
4.4.2
Poziciona evaluacija
Poziciona evaluacija je glavni deo evaluacione funkcije. Njen zadatak je da sumira sve nematerijalne pozicione aspekte trenutne pozicije. Da bi se održala racionalnost igre i sprečilo da
program bez razloga žrtvuje figure za matni napad od koga protivnik može da se odbrani, uvodi se
ograničavanje evaluacione funkcije. Zavisno od programa te granice se najčešće postavljaju na +dva pešaka. To znači, da ako je materijal izjednačen, jedna strana može da ima najveću prednost
+2.00 u situaciji kada njeni pozicioni parametri dominiraju u odnosu na protivničku stranu.
60
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Pozicioni parametri koji se evaluaraju mogu biti veoma različiti i oni dosta zavise od šahovskog
znanja programera. Takođe, programi se veoma razlikuju ne samo u broju evaluacionih parametara
koji se uvode već i u težini pojedinih aspekata statičke analize. Značajno je i pomenuti da se mora
voditi računa da svaki elemenat ekspertskog znanja koji se uvodi preko evaluacione funkcije mora
biti definisan upotrebom odgovarajućeg niza uslovnih mašinskih naredbi, koje su po definiciji
spore. Prema tome, potrebno je pronaći optimum u pogledu brzine rada evaluatora i količine
ekspertskog znanja koji je programirano. Programi sa minimalističkim pristupom (Fruit) koji imaju
nizak nivo ekspertskog znanja koji je ugrađen u evaluacionu funkciju mogu biti veoma efikasni u
pogledu postignute šahovske snage.
U nastavku ćemo prikazati neke segmente statičke evaluacije, koji se standardno primenjuju u
šahovskim programima. Težine - vrednosti pojedinih parametara neće biti prikazane zato što se one
fino podešavaju tek naknadno i u funkciji od ostalih segmenata šahovskog programa kao i na
osnovu rezultata i igre protiv realnih oponenata. Elementi statičke evalucaije mogu se podeliti na
dve grupe: afirmativne koji nagrađuju pozitivne pozicione aspekte koji su prepoznati u tekućoj
poziciji i restriktivne koji kažnjavaju pozicione nedostatke koji su registrovani. Afirmativni
parameti dodaju određene vrednosti statičkoj evaluaciji dok restriktivni potezi oduzimaju vrednosti.
U nastavku su detaljnije navedene i analizirane neke od osnovnih komponenata statičke evaluacije:
•
Mobilnost figura
Mobilnost figura se često računa prema broju polja koje figura kontroliše pod pretpostavkom da ih
istovremeno ne kontroliše protivnička figura. Veća mobilnost figura omogućava veći broj
kombinacija čime je verovatnije pronalaženje odgovarajućeg poteza u odbrani i napadu. Takođe,
velika mobilnost sopstvenih figura znači i smanjenu pokretljivost protivničkih figura, što indirektno
utiče još više na pojačavanje sopstvene pozicije. U ovom delu je moguće uvesti i restrikciju za
figure koje su blokirane i čija je pokretljivost limitirana sopstvenim ili protivničkim figurama.
Evaluacija dalekometnih figura je ključna u pogledu mobilnosti. Naročito je potrebno obratiti
pažnju na evaluaciju lovačkog para koji dolazi do velikog izražaja u otvorenim pozicijama, kakve
se neminovno generišu posle serije izmene figura, u završnim fazama partije. Takođe, u ovom delu
je potrebno detektovati i “vezane’ figure. Na primer, u datoj poziciji na slici 4.6 beli skakač je
izvrsno postavljen, ali njegova pozicija se ne sme nagraditi več kazniti zbog dvostruke maske u
kojoj se nalazi. Pokretljivost skakača je u prikazanoj poziciji zapravo svedena na nulu i on
predstavlja značajan pozicioni minus za belu stranu.
Slika 4.6 Ilustracija detalja evaluacije. Beli skakač je dvostruko “vezan”
61
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
•
Bezbednost i centralizacija kralja (King safety)
Evaluacija pozicije kralja je veoma kompleksan zadatak zbog dvojne uloge koju kralj ima u
središnjici i završnici. U središnjici, kada se nalazi maksimalan broj figura na tabli, kralj često
postaje meta napada tako da je strateški ispravno rokirati kralja na jednu od strana u što je moguće
ranijoj fazi igre. Na taj način, kralj se udaljava od centra prema ivici table gde je znatno manja
mogućnost da se nađe pod udarom protivničkih, pre svega dalekometnih figura. Sa druge strane,
lako je formirati defanzivnu pešačku strukturu. Evaluacija bezbednosti kralja u središnjici
podrazumeva nagrađivanje rokade kralja kao i restrikciju u slučajevima narušene rokade – kada je
kralj ostao u centru table ili kada je rokiran a pešačka struktura koja ga štiti ima ozbiljne slabosti.
Značajno je i okruženje oko kralja, broj protivničih napadajućih i sopstvenih defanzivnih figura itd.
Ako protivnik ima damu i uz to kralj nema odgovarajuđu zaštitu u vidu pešaka ili odbrambenih
figura koje su u njegovoj blizini, vrednost te pozicije mora se umanjiti. U mnogim završnicama sa
damama otvorenost kralja jedne strane može da bude presudna za gubitak partije.
Sa druge strane, u fazi prelaska iz središnjice u završnicu kao i u fazi završnice centralizacija i
dobar položaj kralja od izuzetnog je značaja. Suprotno situaciji u središnjici, kralj u završnici
postaje napadajuća figura tako da je princip evaluacije u potpunosti različit. Ova dvojnost u
evaluaciji se najjednostavnije rešava uvođenjem materijalne granice iznad koje se računa evaluacija
u središnjici. U suprotnom, evaluara se kralj u završnici. U mnogim programima taj limit je
postavljen na +12.00 do +15.00 Snaga centralizovanog kralja mora se računati u funkciji ostalih
prisutnih figura protivnika. U čisto pešačkim završnicama vrednost parametra za centralizaciju
kralja je maksimalna.
•
Pozicije figura i centralizacija
Centralizacija figura je veoma važan segment ukupne evaluacije u središnjici i završnici.
Centralizovane figure veoma lako dejstvuju na svim segmentima table, kontrolišu najveći broj polja
i razvijaju svoju maksimalnu snagu. Zato se centralizovane figure nagrađuju odgovarajućim
bonusom bez obzira na poziciju ostalih protivničkih ili sopstvenih figura. Figure koje su loše
pozicionirane i nalaze se na rubovima table umanjuju evaluaciju. Tehnika određivanja bonusa za
centralizaciju figura se najčešće realizuje preko korespodentnih matrica centralizacije. Svakom
polju na šahovskoj tabli se određuje odgovarajuća težina. Pošto svaka od figura ima svoje
specifičnosti, definiše se posebno matrica centralizacije za sve tipove figura. Za figure suprotne
boje, generišu se vertikalno simetrične matrice centralizacije. Primer jedne takve matrice za belog
skakača dat je na sledećoj tabeli:
Tabela 4.10 Tabela korespodente matrice centralizacije za belog skakača.
-16
8
24
32
16
-8
-20
-48
-8
16
40
48
32
8
-16
-32
-4
32
56
60
56
24
-8
-24
0
32
62
64
60
20
16
-16
0
32
62
64
60
20
16
-16
-4
32
56
60
56
24
-8
-24
-8
16
40
48
32
8
-16
-32
-16
8
24
32
16
-8
-20
-48
Bonusi ili restrikcije za pojedina polja se dobijaju direktnim pristupom određenom elementu
ove matrice. Centralna polja u matrici imaju najviše vrednosti, dok ivična polja imaju negativne
62
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
vrednosti. Prosečne vrednosti elemenata matrice rastu kada se figura nalazi u protivničkom delu
table, čime se forsira težnja za aktivnom – napadačkom igrom programa. Najveća pozitivna
vrednost je kada je skakač na poljima D5 odnosno E5 (+64) a najmanja kada se nalazi u ugaonim
poljima na svojoj polovini table – polja A1 i H1 (-48). Naravno, u zavisnosti od osnovnih vrednosti
u glavnom delu evaluacione funkcije, ove lokalne vrednosti u matrici mogu se normalizovati.
Na osnovu matrice sa tabele 4.10 generiše se vertikalno simetrična matrica za crnog skakača
(Tabela 4.11):
Tabela 4.11 Tabela korespodente matrice centralizacije za crnog skakača.
-48
-20
-8
16
32
24
8
-16
-32
-16
8
32
48
40
16
-8
-24
-8
24
56
60
56
32
-4
-16
16
20
60
64
62
32
0
-16
16
20
60
64
62
32
0
-24
-8
24
56
60
56
32
-4
-32
-16
8
32
48
40
16
-8
-48
-20
-8
16
32
24
8
-16
U toku izračunavanja evaluacije, vrednosti za crnog se negiraju. Simetrične matrice ovog tipa
omogućavaju brzu i jednostavnu kalkulaciju nekoliko pozicionih aspekata, pre svega statičku
aktivnost odnosno neaktivnost figure kao i razvoj i uticaj na ostale segmente table.
•
Razvoj figura
U početnoj poziciji na tabli, sve figure se nalaze na svojim osnovnim pozicijama. U šahovskoj
teoriji postoje određena heuristička pravila koja se moraju poštovati u otvaranju da bi se obezbedio
skladan i harmoničan razvoj figura. Delovi evaluacione funkcije koji obrađuju ovaj segment
šahovske partije se baziraju na upotrebi određenog sistema pravila. Osnovno pravilo je da figure
koje su zaostale na osnovnoj liniji umanjuju evaluaciju. U ovom delu pažnja se naročito obraća na
razvoj lakih figura, skakača i lovca. Ovaj jednostavan mehanizam omogućava da se forsira razvoj
figura u ranom stadijumu šahovske partije čime se posredno otvaraju polja za rokadu kralja.
Nerokirani kralj, koji je zaostao u centru table, predstavlja veliki pozicioni minus i postaje objekat
napada, tako da se za rokadu kralja obavezno generišu pozitivni poeni u evaluaciji. Dobra
evaluacija o ovom segmentu sledi osnovni plan otvaranja:
razvoj centraliznih pešaka,
razvoj lakih figura (lovaca i skakača),
rokada kralja,
postavljanje topova na strateški važne vertikale,
razvoj dame.
Dobrom kombinacijom pozicionih evaluacionih parametara se ovaj strateški plan postiže u većini
profesionalnih šahovskih programa. Dobro razvijene figure u kontekstu određenog sistema
otvaranja pružaju mogućnosti za kasniji dobar nastavak partije u središnjici.
•
Napadnuta figura (hung piece)
Prilikom razvoja stabla igre, u većini terminalnih pozicija jedna ili više figura ostaju pod napadom
protivničkih figura. One su istovremeno i izvor taktičke nestabilnosti pozicije i generator grešaka u
63
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
slučaju direktne upotrebe statičkog evaluatora. Najveći deo problema oko napadnutih figura se
rešava u quiescence proceduri koja kroz seriju razmena figura uprošćava poziciju do nivoa na kome
je moguće primeniti statičku evaluaciju. Naravno, i posle serije razmena može se desiti da i dalje
neka od figura bude napadnuta. U tom slučaju ovaj problem se rešava u statičkom evaluatoru koji
svakoj figuri koja je napadnuta dodeljuje određeni negativni bonus. Vrednost tog bonusa zavisi od
figure koja je napadnuta i od figure koja napada. Najveći negativni bonus dobija dama koja je
napadnuta od protivničkog pešaka. Takođe, u slučaju da su više figura napadnute istovremeno od
protivničkih figura, uvodi se dodatna restrikcija evaluacione funkcije. U velikoj većini slučajeva,
napadnuta strana može lako da se odbrani prostim pomeranjem figure sa napadnutog polja, ali se pri
tome troši tempo, što mora biti registovano kao negativni aspekt pozicije.
•
Evaluacija strukture pešaka
Evaluacija pešačke strukture je od izuzetno velikog značaja za preciznu i kvalitetnu ocenu pozicije.
Značaj pešačke strukture raste sa smanjivanjem broja figura na tabli. Kao što je iz šahovskih pravila
poznato, pešak ima mogućnosti da se dolaskom na poslednji red promoviše u damu, topa, lovca ili
skakača, što pruža mogućnost za preokret u materijalnoj evaluaciji i oceni pozicije. Pešačka
struktura se načešće evaluira u skadu sa nekim pozicionim aspektima koji su usvojeni na bazi
ekspertskog znanja i iskustva šahovskih majstora. Elementi koji su u vezi sa ovim delom evaluacije
su:
Promotivni pešaci – Pešaci čije napredovanje do izvodnog polja ne može biti sprečeno ili
blokirano od strane protivničkih pešaka nazivaju se promotini pešaci i njihovo prisustvo je
pozicioni plus za stranu koja ih poseduje. Snaga promotivnih pešaka raste eksponencijalno u
funkciji smanjivanja udaljenosti od izvodnog polja. Ako postoje promotivni pešaci na
susednim kolonama (povezani promotivni pešaci) njihova snaga je izuzetna, u nekim
slučajevima ni protivnički top nije u stanju da zaustavi promociju nekog od njih, naravno
pod uslovom da je protivnički kralj dovoljno udaljen. Kao ilustraciju ovih navoda
prikazaćemo primer evaluacije povezanih pešaka na šestom redu. Pozicija koja je data na
slici 4.7, na kojoj je crni na potezu, dobijena je za belog, što je lako pokazati analizom na
dubini većoj od 8-9 polupoteza:
Slika 4.7 Ilustracija snage povezanih promotivnih pešaka. Dobitnička pozicija za belog.
64
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
U eksperimentu koji ćemo provesti izvršićemo evaluaciju date pozicije kada je horizont traženja
podešen na minimalnu vrednost (dubina=1). U tom slučaju u oceni pozicije do izražaja dolaze
statički - pozicioni parametri. Naravno, metoda ne omogućava da se precizno odrede vrednosti
statičke evaluacije zato što na dobijene podatke utiče delovanje quiescence procedure, ali je veoma
korisna za kreiranje globalne slike o kvalitetu evaluatora dotičnog programa. U svrhu ilustracije ove
metode, izveden je eksperiment nad desetak vrhunskih profesionalnih i amaterskih programa, koji
su poziciju sa slike 4.7 analizirali na dubinama 1-8. Cilj eksperimenta je utvrđivanje mogućnosti
programa da što ranije, na što manjoj dubini, utvrdi gubitak za crnog. Evaluacija koja to registruje
kod skoro svih programa iznosi približno –4.00. U sledećoj tabeli (tabela 4.12) dati su rezultati
dobijeni analizom:
Tabela 4.12 Rezultati eksperimenta sa evaluacijom pozicije na jediničnoj
osnovnoj dubini.
PROGRAM
Shredder 9
UCi
Deep Fritz 7
Rybka 32
bit
v1.0BETA
Prodeo 1.1
Ruffian
Leiden 2003
Ruffian 2.0
Spike 1.1
TheKing
3.33
Zappa 1.0
Toga II 1.1a
List 512
Ktulu 7a
Pharaon
Dragon46
Anmon 533
Fruit 2.1
SOS 5.1
Naum
Toga II
Axon 1
Axon 2
Dubina u polupotezima
3
4
5
6
-4.01
-4.38
-3.06
+2.85
1
+1.07
2
+0.21
+0.34
*
-4.16
*
-4.16
-6.03
-4.10
-6.36
-4.10
-4.88
+0.39
-0.07
-0.08
-1.32
-3.70
-4.03
-3.72
-4.03
-0.07
+0.45
-
-1.32
-0.71
-
-4.03
-4.83
-4.09
+1.55
+0.78
*
*
*
-0.62
+0.99
+0.89
+2.36
0.00
+1.07
*
+1.5
+0.72
+0.20
*
*
*
-1.28
-0.29
+0.31
+1.61
-0.43
+0.49
+1.41
+1.0
+0.85
-4.45
*
*
*
-3.53
-0.41
-4.53
+1.82
-0.12
-4.53
+0.34
+0.1
7
8
-4.03
-4.12
-4.10
-4.82
-4.19
-4.88
-4.19
-4.82
-3.71
-4.03
-3.76
-4.03
-3.79
-4.03
-3.81
-4.03
-4.03
-5.00
-4.10
-4.03
-4.79
-4.16
-4.03
-5.15
-4.21
-4.03
-5.13
-4.22
-4.03
-5.29
-4.21
0.00
-4.45
*
*
*
-3.54
-4.25
-4.53
+0.63
-4.25
-4.53
+0.34
-0.3
-6.57
-4.59
-4.58
-4.23
-3.19
-3.53
-4.34
-4.39
-4.79
-4.10
-4.39
-3.74
-3.7
-6.96
-4.85
-4.88
-3.90
-3.02
-3.53
-4.34
-4.74
-4.81
-4.08
-4.64
-3.8
-3.5
-6.68
-5.04
-4.82
-5.12
-3.21
-3.53
-4.39
-4.64
-4.74
-4.29
-4.64
-3.78
-3.7
-7.06
-4.98
-4.95
-5.12
-3.27
-3.53
-4.43
-4.75
-4.78
-4.32
-4.75
-3.66
-3.7
U tabeli 4.12, osenčenim poljima prikazani su ključni detalji, odnosno dubine na kojima
program evaluira gubitak za crnog. Karakteristično je da većina programa registruje datu situaciju
na dubini 2, pri čemu dolazi do naglog prelaza između pozitivne evaluacije koja je prisutna na
dubini 1 i negativne što je znak uticaja znanja o promotivnim pešacima na 6. i 7. redu. Eksperimenti
pokazuju da programi koji rano registruju prisustvo dobitničkih promotivnih pešaka, kao u
predhodnom slučaju, generalno igraju veoma dobro završnicu. Karakteristika nekih programa koji
65
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
imaju inkrementalnu evaluacionu funkciju (Zappa 1.0, Axon) je postepeno, granularno smanjivanje
evaluacije i registracija konačne negativne evaluacije za crnog na dubini koja je veća ili jednaka 5.
Karakteristika takvih programa je striktna poziciona orijentacija i postepeno pojačavanje prednosti
u završnici. Najbolji rezultat na ovom testu postigao je Deep Fritz 7 koji već na dubini 2 registruje
gubitak za crnog. Naravno, iz ovih rezultata se samo okvirno mogu izvući zaključci o kvalitetu
evaluacije promotivnoh pešaka zbog uticaja quiescence procedudere. Poznato je da Fritz ima veoma
kompleksnu quiescence proceduru koja osim izmena i šahova registruje i promotivne pešake, tako
da deo posla oko evaluacije zapravo preuzima ta procedura.
Precizno vrednovanje promotivnih pešaka je od ekstremne važnosti za pravilnu ocenu pozicije,
zato što njihovo prisustvo u nekim slučajevima potpuno menja vrednost pozicije. U primeru sa slike
4.7, materijalna evaluacija pokazuje da je crni u prednosti sa +3.00 ali kako je dinamička analiza u
tabeli 4.12 pokazala, crni zapravo gubi sa –4.00. Razlika između materijalne i dinamičke, odnosno
pozicione evaluacije u datom slučaju iznosi 7 pešaka. Problemi sličnog tipa sa javljaju i prilikom
tretiranja drugih aspekata evaluacione funkcije, tako da je njihovo rešavanje kombinacijom statičke
i dinamičke evaluacije od najveće vašnosti za izgradnju šahovskog programa vrhunske klase.
Evaluacija dupliranih i tripliranih pešaka – U slučaju da se dva pešaka iste strane nalaze
na istoj vertikali, stvara se defekt pešačke strukture koji umanjuje vrednost evaluacije.
Duplirani pešaci se teže pokreću i zahtevaju angažovanje dodatnih figura za odbranu.
Izolovani pešaci – Po definiciji, izolovanim pešacima se smatruju oni pešaci koji na
susednim vertikalama nemaju pešake svoje boje. Postojanje izolovanih pešaka je pozicioni
minus za stranu koja ih poseduje zato što oni po pravilu postaju meta napada protivničkih
figura i potrebno je angažovanje sopstvenih figura da bi se ta slabost zaštitila.
Pešačka ostva – Pešačka ostrva su grupe pešaka koje su odvojene vertikalama na kojima se
ne nalaze pešaci iste boje. Veći broj pešačkih ostrva je pozicioni minus za stranu koja ih
poseduje. Ova činjenica naročito je izražena u pozicijama sa aktivnim kraljem, gde on lako
prolazi kroz prostor između pešačkih ostrva. Najprirodnija organizacija pešaka su pešački
lanci.
•
Zajedničko – harmonično delovanje figura
Elemente statičke evaluacije koje smo predstavili ne treba posmatrati odvojeno. Kao i sama pozicija
na šahovskoj tabli, svi pozicioni elementi su u međusobnoj vezi. Zajedničko i harmonično
delovanje figura postaje samo po sebi značajan pozicioni aspekt. Na žalost, u ovoj oblasti nema
jasnih ni matematičkih ni ekspertskih pravila, tako da je određivanje konkretnih numeričkih
vrednosti često u funkciji heurističkog znanja samog programera. Takođe, i šahisti sa majstorskim
znanjem imaju različite heuristike koje su u vezi sa različitim rasporedima figura. Važnost
harmoničnog rasporeda figura je toliko velika, da može promeniti celokupnu ocenu pozicije. Kao
ilustraciju, prikazaćemo dve pozicije, na kojima beli i crni imaju podjednak materijal i čija se ocena
suštinski razlikuje:
66
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Slika 4.8 Pozicija iz završnice koja je na nivou remija.
Na slici 4.8 pozicija je na nivou remija. Analizom date pozicije program Axon I ne daje prednost
nijednoj strani. Kako god beli da igra iz ove pozicije, uz preciznu igru crnog, ne može dobiti partiju.
Međutim, ocena pozicije se korenito menja kada se promene položaji figura kao na dijagramu sa
slike 4.9. Pozicija sadrži isti broj figura za belog i crnog, kao i kod predhodne situacije ali sada
figure belog znatno bolje međusobno sarađuju.
Slika 4.9 Međusobno delovanje figura belog obezbeđuje pobedu.
Figure belog su sada poziciono u potpunosti dominantne u odnosu na figure crnog, a takođe
međusobno u harmoničnom dejstvu u odnosu na druge pozicione aspekte. Sa druge strane, figure
crnog su rasejane po tabli i u nemogućnosti da zajednički deluju. Ovi statički aspekti su dovoljni za
ocenu pozicije u korist belog, koji preciznom igrom lako dobija crnog u nastavku igre.
67
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
4.4.3
Optimizovana evaluacija (Lazy evaluator)
Evaluaciona funkcija je vremeski izuzetno zahtevna procedura. Izvršavajući se konstantno visokom
frekvencijom u terminalnim čvorovima u quiescence proceduri, prema rezultatima empirijskih
istraživanja evaluaciona funkcija koristi između 50% i 75% vremena u toku izvršavanja programa.
Kao što je već istaknuto, ona u sebi sadrži implementirane brojne heurističke procedure koje
zapravo predstavljaju serije uslovnih mašinskih naredbi. Iz teorije procesora je poznato da se ove
naredbe implementiraju uslovnim mašinskim JMP naredbama koje spadaju u najsporije instrukcije
za slučaj kada je uslov skoka ispunjen. Svaka od naredbi tipa JMP, koja je upotrebljena u programu
briše sadržaj pipeline procesora za čije je ponovno uspostavljanje potrebno potrošiti više desetina
procesorskih taktova. Sa druge strane, ako je evaluaciona funkcija suviše jednostavna, odnosno
striktno materijalno orijentisana, kvalitet programa ne može dostići majstorski nivo. Uspostavljanje
ravnoteže između brzine i složenosti evaluacije je jedan od ključnih zadataka u kompjuterskom
šahu. Jedna od metoda koja je široko korišćena je takozvana metoda nepotpune evaluacije “lazy
evaluation”. Metoda se zasniva na proceni margina statičke evaluacije. Na primer, ako je
materijalna evaluacija neke pozicije +1.00 i ako je potrebno dostići vrednost +3.75 da bi pozicija
uticala na konačnu odluku u ALFA-BETA algoritmu, i ako je maksimalna margina statičke
evaluacije +2.50, jasno je da i u ekstremnom slučaju kada statički evaluator generiše maksimalnu
vrednost, ukupni zbir +1.00 + 2.50 = 3.50 ne može nikako da premaši ciljnu vrednost +3.75. Dakle,
u ovom slučaju nije potrebno uopšte vršiti statičku evaluciju pozicije zato što njena vrednost uopšte
ne može uticati na konačnu odluku o najboljem potezu ili konačnoj evaluaciji. Zato se evaluaciji
dodeljuje samo materijalna evaluacija, koja se najčešće izračunava u samom generatoru poteza.
Uštede u vremenu su na ovaj način veoma značajne. Negativna strana je mogućnost grešaka i
potreba da se margine statičke evaluacije striktno ograniče čime se program orijentiše ka
materijalnom aspektu igre i umanjuje njegova kombinatorna sposobnost.
U zaključku ovog dela rada, još jednom ćemo naglasiti nekoliko ključnih stvari koje su u vezi sa
evaluacionom funkcijom:
Evaluaciona funkcija je matematička aditivna funkcija koja se sastoji od materijalne i
pozicione komponente.
Materijalna komponenta sumira vrednosti belih i crnih figura, pri čemu se bele figure
računaju sa pozitivnim predznakom a crne figure sa negativnim. Odnos vrednosti figura je
najčešće približan odnosu 1:3:3:5:9.
Poziciona komponenta izračunava nematerijalne parametre evaluacije na osnovu heuristika
koje su razvijene i prihvaćene od strane šahovskih eksperata. Broj i težina pojedinih
segmenata najčešće određuje sam programer, na osnovu testova i dužeg podešavanja u toku
rada sa programom.
Sa dodatkom više pravila u aditivnoj funkciji, povećava se znanje programa ali dolazi do
smanjivanja brzine rada programa. Optimalna ravnoteža između brzine rada i količine
znanja je jedna od ključnih stavki u kreiranju dobrog šahovskog programa.
4.5 Osnovne procedure za obradu stabla
Pored evaluacije, tehnike za obradu stabla predstavljaju jednu od najvažnijih komponenti svakog
šahovskog programa. Ranije je već istaknuto da je korišćenje osnovnog algoritma baziranog na
implementaciji definicione minimaks procedure neefikasno zbog direktnog negativnog uticaja
efekta kombinatorne eksplozije. U svakoj poziciji u proseku postoji 35 mogućih poteza tako da taj
faktor granjanja generiše izrazitu eksponencijalnu funkcija broja čvorova u stablu u funkciji dubine.
Analize koje su obavljene implementacijom osnovnih rekurzivnih algoritama ukazuju na
nemogućnost da se realno izgradi šahovski program bilo koje respektabilnije snage. Sa druge strane,
68
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
osnovni algoritam metodom grube sile zapravo pretražuje sve moguće kombinacije tako da teoretski
gledano ne propušta ni jednu kombinaciju koja postoji u jednakom ili manjem broju poteza od
dubine do koje pretražuje stablo. Implementacija je jednostavna i bazira se na realizaciji brzih
generatora poteza i evaluatora sa niskim nivoom heurističkog-ekspertskog znanja koje je potrebno
ugraditi. Identnične algoritme je moguće koristiti i za druge logičke igre, ne samo za šah – potrebno
je samo promeniti generatorske funkcije i strukture podataka.
4.5.1
ALFA-BETA procedura
ALFA-BETA algoritam predstavlja prvo značajno poboljšanje u teoriji algoritama za obradu stabala
u logičkim igrama [Knuth, 1975]. Veoma je značajna činjenica, da je tehnika potpuno bezbedna u
pogledu izbora najboljeg poteza [Marsland, 1982]. Sa ekvivalentnom početnom pozicijom i
dubinom ALFA-BETA algoritam će dati istu selekciju najboljeg poteza kao i klasični minimaks
metod, ali uz znatno manji broj generisanih čvorova [Bal, 1986].
Osnovna ideja u implementaciji ALFA-BETA algoritma je korišćenje već postojećih
numeričkih rezulatata koji su generisani u predhodnoj fazi obrade za realizaciju mehanizma
odsecanja određenih podstabala (tree pruning) [Baudet, 1978]. Ključna novina je uvođenje dve
vrednosti ALFA i BETA umesto jedne promenjive za najbolji potez u svakom čvoru, kao što je to
slučaj kod klasičnog minimaks algoritma.
Vrednost promenjive ALFA predstavlja najbolju vrednost nastavka za stranu koja je na potezu.
U slučaju da se u tekućem čvoru otkrije varijanta koja generiše bolji nastavak od onog koji je
registrovan u promenjivoj ALFA, vrednosti ALFA se dodeljuje nova - poboljšana vrednost. Izlazna
vrednost iz čvora, po završetku obrade svih podstabla, je ALFA. U ovom delu mehanizam odluke je
identičan kao u slučaju klasičnog minimaks čvora.
Vrednost promenjive BETA predstavlja najbolju vrednost nastavka do koje je došao protivnik.
Ova vrednost se odnosi na bilo koji predhodni nastavak protivnika. Ako u toku razmatranja tekućeg
čvora kao novu vrednost za ALFA dobijemo vrednost koja je veća ili jednaka od vrednosti
promenjive BETA to automatski znači da ostale nastavke iz tog čvora ne moramo ni da razmatramo
jer ni na koji način ne mogu uticati na promenu odluke na višim nivoima. Kao ilustraciju ovih
navoda, poslužićemo se primerom sa slike 4.10:
Slika 4.10 Mehanizam ALFA-BETA sečenja stabla.
69
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Čvor koji se razmatra (beli krug) ima nastavke a,b,c sa težinama –5,0 i +12 repektivno. Najbolji
nastavak za belog je u ovom slučaju c sa težinom +12 (maksimum). Imajući u vidu predhodni čvor
u kome je na potezu protivnik (crni krug) taj potez ne može biti validan zato što je već pronađen
nastavak A sa boljom vrednošću za crnog +10. Napominjemo, da je za ovaj nivo bolja vrednost
predstavljena minimumom od dve vrednosti A i B. Kako je BETA vrednost bila poznata pre ulaska
u beli čvor, to znači da ako bi se odmah, na početku analize pronašao nastavak koji ima višu ili
jednaku vrednost od BETA, ne bi ni bilo potrebe za generisanjem ostatka poteza. Svaki nastavak,
zbog rekurzivne prirode procedure je izvor novog podstabla, tako da su i nastavci iz datog čvora
takođe eliminisani u ovoj fazi.
Analizom problema sečenja, jasno se pokazuje značaj dispozicije poteza za nivo uštede u obradi
stabla. To je najbolje ilustrovano na sledećoj slici:
Slika 4.11 Uticaj redosleda poteza na mehanizam ALFA-BETA sečenja stabla.
Primer na slici 4.11 veoma je sličan predhodnom primeru, ali je redosled poteza u belom čvoru
dat prema težini nastavka. Nastavci su poređani od najpovoljnijih ka nepovoljnijim za belog. U
literaturi se opisuju razne tehnike za uređenje nastavaka prema težini poteza bilo na principu
heurističkog bilo na principu raznih oblika numeričkog uređenja. Primer ilustruje značaj dobrog
uređenja redosleda poteza za kvalitet sečenja stabla. Kako je u datom primeru kao prvi razmatran
nastavak A sa najvećom težinom +12, sečenje stabla je odmah realizovano jer je postignuta
vrednost koja je veća ili jednaka vrednosti BETA. Ostali nastavci i podstabla koja proističu iz njih
nisu ni razmatrani čime je postignuta znatna ušteda u vremenu obrade. Na sledećem listingu
prikazana je rekurzivna ALFA-BETA procedura:
procedure AlphaBETA (position, depth, alpha, BETA):integer;
var …
{ Position – Tekuća pozicija }
{ Depth – Dubina u stablu odlučivanja }
{ Alpha – Gornja granica }
{ BETA – Donja granica }
begin
if (depth=0) then
begin
AlphaBETA:=Evaluate(Position); { Evaluacija terminalnog noda, izlaz iz procedure }
Exit;
end;
70
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
best: = -INFINITY;
{ Inicijalna vrednost }
succ: = Successors(Position); { Pronadji naslednika }
while ((not Empty(succ)) and ( best < BETA)) do { Traži dok nije iscrpljena lista naslednika i
dok je najbolja vrednost manja od gornje granice}
begin
position: = RemoveOne(succ);
{ Izbriši jednan potez iz liste }
if (best > alpha) then alpha: = best;
value: = -AlphaBETA(Position, depth-1, -BETA, -alpha);
{Rekurzivni poziv procedure sa vrednostima granica}
if (value > best) then best: = value; { Nova najbolja vrednost }
end;
AlphaBETA:= best; { Izlaz iz procedure, zapamćena je najbolja vrednost }
end;
Slika 4.12 Osnovna verzija ALFA-BETA rekurzivne procedure.
Poziv na osnovnom nivou se obavlja sa infinitezimalnim granicama:
val = AlphaBETA(position, 7, -INFINITY, INFINITY);
pri čemu je za dati slučaj dubina 7 polupoteza, ALFA= -infinity, BETA= +infinity.
Rezultat rada ALFA-BETA procedure je u svim slučajevima identičan rezultatu koji bi dala
upotreba klasične NegaMax procedure:
val = NegaMax(position,7);
Istraživanja pokazuju, da broj čvorova koji se generiše na nekoj dubini koristeći ALFA-BETA
algoritam iznosi:
Wd/2+Wd/2-1
Wd
za najpovoljniji slučaj,
za najnepovoljniji slučaj.
gde je:
W … prosečan broj izlaza iz čvora, u proseku oko 35 poteza u središnjici.
d … dubina.
Najpovoljniji slučaj je kada je redosled poteza perfektan, a najnepovoljniji kada je redosled
poteza inverzan - najbolji potezi se razmatraju na kraju liste. Jasno je da u najnepovoljnijem slučaju
ALFA-BETA algoritam prelazi u klasičan minimaks algoritam, koji razmatra sve nastavke u
svakom čvoru. Međutim, ako je postignuto perfektno uređenje redosleda nastavaka, ALFA-BETA
algoritam izuzetno dobija na efikasnosti. Kada je uređenje poteza idealno, algoritam generiše
najveći broj odsecanja. Posmatrajući predhodne formule koje su eksponencijalnog karaktera,
upotrebom ALFA-BETA algoritma može se postići dva puta veća dubina stabla za isto vreme
proračuna u odnosu na klasični pristup. Ova činjenica znači istovremeno i znatno pojačanje igre
kompjutera. Prve verzije autorovog šahovskog programa Geniss Axon koje su koristile samo
ALFA-BETA algoritam su na brzim AMD procesorima dostizale majstorsku snagu.
71
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
4.5.2
PVS procedura (Principal Variation Search)
PVS je efikasnija varijanta osnovnog ALFA-BETA algoritma za slučaj kada je uređivanje liste
poteza blizu perfektnog [Reinefeld, 1994], [Schaeffer, 1996]. U tom slučaju je najbolji nastavak u
svakom čvoru pozicioniran u prvih nekoliko poteza. Formiranjem glavne varijante u što je kraćem
mogućem vremenskom intervalu omogućava se supstitucija klasičnog rekurzivnog poziva sa
intervalom (ALFA,BETA) efikasnijom varijantom. PVS poziv je analogan klasičnom pozivu ali je
njegov interval maksimalno sužen i iznosi svega jedan evaluacini poen (ALFA,ALFA+1).
Rekurzivni poziv sa ovako suženim intervalom zapravo vrši sondiranje podstabla i određuje da li
izlazna vrednost dovoljna za promenu ALFA ili BETA granice. Ako jeste, ponavlja se poziv do iste
dubine ali sa punim intervalom (ALFA,BETA), a ako nije ide se na nastavak procedure bez
rekurzivnog poziva. Efikasnost procedure po nekim autorima je oko 10%, što znači da PVS u
proseku obrađuje 90% stabla koji obrađuje klasični ALFA-BETA algoritam. Na sledećem listingu
(Slika 4.13) prikazan je listing PVS procedure:
procedure PVS (position, depth, alpha, BETA):integer;
var FoundPvs :Boolean;
{ Position – Tekuća pozicija }
{ Depth – Dubina u stablu odlučivanja }
{ Alpha – Gornja granica }
{ BETA – Donja granica }
begin
FoundPvs := false;
{ Inicijalna vrednost za PVS flag }
if (depth=0) then
begin
PVS:=Evaluate(Position); { Evaluacija terminalnog noda, izlaz iz procedure }
Exit;
end;
best: = -INFINITY;
{ Inicijalna vrednost }
succ: = Successors(Position); { Pronađi naslednika }
while ((not Empty(succ)) and ( best < BETA)) do { Traži dok nije iscrpljena lista naslednika i
dok je najbolja vrednost manja od gornje granice}
begin
position: = RemoveOne(succ);
{ Izbriši jednan potez iz liste }
if FoundPvs then
{ Ako je vec prođena PVS varijanta, ostatak liste se samo verifikuje }
begin
value := - PVS (Position, depth - 1, -alpha - 1, -alpha);
if ((value > alpha) and (value < BETA)) then
value := - PVS(Position, depth - 1, -BETA, -alpha);
end
else value: = -PVS(Position, depth-1, -BETA, -alpha); { Rekurzivni poziv procedure sa
vrednostima granica}
if (value > best) then best: = value; { Nova najbolja vrednost }
if (best > alpha) then begin alpha: = best; FoundPvs:=true; end;
end;
PVS:= best; { Izlaz iz procedure, zapamćena je najbolja vrednost }
end;
Slika 4.13 Osnovna verzija Principal Variation Search rekurzivne procedure.
72
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Uz postojanje mehanizama koji obezbeđuje kvalitetno sortiranje poteza prema težini, PVS svoju
efikasnost duguje znatno bržem prolazu kroz podstablo zbog maksimalno suženog intervala. Na taj
način, već deo podstabala se samo verifikuje korišćenjem jedinične širine intervala. U slučaju da
redosled poteza u svakom čvoru u stablu nije perfektan, PVS tehnika gubi na svojoj efikasnosti, i
postaje čak manje efikasna od klasične ALFA-BETA tehnike zbog potrebe da se posle pogrešnog
sondiranja mora izvršiti ponovno traganje u stablu sa osnovnim intervalom.
4.5.3
Null-Move procedura
Jedna od novijih tehnika koja je uvedena u oblast programiranja logičkih igara je null-move
Null-move predstavlja danas najrasprostranjeniju tehniku
[Donninger, 1993], [Beal, 1989].
implementiranu u gotovo svakom šahovskom programu. Dobici u brzini rada sa stablom su
izuzetni, sa minimalnim bočnim efektima [Goetsch, 1988], [Goetsch, 1990]. Implementacija je
veoma jednostavna, svodi se na dodavanje nekoliko linija u osnovnom kodu ALFA-BETA/PVS
algoritma.
Osnovna ideja null-move algoritma proističe iz pretpostavke da strana koja je na potezu u
svakoj poziciji može da napravi pomak u evaluaciji odnosno da zadrži postojeću evaluaciju
ako je na potezu.
Drugim rečima, postavlja se pitanje da li protivnička strana može da napravi pomak u svojoj
evaluaciji ako joj strana koja je na potezu ustupi potez, ako se promeni redosled poteza. Ako
protivnička strana nije u mogućnosti da pojača svoju poziciju ni posle dva uzastopna poteza koja su
joj dozvoljena, onda se uopšte ne razmatraju dalji nastavci.
Implementacija null-move algoritma polazi od sledećih pretpostavki:
Pre početka obrade liste poteza vrši se probno null-move sondiranje. Prvo se promeni
redosled poteza, generišu null-move parametri, a zatim se izvrši sondiranje podstabla
naredbom value = - NULMOVE(depth - 1 - R, -BETA, -BETA + 1); Podstablo
se ispituje sa umanjenom dubinom. Najoptimalnija vrednost za R iznosi 2. Takođe, granice
su maksimalno sužene (BETA -1,BETA). Slično kao kod PVS tehnike, ovo ispitivanje daje
odgovor na pitanje da li u podstablu postoje varijante čija vrednost prevazilazi granicu
BETA. U slučaju da je izlazna vrednost iz null-move sondiranja veća ili jednaka od vrednosti
BETA odmah se izlazi iz procedure. To znači da protivnička strana uz dozvolu da povuče
dva uzastopna poteza ne može da generiše veću vrednost od one koju već ima u nekoj od
predhodnih grana u stablu, tako da je bespredmetno dalje ispitivati podstablo. Naravno, u
nekim slučajevima se dobija manja vrednost od BETA, što znači da u podstablu postoje
taktičke varijante koje protivničkoj strani daju mogućnost za preokret, tako da se mora
ponoviti traganje, ali ovoga puta sa osnovnim granicama (ALFA,BETA) i do pune dubine,
kao što je to slučaj u rekurzivnim ALFA-BETA/PVS algoritmima. U ovim slučajevima
postoji gubitak performansi, ali je on minimalan ako se uporedi sa dobitkom koji nastaje iz
ranih null-move sečenja. Ukupne performanse, naročito u taktičkim pozicijama ekstremno su
poboljšane.
Mora se ograničiti broj null-move poziva u podstablu. Svaki null-move poziv skraćuje
osnovnu dubinu, tako da bi niz null-move poziva koji bi bio aktiviran u seriji doveo do brzog
iscrpljivanja dubine podstabla. Postoje dva alternativna rešenja koja se upotrebljavaju, po
nekim autorima sa identičnom efikasnošču. Prvo rešenje je dozvola maksimalno dva nullmove poziva u seriji u svakom podstablu. Drugo rešenje je dozvola dva null-move poziva
između kojih mora da dođe do intervencije sa “realnim” ALFA-BETA potezom.
73
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Null-move tehnika se ne može primenjivati ako je strana na potezu u šahu. Dozvoliti dva
poteza strani koja već napada protivničkog kralja bi dovelo do neregularne pozicije.
U pojedinim pozicijama strana koja je na potezu mora da oslabi svoju evaluaciju bez obzira šta
igra. Ove pozicije se u teoriji šaha nazivaju pozicije iznudice “zugzwangs” [Plenkner, 1995].
Klasičan primer je iz završnice (Slika 4.14):
Slika 4.14 Ilustracija “zugzwang” pozicije za belog.
Bez obzira koji potez beli povukao doći će u goru poziciju nego što je trenutno. Na ovaj način
narušena je osnovna pretpostavka za primenu null-move tehnike i u ovoj poziciji ona se ne može
primeniti. Procenat pozicija iznudica naglo raste u završnici, kada dođe do smanjivanja broja figura
na tabli, tako da neki autori šahovskog softvera jednostavno isključuju null-move u samoj završnici,
kada broj figura bude manji od nekog definisanog minimuma. U središnjici, kada postoje više
desetina mogućih poteza u nekoj poziciji, stvaranje pozicije iznudice je veoma malo verovatno.
Stepen redukcije kod null-move tehnike je standardno R=2. Primena null-move tehnike sa
R=1 daje zanemarljivo malo uštede u broju čvorova u stablu, a po nekim autorima R=3
previđa suviše mnogo taktike. Međutim, neki istraživači ipak koriste R=3 jer daje znatno
veće uštede u stablu od R=2 tehnike. Prvi pokušaji za prelazak na R=3 javljaju se kod
Heinz-a koji koristi kombinovanu, adaptivnu tehniku null-move (adaptive null move) [Heinz,
1999a]. Ideja predviđa korišćenje standardne R=2 tehnike za rad sa dubinama stabla koje su
manje ili jednake od 6 polupoteza, a R=3 za ostatak stabla. Na ovaj način kombinuje se
značajna ušteda koju omogućava R=3 tehnika sa taktičkom sigurnošću koju pruža R=2.
Istraživanja pokazuju da kod dubine stabla od 8 polupoteza ušteda iznosi 10% u odnosu na
proceduru gde je R=2 fiksno. Kod dubine od 12 polupoteza, ušteda je 30%. Radom Tabibija i Netanzahu-ja pokušano je prevazilaženje problema iznudice za R=3 tako što je
predviđena verifikacija sa R=1 u određenim slučajevima, mahom u završnici. Istraživači
pokazuju da tehnika ima sve osobine izbegavanja grešaka u taktici koju poseduje R=2
tehnika dok su ukupne performanse bliže R=3 nego R=2 null-move proceduri. Moderna
istraživanja pokazuju da je, uz upotrebu ostalih tehnika za poboljšanje redosleda poteza kao
što je transpoziciona tabela ili history heuristika moguće izgraditi vrhunski program koji u
svim čvorovima u stablu koristi R=3 null-move sa verifikacijom u završnici. Taj pravac je
započeo programom Fruit a sledili su ga ostali programeri, tako da je danas preovlađajuća
orijentacija u šahovskom softveru.
74
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Na sledećem listingu prikazana je osnovna implementacija R=2 ALFA-BETA/PVS/Null-Move
algoritma:
procedure NULLMOVE (position, depth, alpha, BETA):integer;
const R = 2;
var FoundPVS :Boolean;
{ Position – Tekuća pozicija }
{ Depth – Dubina u stablu odlučivanja }
{ Alpha – Gornja granica }
{ BETA – Donja granica }
begin
FoundPVS := false;
{ Inicijalna vrednost za NULLMOVE flag }
if (depth=0) then
begin
NULLMOVE:=Evaluate(Position); { Evaluacija terminalnog noda, izlaz iz procedure }
Exit;
end;
GenerateNullMove;
value = - NULMOVE(depth - 1 - R, -BETA, -BETA + 1);
{ NullMove sondiranje }
ReturnNullMove;
if (value >= BETA) then { Ako je vrednost veća od gornje granice, izlaz }
begin
NULLMOVE:=BETA;
exit;
end;
best: = -INFINITY;
{ Inicijalna vrednost }
succ: = Successors(Position); { Pronadji naslednika }
while ((not Empty(succ)) and ( best < BETA)) do { Traži dok nije iscrpljena lista naslednika i
dok je najbolja vrednost manja od gornje granice}
begin
position: = RemoveOne(succ);
{ Izbriši jednan potez iz liste }
if FoundPVS then {Ako je već pronađena NULLMOVE varijanta, ostatak se samo verifikuje}
begin
value := - NULLMOVE (Position, depth - 1, -alpha - 1, -alpha);
if ((value > alpha) and (value < BETA)) then
value := - NULLMOVE(Position, depth - 1, -BETA, -alpha);
end
else value: = -NULLMOVE(Position, depth-1, -BETA, -alpha); { Rekurzivni poziv procedure sa
vrednostima granica}
if (value > best) then best: = value; { Nova najbolja vrednost }
if (best > alpha) then alpha: = best;
end;
NULLMOVE:= best; { Izlaz iz procedure, zapamćena je najbolja vrednost }
end;
Slika 4.15 Osnovna verzija Null MovePVS rekurzivne procedure.
75
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Po mnogim istraživačima, tehnika omogućava povećanje dubine traženja u stablu za 1-2
polupoteza u središnjici. Prikazani algoritam, uz pomoćne tehnike omogućava pisanje PC
orijentisanih programa koji imaju velemajstorsku snagu.
4.5.4
NegaScout procedura
NegaScout algoritam je usavršavanje ALFA-BETA procedure korišćenjem ideje za ubrzano
sondiranje sa minimalnim ALFA-BETA prozorom (ALFA,ALFA+1). Međutim sama ideja i
performanse ove procedure su gotovo identične ideji koja se koristi kod PVS algoritma koji je
objašnjen nešto ranije [Reinefeld, 1983], [Roizen, 1983], [Stockman, 1979]. Ako su posle sondiranja
ispunjeni uslovi za verifikaciju ona se obavlja ali sa skraćenim prozorom (-BETA,-t) na osnovu
rezultata t koji je generisala procedura za sondiranje. Algoritam je prikazan na sledećem listingu:
function NegaScout (p:position; depth,alpha, BETA:integer ):integer;
var a, b, t, i:integer;
begin
generate_move_list(p);
if (number_of_moves=0) or (depth=0) then
begin
NegaScout:=Evaluate(p);
{Terminalni čvor}
Exit;
end;
a:= alpha;
b:= BETA;
for i:= 1 to number_of_moves do
begin
t:= -NegaScout ( list_of_moves(i), depth-1, -b, -a ); {Sondiranje koda}
if (t>a) and (t<BETA) and (i>1) and (d<maxdepth-1) then
a: = -NegaScout ( p_i, depth-1, -BETA, -t );
{Ponovno traženje}
a: = max( a, t );
if ( a >= BETA ) then
begin
NegaScout:= a;
{Izlaz, (BETA Cut-off)}
exit;
end;
b = a + 1;
end;
NegaScout:=a;
{Podešavanje novog ALFA-BETA prozora}
end;
Slika 4.16 Osnovna verzija NegaScout rekurzivne procedure.
76
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Umesto NegaScout procedure, danas se uglavnom koristi PVS varijanta sondiranja sa gotovo
identičnim dobitkom na performasama.
4.5.5
MTD(f) procedura
Konvergentni MTD(f) algoritam je pokušaj da se izgradi efikasan program na bazi ekstremne
uštede u broju čvorova koji se postiže pozivanjem ALFA-BETA algoritma sa jediničnom širinom
prozora [Plaat, 1997]. Kao što smo već ranije napomenuli, slična tehnika sondiranja se koristi kod
PVS i NegaScout varijanti ALFA-BETA algoritma ali u potpuno drugačijem vidu i kontekstu. Kod
MTD(f) algoritma sondiranje sa jediničnom širinom prozora (BETA-1,BETA) ima zadatak
određivanja gornje ili donje granice u kojima se nalazi tražena evaluacija na određenoj dubini. Na
sledećem listingu prikazan je osnovni MTD(f) algoritam. Početne granice su –INFINITY i
+INFINITY. Svakim pozivom procedure AlphaBETAWithMemory određuje se gornja ili donja
granica i na taj način sužava interval za sledeće traženje. Algoritam završava potragu kada se donja
i gornja granica poklope, odnosno kada donja granica prevaziđe gornju. Na taj način algoritam
fokusira oblast u kojoj se nalazi tačna vrednost. U zavisosti od početne vrednosti za traženje kao
tekuće pozicije, procedura u proseku obavlja 5-20 iteracija. Pošto se svaka iteracija obavlja sa
jediničnom širinom opsega ukupno vreme je u proseku manje nego kod jedne klasične ALFABETA iteracije sa punom širinom opsega (ALFA,BETA).
Na sledećem listingu (Slika 4.17) prikazana je procedura koja fokusira oblast u kojoj se nalazi
evaluacija:
function MTDF(root:position; d:integer):integer;
var g,f:integer;
begin
g := f;
upperbound := +INFINITY;
lowerbound := -INFINITY;
repeat
if g=lowerbound then BETA := g + 1 else BETA := g;
g:= AlphaBETAWithMemory(root, BETA - 1, BETA, d);
if g< BETA then upperbound := g else lowerbound := g;
until lowerbound >= upperbound;
MTDF:=g;
end;
Slika 4.17 Osnovna MTD(f) procedura.
77
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Jezgro MTD(f) procedure prikazano je na sledećem listingu (Slika 4.18):
function iterative_deepening(root:position):integer;
var d,firstguess:integer;
begin
firstguess := 0;
for d:= 1 to MAX_SEARCH_DEPTH do
begin
firstguess:= MTDF(root, firstguess, d);
if times_up() then break;
end;
iterative_deepening :=firstguess;
end;
Slika 4.18 Metoda inkrementalnog povećavanja dubine primenjena na MTD(f) proceduru.
Obavlja se serija poziva osnovne procedure sa sve većom i većom dubinom, dok se ne dostigne
ciljna dubina. Postupak se u literaturi naziva inkrementalno povećavanje dubine i upotrebljava se u
gotovo svakom modernom programu. Procedura je veoma značajna jer omogućava da bez obzira
na dozvoljeno vreme za proračun, program ima najbolji potez do dubine do koje je završio proračun
u momentu prekida. Sa povećanjem dozvoljenog vremena, dubina do koje je program stigao se
povećava, a samim tim i kvalitet obavljene evaluacije i snaga igre. Predhodne iteracije generišu
korisne informacije u transpozicionoj tabeli tako da se svaka sledeća iteracija obavlja sa veoma
upotrebljivim podacima iz tabele, što je daleko efikasnije nego da se obavljaju iteracije bez
korišćena transpozicija.
Da bi MTD(f) tehnika postigla zadovoljavajući efikasnost u poređenju sa klasičnom ALFABETA tehnikom mora se predvideti velika količina operativne memorije za transpozicionu tabelu.
Varijanta ALFA-BETA algoritma koja radi sa transpozicionom tabelom prikazana je na sledećem
listingu (Slika 4.19):
function AlphaBETAWithMemory (n:position; alpha,BETA,d: integer) : integer;
begin
if retrieve(n) = OK then {Proveravanje transpozicione tabele}
begin
{Ako je cvor u tabeli
if n.lowerbound >= BETA then AlphaBETAWithMemory:= n.lowerbound;
if n.upperbound <= alpha then AlphaBETAWithMemory:=n.upperbound;
alpha:= max(alpha, n.lowerbound); {Odredjivanje granica}
BETA:= min(BETA, n.upperbound);
if d = 0 then g:= evaluate(n); {Terminalni čvor}
else if n = MAXNODE then
g := -INFINITY; a := alpha; {Snimanje originalne alpha vrednosti}
c := firstchild(n);
78
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
while (g < BETA) and (c <> NOCHILD) do {Generisanje vrednosti za sve naslednike}
begin
g := max(g, AlphaBETAWithMemory(c, a, BETA, d - 1));
a := max(a, g);
c := nextbrother(c);
end;
end
else
begin
g := +INFINITY; b := BETA; {Snimanje originalne BETA vrednosti}
c := firstchild(n);
while (g > alpha) and (c <> NOCHILD) do {Generisanje vrednosti za sve naslednike}
begin
g := min(g, AlphaBETAWithMemory(c, alpha, b, d - 1));
b := min(b, g);
c := nextbrother(c);
end;
{ Tradicionalni postupak za snimanje vrednosti u transpozicionu tabelu}
{ Fail low rezultat generiše gornju granicu }
if g <= alpha then n.upperbound := g; store n.upperbound;
{Pronalaze se korektne vrednosti za Alpha-BETA}
if g > alpha and g < BETA then
n.lowerbound := g; n.upperbound := g; store n.lowerbound, n.upperbound;
{ Fail high rezultat generise donju granicu }
if g >= BETA then n.lowerbound := g; store n.lowerbound;
exit;
end;
Slika 4.19 Varijanta ALFA-BETA algoritma sa korišćenjem transpozicione tabele.
Pošto MTD(f) tehnika predviđa stalno ponavljanje iteracija na istoj dubini sa različitim
granicama jasno je da se u traganju u velikom procentu prolazi kroz čvorove koji su ranije već bili
obrađeni. Na ovaj način, transpoziciona tabela dostiže maksimalnu efikasnost jer omogućava da se
višestruko koriste isti memorisani čvorovi čime se značajno dobija na performansama. MTD(f)
algoritam je potvrđen i implementiran u nekoliko programa koji dostižu majstorsku snagu.
Eksperimentišući sa ovim tipom algoritma, otkriven je značaj rezolucije evaluacione funkcije na
efikasnost algoritma. Naime, kod grubo granuliranih evaluacionih funkcija primećeno je
79
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
poboljšanje performansi u odnosu na evaluacionu funkciju sa većom rezolucijom. Pod rezolucijom
evaluacione funkcije podrazumeva se minimalno rastojanje između dve susedne evaluacije. Ako je
to rastojanje 0.1 vrednosti pešaka, MTD(f) algoritam radi efikasnije nego za slučaj kada je
minimalno rastojanje 0.01.
4.5.6
ProbCut i MultiProbeCut procedure
ProbCut predstavlja novu klasu procedura koji uštedu u vremenu baziraju na preliminarnom
sondiranju ostatka podstabla sa smanjenom dubinom i jediničnom širinom osnovnog prozora. Ideja
je slična onoj koja se javlja u null-move proceduri. Međutim, ProbCut algoritam ne menja redosled
poteza prilikom sondiranja i ima druge uslove za izlazak. Po definiciji, ako je rezultat sondiranja sa
dubinom d’<d i jediničnom širinom prozora (ALFA,ALFA-1) van opsega (ALFA,BETA) kao
rezultat se vraća viša granica (BETA). Ako je vrednost sondiranja unutar granica (ALFA,BETA)
ponavlja se sondiranje do normalne dubine sa intervalom (ALFA,BETA). Slično kao kod null-move
tehnike, ukupna ušteda koja se javlja kada se ne izvrši traganje do pune dubine prevazilazi suvišan
rad kada se ponavlja traganje. Buro je otkrio da je funkcija vrednosti koju generiše probno
sondiranje na dubini d’ u linearnoj vezi sa izlazom dobijenim normalnim traganjem do dubine d.
Ova veza se može predstaviti linearnom funkcijom:
v=a*v’+b+e
gde je:
v … Vrednost dobijenja normalnim traganjem do dubine D.
v’ … Vrednost dobijena traganjem do dubine d’, sa jediničnom širinom prozora.
a,b … Parametri,
e … Normalna greška.
Parametri a i b se određuju proceduralno i zavise od mnogih faktora koji su upotrebljeni u
realizaciji algoritma za traženje, evaluacione funkcije i dr.
MultiProbCut podrazumeva korišćenje više različitih parametara za podešavanje konstanti a i b
u raznim fazama igre. Na žalost, funkcije konstanti a i b je teško teoretski odrediti za sve faze igre
tako da je to moguće uraditi jedino empirijskim metodama.
Eksperimentalno je dokazano da ProbeCut metoda ne daje bolje rezultate u odnosu na nullmove u praktičnoj igri, a da ima veliki nedostatak u smislu potrebe da se empirijskim putem odrede
konstante a i b. Usavršena verzija tehnike MultiProbeCut je obećavajuća, i uspešno primenjena u
nekim novijim aplikacijama.
Generalni problem koji se javlja kod svih tehnika koje imaju skraćivanje dubine i sondiranje sa
jediničnim intervalom je postojanje mogućnosti da se previdi neka taktička varijanta koja se javlja
na horizontu, odnosno da se odbaci neki dobar potez za koji je potrebna veća dubina da bi se
pokazalo da ima dominantu evaluaciju. Ovi problemi predstavljaju faktor rizika u primeni ovih
tehnika ali se oni višestruko kompenzuju značajnom uštedom u broju čvorova u fazi proračuna čime
se povećava osnovna dubina proračuna.
80
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
4.5.7
Quiescence procedura
Po definiciji, evaluaciona funkcija se primenjuje u terminalnim čvorovima u stablu [Beal, 1990],
[Althöfer, 1991]. Korišćenjem algoritama za traženje koji sadrže u sebi implementiranu minimaks
proceduru, vrednosti se prolongiraju u inverznom smeru kroz stablo do osnovnog čvora. Još u
najranijim fazama kompjuterskog šaha uočen je značajan negativni efekat koji može da se javi u
fazi evaluacije završnih čvorova. Efekat je nazvan horizontski efekat zato što se javlja prilikom
pokušaja evaluacije pojedinih dinamičkih pozicija. Kao primer, neka je potrebno evaluirati poziciju
koja je data na sledećem dijagramu (Slika 4.20):
Slika 4.20 Na dijagramu je prikazana dinamička pozicija koju je potrebno evaluirati.
Primenom statičkog evaluatora nad ovom pozicijom, gde je materijal u potpunosti identičan za
belog crnog, evaluacija bi bila veoma blizu 0.00. Međutim, ako se imaju u vidu dinamički
parametri bilo da je na potezu beli ili crni, jasno je da se beli pešak na E3 ne može spasiti, i da posle
gubitka tog pešaka beli prelazi u veoma tešku poziciju: materijalna evaluacija je –1.00, crni dobija
jakog branjenog slobodnog pešaka po e liniji, beli pešak na F4 postaje veoma ranjiv … Dakle, sa
ostalim parametrima evaluacija pozicije nastale posle uzimanja se može slobodno aproksimirati na
–2.00 do –2.5. Jasno je da je pokušaj evaluacije pozicije koja nije statičkog tipa doveo do značajne
greške, što može biti odlučujuće za završnu ocenu i selekciju najboljeg poteza. U praktičnoj
šahovskoj partiji, u svakoj fazi proračuna generiše se veoma veliki broj nestabilnih, dinamičkih
pozicija tako da primena prikazanih algoritama po definiciji ne bi dovela do realizacije uspešnog
šahovskog programa.
Rešenje za problem horizontskog efekta je u primeni posebne procedure umesto evaluatora u
fazi obrade terminalnog čvora. Procedura se u literaturi naziva quiescence tragač. Algoritam
predstavlja klasičan ALFA-BETA tragač sa nešto izmenjenom logikom nalaženja najboljeg
nastavka. Procedura funkcioniše na sledeći način:
U svakom čvoru koji se generiše primenom quiescence tragača obavlja se evaluacija [Kaindl,
1982]. Ako je vrednost evaluacije veća ili jednaka ulaznoj promenjivoj BETA, odmah se izlazi iz
procedure. U svakom čvoru se, koristeći heuristički generator, određuje lista poteza koji mogu
poboljšati postojeću evaluaciju. To su najčeće potezi koji predstavljaju uzimanje protivničkih figura
(capture), neki šahovi i promocije. Svaki od tih poteza se razmatra pozivajući rekurzivno
quiescence proceduru. Ako je povratna vrednost veća od promenjive BETA izlazi se iz procedure, a
ako ne onda se postupak ponavlja ali sa poboljšanom vrednošću za ALFA. Kako potezi u kojima se
81
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
uzima protivnička figura predstavljaju u najvećem broju slučajeva izvor nestabilnosti pozicije,
njihovim proračunom se ove dinamičke karakteristike uspešno razrešavaju. Ako u poziciji nema
oštrih nastavaka iz grupe poteza koju smo pomenuli, direktno se primanjuje evaluacija. Na taj
način, u svakom čvoru, se strani koja je na potezu nudi mogućnost da zadrži ili poboljša svoju
evaluaciju. Završne pozicije se evaluiraju statičkim evaluatorom. Na taj način, ova funkcija
premošćuje problem horizontskog efekta ne uvodeći dodatne heuristike čime se nivo igre programa
značajno poboljšava. Na žalost, uvođenje quiescence procedure, koja u svakom čvoru poziva sporu
evaluacionu funkciju, dovodi do značajnog pada ukupne brzine rada programa i prosečnog
primarnog nivoa. Potrebno je veoma precizno podesiti ravnotežu između količine znanja, brzine i
broja poteza koji se razmatraju u ovoj proceduri da bi se došlo do najboljih performansi [Schrüfer,
1989].
Na sledećem listingu (Slika 4.21) predstavljen je osnovni oblik procedure:
procedure Quiescence (position, alpha, BETA):integer;
var …
{ Position – Tekuća pozicija }
{ Alpha – Gornja granica }
{ BETA – Donja granica }
begin
value:=evaluator(position)
if (value >= BETA) then
begin
Quiescence:=BETA;
exit;
end;
{ Evaluacija tekuće pozicije }
{ Ako je vrednost veća od gornje granice, izlaz }
if (value > alpha) then alpha = value; { Nova vrednost za alpha promenjivu }
GenerateCaptures();
while (CapturesLeft) do { Za svaki elemenat iz liste izmena generiši granu }
begin
GenerateNextCapture;
value := -Quiescence(-BETA, -alpha);
{ Rekurzivni poziv Quiescence procedure }
UnmakeMove;
if (val >= BETA) then begin quiescence:=BETA; exit; end;
if (val > alpha) then alpha = value;
end;
{ Izlaz }
quiescence:=alpha;
end;
Slika 4.21 Osnovni oblik Quiescence rekurzivne procedure.
Prikazana procedura razmatra samo poteze koji uzimaju druge figure (captures). Značajna
povoljna okolnost kod quiescence procedure koja razmatra samo razmenu figura je auto-redukcija
82
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
izlaza odnosno auto-regulacija kombinatorne eksplozije. Naime, svaka izmena umanjuje broj figura
na tabli za jedan. Posle serije izmena figura dolazi se do kvazi-statičnih pozicija u kojima nema više
aktivnih razmena figura i nad kojima se može primeniti procedura statičkog evaluatora. Međutim,
veoma značajno je u ovoj proceduri razmotriti i nastavke u kojima je jedna strana u šahu, jer je u
mnogim varijantama u pitanju mat [Beal, 1984]. Procedura koja razmatra šahove koji su nastali
posle uzimanja neke figure i otkriva matove prikazana je na sledećem listingu (Slika 4.22):
procedure QuiescenceCheck (position, alpha, BETA):integer;
var …
{ Position – Tekuća pozicija }
{ Alpha – Gornja granica }
{ BETA – Donja granica }
begin
if (NodeIsInCheck) then { U slučaju da je u terminalnom čvoru kralj u šahu … }
begin
quiescence:=quiescence(1, alpha, BETA);
exit;
end;
if (value >= BETA) then { Ako je vrednost veća od gornje granice, izlaz … }
begin
NULLMOVE:=BETA;
exit;
end;
if (value > alpha) then alpha = value; { Nova vrednost za alpha promenjivu }
GenerateCaptures();
while (CapturesLeft) do { Za svaki elemenat iz liste izmena generiši granu }
begin
GenerateNextCapture;
value := -QuiescenceCheck(-BETA, -alpha); { Rekurzivni poziv QuiescenceCheck
procedure }
UnmakeMove;
if (val >= BETA) then begin QuiescenceCheck:=BETA; exit; end;
if (val > alpha) then alpha = value;
end;
QuiescenceCheck:=alpha;
end;
{ Izlaz }
Slika 4.22 Osnovni oblik QuiescenceCheck rekurzivne procedure.
Po mnogim autorima, sa primenom šahova u quiescence proceduri treba biti veoma oprezan jer
se u velikom procentu radi o potpuno beskorisnim potezima, koji ne mogu pobošati evaluaciju a
dovode do značajnog povećanja broja obrađenih čvorova.
83
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
4.5.8. MVV/LVA i SEE procedure
Veoma značajno pitanje koje je potrebno rešiti je način sortiranja liste poteza koje je potrebno
obraditi u svakom čvoru. Dve vodeće tehnike koje se upotrebljavaju su: MVV/LVA (Most Valuable
Victim/Least Valuable Attacker) i SEE (Static Exchange Evaluation).
MVV/LVA tehnika se koristi za grubo sortiranje liste poteza prema očekivanom materijalnom
dobitku. Tako će uvek potez koji uzima protivnički damu da ima veću vrednost od poteza koji
uzima protivničkog pešaka. U slučaju da postoji više figura koje mogu da uzimaju istu protivničku
figuru, prvo se obrađuje onaj nastavak koji podrazumeva minimalne materijalne troškove. Na
primer, ako na raspolaganju imamo potez PxQ (pion uzima damu) on će biti u listi poteza ispred
poteza QxQ (dama uzima damu). Ova tehnika ne uzima u obzir činjenicu da protivničke figure
mogu biti branjene ali se jednostavno implementira i radi veoma brzo.
Kao ilustraciju prikazaćemo primer formiranja liste poteza u poziciji sa slike 4.23 korišćenjem
MVV/LVA tehnike.
Slika 4.23 Redosled poteza primenom MVV/LVA procedure.
Redosled poteza je: (QxQ, PxN, NxN, RxP).
SEE tehnika je kompleksnija od MVV/LVA i podrazumeva predviđanje ishoda serije razmene
figura. Procedura aproksimira rezultat serije izmena figura bez potrebe da se poziva quiescence
procedura. Za razliku od predhodno izložene tehnike, ako je protivnička figura koja se uzima,
branjena od strane neke druge protivničke figure, ta činjenica se uzima u obzir. Na naj način se
znatno realnije predviđa ishod serije razmena figura i samim tim značajno poboljšava redosled
poteza koji se razmatraju. Na slici 4.24 prikazana je identična pozicija onoj sa slike 4.23, ali se sada
u obradi koristi SEE umesto MVV/LVA tehnike:
84
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Slika 4.24 Redosled poteza primenom SEE tehnike.
Redosled poteza primenom SEE tehnike: (PxN, RxP, QxQ, NxN). Redosled poteza koji
generiše i redosled obrade podstabla se razlikuje u odnosu na MVV/LVA tehniku. Imajući u vidu i
anticipirane gubitke sa svoje strane, sortiranje poteza je znatno kvalitetnije i u kasnijoj fazi generiše
znatno veći broj sečenja u stablima quiescence procedure. U nekim starijim programima, SEE se
koristila za aproksimaciju dinamičke evaluacije u terminalnim čvorovima bez pozivanja quiescence
procedure, ali se u novijim verzijama od toga odustalo jer primena tehnike na ovakav način generiše
suviše taktičkih previda. Sa druge strane, SEE procedura je znatno sporija od MVV/LVA procedure
što se odražava na ukupnu NPS (node per second) karakteristiku programa. Ipak, u većini modernih
programa koristi se skoro isključivo SEE.
4.6 Pomoćne procedure i heuristike
U nastavku rada razmotrićemo neke od značajnih pomoćnih procedura koje se u nekom svom vidu
nalaze implementirane u većini modernih šahovskih aplikacija.
4.6.1
Inkrementalno povećavanje dubine stabla (Iterative Deeping)
Inkrementalno povećavanje dubine stabla je osnovna metoda koja se koristi u vremenski limitiranim
uslovima šahovske partije, kada su u pitanju realni turniri i mečevi. Igrajući partije sa ograničenim
vremenskim resursima izuzetno je bitno da kompjuter u svakom momentu, kada se to zatraži, ima
spreman potez koji može da se odigra. Korišćenje standardne metode sa fiksnom dubinom
proračuna ne zadovoljava ove zahteve iz jednostavnog razloga što na primer proračun u središnjici
na dubini 12 polupoteza može da traje nekoliko minuta. Za period trajanja proračuna kompjuter
nema na raspolaganju potez koji može da odigra što je naročito nepovoljno u partijama sa kraćom
vremenskom kontrolom. Veoma lako je grubo proračunati dodatni procenat vremena koji je poteban
za generisanje svih predhodnih nivoa. Ako pretpostavimo da u svakoj poziciji u proseku ima 35
izlaza, ukupan broj čvorova koje se moraju ispitati u stablu do nivoa d je:
N(1..d)=1+35+352+353+354+….+35d=(35d+1-1)/(35-1)=(35d+1+1)/34
Odnos broja svih čvorova koji su generisani do nivoa d i broja čvorova generisanih na
poslednjem nivou iznosi približno:
Nd+1/N(1..d) = 1/34
85
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
To znači da suma svih čvorova na predhodnim nivoima iznosi samo oko 3% broja čvorova na
poslednjem nivou, tako da korišćenje tehnike iterativnog povećavanje dubine ne može značajno da
utiče na porast broja čvorova. Procedura za inkrementalno povećavanje dubine je veoma
jednostavna i prikazana je na sledećem listingu (Slika 4.25):
Procedure Iterative;
begin
for depth:= 1 to InfiniteDepth do
begin
val: = AlphaBETA(depth, -INFINITY, INFINITY);
if TimedOut() then exit;
end;
end;
Slika 4.25 Listing procedure za realizaciju tehnike inkrementalnog povećavanja dubine stabla.
Zapravo kroz seriju iteracija sa sve većom i većom dubinom, pošavši od dubine 1, pojačava se
snaga najboljeg poteza. Sa druge strane, u svakom momentu program na raspolaganju ima najbolji
potez koji je do tada generisan na nekoj određenoj dubini, i koji može da se odigra. Zbog korišćenja
transpozicionih tabela u kojima svaka iteracija ostavlja rezultate proračuna, svaka sledeća iteracija
polazi od generisanih informacija od strane predhodne iteracije, čime se značajno ubrzava proračun
na novoj dubini [Beal, 1996]. Ovo je naročito značajno za tretiranje najboljih poteza kroz
transpozicione tabele. U velikom broju slučajeva najbolji potez na dubini d je istovremeno i najbolji
potez na dubini d+1, tako da ova tehnika u sprezi sa TT daje veliki broj sečenja i omogućava visoku
efikasnost procedure.
4.6.2
Minimal Window Search procedura
Korišćenje klasičnih ALFA-BETA procedura sa jediničnom širinom prozora (BETA-1,BETA)
omogućava najveći broj sečenja u podstablima. Ove granice ne dopuštaju izbor najboljeg poteza
kao ni određivanje tačne evaluacije ali se mogu iskoristiti za sondiranje podstabala i određivanje
donje ili gornje granice konačne evaluacije. Kao što smo to već detaljno obradili u prošlim
poglavljima, princip minimalnog prozora se u nekom od oblika javlja u mnogim naprednim
tehnikama za traženje po stablu: Null-Move, PVS, NegaScout, ProbeCut, MTD(f).
4.6.3
Aspiration Window Search procedura
Ideja koja se koristi kod tehnike očekivanog rezultata (Aspiration Window Search, slika 4.26) je u
principu vezana za činjenicu da se broj obrađenih čvorova kod ALFA-BETA algoritma značajno
smanjuje u funkciji sužavanja ulaznog (ALFA,BETA) intervala. Ova tehnika se primenjuje
prilikom obrade osnovnog čvora u sprezi sa tehnikom iterativnog produbljavanja tako što se u
sledećoj iteraciji koristi vrednost predhodne evaluacije kao baza za određivanje (ALFA,BETA)
intervala. U sledeću iteraciju se ulazi sa vrednošću intervala koja oko rezultata predhodne evaluacije
varira za određenu vrednost, najčešće dve-tri vrednosti pešaka. Na sledećem listingu (Slika 4.26)
prikazan je kod za osnovni vid procedure:
86
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
procedure AspirationIterativeDeeping;
const ValueWindow:=50;
begin
alpha:= -INFINITY;
BETA:= INFINITY;
for depth:= 1 to InfiniteDepth do
begin
val = AlphaBETA(depth, alpha, BETA);
if TimedOut() then exit;
if ((val<=alpha) or (val>=BETA)) then {Ponavljanje procedure sa punom širinom}
begin
alpha = -INFINITY;
BETA = INFINITY;
end else
begin
alpha = val - ValueWindow; {Odredjivanje ALFA/BETA prozora}
BETA = val + ValueWindow;
end;
end;
Slika 4.26 Implementacija tehnike (Aspiration Window Search).
Dakle, prvi ulaz u proceduru je sa suženim intervalom (val-ValueWindow,val+ValueWindow) čime sa
zapravo vrši sondiranje stabla sa ALFA-BETA intervalom koji je širine 2*ValueWindow. U slučaju
da je rezultujuća vrednost van opsega alpha,BETA ponavlja se traganje ali sa punom vrednošću
intervala ALFA,BETA. Princip uštede koji se ekploatiše ovim pristupom se zapravo bazira na
relativnoj stabilnosti evaluacije pri promeni iteracija. Zbog toga se u velikom procentu već u
postupku sondiranja dobija vrednost koja je u opsegu ALFA,BETA čime potreba za pretragom u
širem opsegu postaje bezpredmetna.
4.6.4
Glavna transpoziciona tabela
Transpoziciona tabela predstavlja konačnu memorijsku hash tabelu. Ako se stablo odlučivanja
posmatra kao graf, transpoziciona tabela pamti informacije o čvorovima koji su već ispitani i koji se
mogu iskoristiti u kasnijim fazama pretrage. Svakom čvoru u stablu se pridružuje odgovarajuće
polje u transpozicionoj tabeli sa sledećim informacijama:
64 bitni ključ,
najbolji potez u poziciji,
dubina,
vrednost ALFA/BETA,
flegovi.
Kapacitet jednog polja u transpozicionoj tabeli je najčešće 12-16 bajtova. U praktičnoj igri
koriste se traspozicione tabele sa više miliona čvorova. Korisne funkcije koje pruža pravilna
implementacija transpozicione tabele su višestruka:
U završnicama sa malim brojem figura, procenat pogotka u transpozicionoj tabeli je
ekstremno visok. Svaka pozicija u transpozicionoj tabeli ima smeštene karakteristične
vrednosti tako da ako dođe do uspešne identifikacije pozicionog ključa vrednosti se uzimaju
87
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
direktno iz memorije, čime se kompletno podstablo koje proističe iz tog čvora uopšte ne
razmatra. Na taj način se eliminiše suvišan rad kod čvorova kod kojih je poznata konačna
evaluacija. Posmatrajmo primer sa slike 4.27. Skakač koji se nalazi na F3 može stići na dva
načina na F7, preko polja E5 i G5. Putevi skakača su u stablu odlučivanja predstavljeni kao dve
različite grane.
Slika 4.27 Početna pozicija. Skakač sa F3 može stići na dva načina do F7.
Finalna pozicija, koja je identična nezavisno od načina na koji se stiže u završni čvor, je
prikazana na slici 4.28. Do finalne pozicije se stiže kroz dve različite grane u stablu:
1. Se5 a5 2. Sf7#
2. Sg5 a5 2. Sf7#
Slika 4.28 Završna pozicija.
Ako se do finalne pozicije dođe u prvom prolazu jednom granom, prilikom drugog prolaza nije
više potrebno ispitivati posebno poziciju, ona se već nalazi u tabeli. Ovaj korisni efekat
transpozicione tabele veoma je izražen u otvaranju i završnici gde se do mnogih pozicija stiže preko
raznih varijanti. Pošto je većina figura u otvaranju na svojim početnim pozicijama, većina pozicija
je slična, tako da je i procenat uspešnog pogotka u transpozicionoj tabeli maksimalan.
88
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
U središnjici je značajniji efekat korišćenja ALFA/BETA granica koje su smeštene u
transpozicionoj tabeli. U slučaju da nisu ispunjeni uslovi za potpunu supstituciju podstabla
sa vrednošću iz transpozicione tabele ALFA/BETA vrednost se može iskoristiti za
sužavanje postojećeg ALFA-BETA intervala kojim se poziva rekurzivna funkcija, čime se
posredno smanjuje broj čvorova koji su generisani u podstablu.
Najbolji potez koji je takođe smešten u tabeli se dodaje na prvo mesto u listi poteza koji će
se razmatrati. Kako postoji direktna korespodencija između najboljih poteza na nivou d-1 i
d, u najvećem broju slučajeva potez iz transpozicione tabele predstavlja zapravo najbolji
potez u datoj poziciji. Na taj način, transpoziciona tabela pozitivno utiče na formiraje
najboljeg redosleda poteza, čime značano povećava broj sečenja u stablu.
Implementacija transpozicione tabele je veoma jednostavna i zahteva minimalne intervencije na
postojećem kodu da bi se iskoristile sve prednosti ove tehnike. Na sledećem listingu prikazani su
implementacioni detalji u osnovnom vidu ALFA-BETA procedure (Slika 4.29):
procedure AlphaBETA (position, depth, alpha, BETA):integer;
var …
{ Position – Tekuća pozicija }
{ Depth – Dubina u stablu odlučivanja }
{ Alpha – Gornja granica }
{ BETA – Donja granica }
hashf: hashtzpe;
begin
hashf:= hashfALPHA;
val=(ProbeHash(depth,ALFA,BETA);
if (val<> valUNKNOWN) then
begin
ALFA-BETA:=val;
exit;
end;
{Vrednost u hash memoriji je nepoznata}
if (depth=0) then
begin
AlphaBETA:=Evaluate(Position); { Evaluacija terminalnog noda, izlaz iz procedure }
RecordHash(depth, val, hashfEXACT);
Exit;
end;
best: = -INFINITY;
{ Inicijalna vrednost }
succ: = Successors(Position); { Pronadji naslednika }
while ((not Empty(succ)) and ( best < BETA)) do { Traži dok nije iscrpljena lista naslednika i
dok je najbolja vrednost manja od gornje granice}
begin
position: = RemoveOne(succ);
{ Izbriši jednan potez iz liste }
if (best > alpha) then alpha: = best;
value: = -AlphaBETA(Position, depth-1, -BETA, -alpha);
{Rekurzivni poziv procedure sa vrednostima granica}
89
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
if (value > best) then
begin
best: = value; { Nova najbolja vrednost }
hashf:=hashfEXACT;
end;
end;
AlphaBETA:= best; { Izlaz iz procedure, zapamćena je najbolja vrednost }
end;
Slika 4.29 Osnovna verzija ALFA-BETA rekurzivne procedure sa transpozicionom tabelom.
Važan problem u vezi sa transpozicionom tabelom je politika smeštanja vrednosti u memoriju. U
teoriji su poznata dva pristupa:
Prva šema memorisanja (“always replace”) veoma je jednostavna. Svaki novi element u
tabeli se pamti na mesto postojećeg elementa, bez obzira na stanje koje postoji u TT.
Druga šema memorisanja (“replace if same depth or deeper”) uzima u obzir dubinu novog
elementa kao i onog postojećeg u memoriji. U slučaju da noviji čvor ima veću ili jednaku
dobinu od postojećeg vrši se zamena. Na taj način se omogućava da viši čvorovi, koji su
bliži osnovnom čvoru, imaju prednost i dominantnu ulogu.
Teoretska i praktična istraživanja u ovoj oblasti nisu dala prednost ni jednoj od prikazane dve
metode. Neki autori, kao što je Ken Thompson, predviđaju korišćenje oba pristupa simultano.
Korišćenje dve transpozicione tabele paralelno, između ostalog omogućava sigurniji rad jer se
poboljšava faktor pogodka u ukupnom sistemu i stvara mogućnost da se pamte dva najbolja poteza
umesto jednog. Na taj način se još više poboljšava kvalitet uređenja redosleda poteza. Korišćenjem
transpozicione tabele postižu se značajne uštede u broju čvorova u stablu. U zavisnosti od pozicije,
uštede se kreću od 50% pa do 95%.
4.6.5
ETC (Enhanced Transposition Cutoff) tehnika
Ako se u programu koristi transpoziciona tabela, kako je to prikazano u predhodnom delu rada,
pruža se mogućnost za primenu još jedne tehnike koja može generisati značajan broj redukcija u
stablu [Plaat, 1996]. Korišćenje ETC tehnnike prikazano je na slici 4.30:
Slika 4.30 Transformacija jednog dela stabla u drugo (Plaat, 1996).
90
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Pretpostavimo da se u stablu trenutno obrađuje čvor N. Po redosledu poteza, iz čvora N je prvo
potrebno obraditi nastavak B, čije je podstablo prikazano na slici 4.30. Pretpostavimo dalje da
nastavak C koji vodi iz čvora N transponuje novu poziciju u poziciju A, koja je već obrađena u
nekom delu stabla. Ako se iz transpozicione tabele preuzmu vrednosti ALFA i BETA parametara za
poziciju A, i ako su te vrednosti dovoljne da izazovu sečenje u čvoru N, onda nije ni potrebno
obrađivati ni jedan nastavak iz čvora N. Naravno, uvođenje ove tehnike podrazumeva značajno
povećavanje vremena koje se troši na obradu pojedinog čvora, ali je rešenje pronađeno u primeni
ETC metode za nivoe koji su manji od vrednosti dubine umanjenoj za 2. Na taj način, korišćenje
ETC tehnike se izbegava na nivoima stabla na kojima ne mogu doneti značajne uštede i zadržava se
visoka osnovna brzina rada. Uštede koje se postižu su po nekim rezultatima su 8% za stabla dubine
5 polupoteza i 20% za stabla dubine 9.
4.6.6
History heuristika
History heuristika [Schaeffer, 1983], [Schaeffer, 1989] je veoma značajna tehnika, koja je kod
modernih programa gotovo nezaobilazna. Ova heuristika koristi istoriju najboljih poteza. Tehnika je
veoma jednostavna i primenjiva za sve vidove algoritama.
U prvim fazama razvoja šahovskih programa smatralo se da je za izgradnju efikasnog ALFABETA algoritma potrebno ugraditi dosta heurističkog znanja u generatorsku funkciju kako bi se
omogućio što kvalitetniji redosled poteza. Ranije smo napomenuli, da je za visoku efikasnost rada
ALFA-BETA algoritama od osnovnog značaja da se u razmatranje prvi uzimaju najbolji potezi
kako bi se postigao što je moguće veći broj sečenja u stablu. Povoljna okolnost je što greške koje se
mogu napraviti u implementaciji redosleda poteza ne utiču na izbor najboljeg poteza već samo na
vreme proračuna. Sa druge strane, nepovoljna okolnost je što povećanje heurističkog znanja u
generatorskoj funkciji dovodi do smanjivanja NPS faktora i samim tim degradira dubinu koju
program postiže za određeni vremenski interval.
Veoma značajan rezultat je da se sortiranje poteza koje se obavlja na osnovu istorije
najboljih poteza bez korišćenja dodatnog heurističkog znanja u generatorskoj funkciji može
sa uspehom zameniti heuristički generator poteza.
Funkcionisanje history heuristike i način implementacije u klasičnom ALFA-BETA algoritmu
je prikazan na listingu sa slike 4.31.
Za implementaciju ove tehnike mora se predvideti hash tabela koja registruje najbolje poteze
prilikom završetka obrade svakog čvora. Način pristupa ovoj strukturi podataka je karakterističan.
Naime, binarna definicija poteza koristi se kao indeks za pristup tabeli HistoryTable[moves[m]];
Vrednosti u history tabeli predstavljaju istovremeno težine po kojima se odabiraju potezi. Funkcija
kojom se uvećava sadržaj history tabele zavisi od dubine na kojoj se nalazi čvor koji generiše
pristup. Funkcija je eksponencijalne prirode HistoryTable[bestmove] := HistoryTable[bestmove] +
2depth; tako da čvorovi koji su bliže osnovnom čvoru najviše utiču na težinu svakog poteza, jer
podstablo na osnovu kog je formirana težina ima najveću lokalnu dubinu. History hash tabela
omogućava slobodan prenos informacija od nižih ka višim čvorovima i obrnuto sa maksimalnom
mogućom brzinom pristupa.
91
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
function ALFA-BETA ( P:position; ALFA,BETA,depth:integer):integer;
var
bestmove, score, width, m, result : integer;
moves,rating: arraz[1..MAX_WIDTH] of integer;
begin
if depth=0 then return(evaluate(p)); {terminalni čvor}
width:=GenerateMoves(moves);
{Dodeljivanje History vrednosti svakom potezu }
for m:=1 to width do rating[m]:=HistoryTable[moves[m]];
sort(moves,rating);
score:=-infinite;
for m:=1 to width do
begin
{Rekurzivni poziv ALFA-BETA procedure}
result:=-ALFA-BETA(p.moves[m], -BETA, -ALFA, depth-1);
if result>score then result:=score;
{Dodeljivanje najbolje vrednosti}
{Proveravanje da li postoje uslovi za BETA cut-off}
if score>=BETA then
begin
{Uslovi za sečenje stabla. Nije potrebno dalje razvijati podstablo}
bestmove:=moves[m];
goto done;
end;
ALFA:=MAX(ALFA,score);
end;
done:
HistoryTable[bestmove] := HistoryTable[bestmove] + 2depth;
return(score);
Slika 4.31 Implementacija history heuristike.
History tabela omogućava poboljšanje programa na dva načina:
Smanjivanjem vremena potrebnog za rad generatorske funkcije,
Poboljšanjem redosleda poteza.
Za razliku od transpozicione tabele koja omogućavanje izdvajanje samo jednog najboljeg
poteza, history tabela, čija je implementacija prikazana, poboljšava redosled ostalih poteza,
92
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
približujući stablo definiciji perfeknog stabla. Pošto se history tabela dinamički menja, sa
povećavanjem dubine proračuna i vrednosti u tabeli su sve upotrebljivije.
History tabela u kombinaciji sa transpozicionom tabelom pruža najbolje mogućnosti za
optimalno uređenje liste poteza. Liste poteza koje se dobijanju korišćenjem kombinacije ove dve
tehnike su bliske perfektnoj listi. Kao što je već pomenuto, heurističko znanje se u ovim
slučajevima koncentriše samo u evaluacionoj funkciji, nije potrebno da se ono implementira i u
generatoru poteza.
4.6.7
Killer heuristika
Najbolji potezi u nekoj poziciji izazivaju najveći broj sečenja su stablu utiču na sadržaj
transpozicione i history tabele [Akl, 1977]. Prilikom istraživanja u vezi sa stablom odlučivanja u
šahu pokazano je da su u velikom broju slučajeva najbolji potezi na nivou d istovremeno i najbolji
na nivou d+2. Prilikom obrade stabla pamte se najbolji potezi na svakom nivou. Na nivou koji je za
dva polupoteza ispod osnovnog najbolji potez (killer) sa predhodnog nivoa ubacuje se na poziciju
broj dva u listi poteza, odmah iza najboljeg transpozicionog poteza. Na taj način postiže se veoma
veliki broj sečenja u stablu. Mišljenja oko vrednosti killer heuristike su podeljena. Dok neki
istraživači ne beleže nikakve značajne dobitke u vezi sa prikazanom tehnikom [Gillogly] drugi
israživači [Hyatt] beleže značajne dobitke. Međutim, pokazano je da ako se koristi history
heuristika implementacija killer heuristike ne donosi nikakav dobitak, tako da je korišćenje ove
tehnike u principu strogo limitirano.
4.6.8
Futility heuristika
Ova tehnika se primenjuje na čvorovima koji su na nivou horizonta ili jedan odnosno dva
polupoteza ispod njega [Heinz, 1998]. Teoretsko objašnjenje tehnike je jednostavno: pod
pretpostavkom da u poziciji ne postoje potezi koji daju šah protivničkom kralju, ako je statička
evaluacija čvora kojoj se dodaje vrednost najveće figure koja se uzima manja od vrednosti ALFA
uopšte nije potrebno ulaziti u quiescence proceduru jer će u njoj sigurno nastupiti BETA sečenje
stabla. Tehnika nije apsolutno pouzdana zato što postoje potezi koji nisu šahovi ili uzimanje
protivničkih figura, kao što je neodbranjiva pretnja matom, a koji mogu doneti značajno povećanje
vrednosti evaluacije. Međutim, procenat ovog tipa poteza u ukupnoj populaciji poteza je ekstremno
nizak, tako da je korišćenje heuristike teoretski i praktično u potpunosti opravdano. Istraživanja
pokazuju da je promenom margine moguće koristiti futility tehniku i na nivoima koji predhode
horozontu. Uslovi za futility sečenje mogu se opisati na sledeći način:
Dubina:
Uslov:
horizont
statička_evaluacija+vrednost_najveće_figure_koja_se_uzima<ALFA
Dubina:
Uslov:
horizont-1 (pre-frontier)
statička_evaluacija+vrednost_najveće_figure_koja_se_uzima<ALFA-2*pion
Dubina:
Uslov:
horizont-2 (pre-pre_frontier)
statička_evaluacija+vrednost_najveće_figure_koja_se_uzima<ALFA-5*pion
U mnogim programima vrhunske snage ova tehnika se uspešno primenjuje. U sprezi sa nullmove R=3 heuristikom, korišćenjem prikazane tehnike postižu se veoma velike dubine u proračunu,
naročito u pozicijama taktičkog karaktera.
93
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
4.6.9
Ekstenzije stabla
Tehnika ekstenzije stabla se odnosi na povećanje dubine stable preko fiksne granice koja je
određena primenom procedure iterativnog povećavanja dubine, za slučaj kada postoje indicije da
osnovna dubina nije dovoljna za potpun proračun neke kombinacije. Ovo je naročito izraženo kod
varijanti koje imaju sekvencu šahova u čijim su mnogim podgranama prisutne matne kombinacije.
Problemu ekstenzije osnovne dubine se u programu mora pristupiti veoma pažljivo, jer rutinska
ekstenzija nivoa dovodi do pojave efekta kombinatorne eksplozije i smanjivanje nivoa igre uopšte.
Veoma interesantan pristup je uvođenje pojma frakcione dubine. Prilikom analize stabla, program
može odlučiti da se neka linija u stablu produži statistički za deo osnovne dubine, na primer ¼
polupoteza. Naravno, ovo produženje dubine ne može se direktno realizovati, pa je potrebno uvesti
promenjivu koja se kroz nivoe menja kumulativno. Na taj način, ako je u jednom čvoru u stablu
došlo do ekstenzije nivoa za ¼ polupoteza, a u drugom čvoru koji je deo varijante za ¾, može se
realizovati ekstenzija za 1 polupotez (¼ + ¾).
Najčešće korišćene tehnike ekstenzije su:
Izlaz iz pozicije u kojoj je kralj u šahu (check evasion). Ako se kralj nalazi u šahu i ima mali
broj regularnih poteza kao izlaz iz pozicije, u velikom broju slučajeva je potrebno izvršiti
ekstenziju dubine jer je data pozicija možda deo forsirane varijante koja se završava
matiranjem kralja. Često šahovi koji ne vode do matnog ishoda ipak vode do pozicija u
kojima neka strana dolazi do značajnog materijalnog dobitka tako da je ove varijante uvek
dobro ispitati do dovoljne dubine.
Dolazak pešaka na 7 odnosno 2 red generiše brojne taktičke kombinacije sa promocijom u
damu tako da se u mnogim programima u ovom slučaju vrši ekstenzija dubine.
Potez koji izaziva direktnu pretnju matiranju protivničkog kralja generiše potrebu za
povećanom dubinom da bi se razrešila situacija – da li se protivnička strana može odbraniti
od mata ili ne.
Razmena figura (recapture extension) na poslednjem nivou generiše brojne taktičke
mogućnosti koje se moraju rešiti kroz povećanu osnovnu dubinu.
Ako strana koja je na potezu ima jedinstveni odgovor (samo jedan potez) obavezno se vrši
ekstenzija stabla za jedan polupotez, jer se u tom slučaju efekti kombinatorne eksplozije u
značajnoj meri smanjuju zbog ekstremno visokog nivoa ALFA-BETA sečenja koji se
javljaju u podstablima.
Ako strana koja je na potezu na raspolaganju ima jedan potez koji se po svojoj vrednosti
značajno ističe od ostalih, moguće je izvršiti ekstenziju stabla za jedan polupotez (singular
extension). Teoretske osnove ovog tipa ekstenzije su objavljene u radovima Anantharamana, i implementirane u verzijama programa Deep Thought i Deep Blue.
4.6.10 Redukcije stabla
Tehnika o kojoj je reč je inverzna prikazanoj tehnici ekstenzije stabla i može se upotrebiti za delove
stabla za koje se može sa sigurnošću utvrditi da ne mogu predstavljati deo glavne varijante. Na
primer, ako je u nekoj poziciji pronađen potez koji osvaja damu, ostali potezi te strane, osim ako se
ne odnose na šahove ili pretnje matom protivničkom kralju, mogu se razmatrati sa redukovanom
94
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
dubinom. Dobici koji se postižu tehnikom redukcije osnovne dubine su veoma značajni, ali je
potrebno biti veoma pažljiv jer je potencijal za stvaranje taktičkih grešaka izuzetno visok. Primena
kumulativne frakcione dubine kao kod ekstenzije stabla je moguć i implementira se preko istog
mehanizma ali sa negativnim predznakom. Na primer, ako je pronađeno uspešno uzimanje figure,
pasivni potezi nekom figurom u toj poziciji se mogu razmotriti sa skraćenom dubinom -½, a pasivni
potezi kraljem -¾.
4.6.11 Određivanje ponavljanja pozicija metodom Zobrist-a.
Prema šahovskim pravilima ako se identična pozicija ponovi tri puta sa istom stranom na potezu
partija se proglašava remijem. Rešavanje problema ponavljanja pozicije od izuzetnog je značaja za
koncipiranje regularnog šahovskog programa. U završnicama sa malim brojem figura kao i u
dugačkim sekvencama sa šahovima veliki procenat generisanih pozicija su identične, tako da
efikasna i brza procedura za detekciju ponavljanja pozicije optimizuje stablo, jer eliminiše potrebu
za pozivanjem generatora poteza kao i evaluatora i pomoćnih procedura.
Registrovanje ponavljanja pozicije korišćenjem potpune reprezentacija šahovske table je u
praksi veoma nepogodno usled neefikasnosti koju ova metoda podrazumeva. Potrebno je potražiti
druge formate reprezentacije šahovske pozicije sa kojima bi se lakše manipulisalo. Rešenje je
pronađeno u 64-bitnoj reprezentaciji šahovske table. Ako pretpostavimo da je za definisanje jednog
polja na šahovskoj tabli koja je dimenzija 8x8 polja potrebno 4 bita (6 tipova belih i crnih figura,
kao i prazno polje), pozicija na šahovskoj tabli se može definisati minimalno sa 8x8x4 bita = 256
bita. Dakle, osnovni problem koji se nameće je transformacija strukture podataka koja ima 256 bita
na 64 bita. U toku ove transformacija gubi se određena količina informacija ali kako se u
šahovskom stablu uvek javlja samo konačan broj pozicija greške se mogu svesti na minimum.
Zobrist je pronašao veoma efikasnu i brzu transformaciju pozicije u 64 bitnu reč korišćenjem XOR
operacija i teorije slučajnih brojeva [Zobrist, 1990]. Prilikom korišćenja njegovog sistema
predviđena je upotreba višedimenzionalne matrice:
ZOBRIST[piece][color][x][z]
čiji su elementi 64-bitni slučajni brojevi. Za definiciju tipa figure je potrebno 3 bita, za definisanje
boje 1 bit, za X i Y koordinatu po tri bita, dakle ukupno 3+1+3+3=10 bita. Matrica Zobrist sadrži
ukupno 210=1024 elemenata, formata 64 bita svaki. Transformacija šahovske table u 64-bitni
Zobrist ključ obavlja se upotrebom serije XOR operacija nad određenim poljima koji su definisani
figurama ta tabli i njihovima položajima. Postupak generisanja Zobrist ključa ćemo objasniti na
sledećem primeru (Slika 4.32). Neka je na tabli data pozicija koju je potrebno transformisati u 64bitni Zobrist ključ. X i Y koordinate su prikazene svojim binarnim reprezentacijama.
95
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Slika 4.32 Pozicija koju je potrebno transformisati u Zobrist ključ.
Neka su figure kodirane na način prikazan u tabeli 4.13:
Tabela 4.13 Kodiranje figura u Zobrist sistemu.
Figura (značenje) Binarni kod
Prazno polje
000
Pešak
001
Skakač
010
Lovac
011
Top
100
Dama
101
Kralj
110
Kod za belu figuru je 0 a kod za crnu figuru 1.
Na osnovu predhodno izloženih podataka i definicija, može se formirati Zobrist ključ kao
ekskluzivna suma 5 člana:
Zobrist64 = ZOBRIST[110][1][011][110] XOR ZOBRIST[011][1][100][101] XOR
ZOBRIST[001][0][100][010] XOR ZOBRIST[010][0][100][001] XOR
ZOBRIST[110][0][110][001]
uz napomenu da su sve koordinate u binarnoj reprezentaciji. U decimalnoj notaciji koordinata,
formiranje Zobrist ključa za datu poziciju bi bilo predstavljeno sledećim izrazom:
Zobrist64 = ZOBRIST[6][1][3][6] XOR ZOBRIST[3][1][4][5] XOR
ZOBRIST[1][0][4][2] XOR ZOBRIST[2][0][4][1] XOR ZOBRIST[6][0][6][1]
Kako su svi elementi matrice Zobrist slučajni brojevi, kao krajnji rezultat dobija se 64-bitni
slučajni broj koji predstavlja pozicioni ključ. Primena XOR operacija nad slučajnim brojevima
96
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
omogućava ravnomernu distribuciju nula i jedinica u 64-bitnom pozicionom ključu bez obzira na
broj i raspored figura na tabli.
Eksperimenti pokazuju da se uz upotrebu kvalitetnog generatora slučajnih brojeva broj
mogućuh kolizija, kada dve različite pozicije imaju isti Zobrist ključ, svodi na minimum i da se ovaj
sistem može koristiti sa uspehom u realnim šahovskim aplikacijama. Međutim, generisanje Zobrist
ključa u svakoj poziciji, na osnovu rasporeda svih figura je spor proces. U otvaranju, kada se na
tabli nalaze sve 32 figure potrebno je izvršiti ekskluzivnu sumu trideset dve 64-bitne memorijske
promenjive što nije efikasno. Zato se koristi osobina da se Zobrist ključevi inkrementalno menjaju,
u funkciji poteza koji je odigran. Na primer, ako je u poziciji sa slike 4.31 beli odigrao potez Kg2f3,
nije potrebno od osnove generisati Zobrist ključ. On se može regenerisati iz postojećeg ključa uz
upotrebu samo dve XOR operacije. Prva operacija uklanja XOR sadržaj pozicije kralja a druga
definiše novu poziciju belog kralja:
Zobrist64_posle_Kg2f3 = Zobrist64 XOR ZOBRIST[110][0][110][001] XOR
ZOBRIST[110][0][101][010],
odnosno u decimalnoj formi,
Zobrist64_posle_Kg2f3 = Zobrist64 XOR ZOBRIST[6][0][6][1] XOR ZOBRIST[6][0][5][2].
Ova korisna transformacija proističe iz osobina XOR operacije:
A XOR B XOR B = A
Osim statičkog rasporeda figura svaka pozicija se definiše i nekim dodatnim informacijama kao
što je: informacija o boji igrača koji je na potezu, rokadni i en-passant status pozicije… Ovi
problemi se rešavaju veoma jednostavno, uvođenjem posebne 64-bitne XOR konstante za svaku od
dodatnih informacija. Ako je u poziciji sa slike 4.31 umesto belog na potezu crni, definicija Zobrist
ključa bi se promenila u smislu potrebe da se izvrši dodatna XOR operacija:
Zobrist64_crni_na_potezu = Zobrist64 XOR KONSTANTA_CRNI,
Gde je KONSTANTA_CRNI kvazislučajan 64-bitni broj.
U praktičnoj realizaciji, generisanje kompletnog Zobrist ključa je potrebno obaviti samo na
osnovnom nivou u stablu, dok se na svim ostalim nivoima ključevi generišu inkrementalno.
Problem prepoznavanja ponavljanja pozicije se prikazanom transformacijom svodi na
prepoznavanje u listi 64-bitnih Zobrist pozicionih ključeva što je daleko efikasnije. Zobrist sistem
se na modernim 32-bitnim i 64-bitnim procesorima koji imaju dovoljnu količinu primarne hash
memorije izvršava veoma efikasno i u modernim, pre svega PC programima, je gotovo nezamenljiv.
Implementacija Zobrist sistema ima još nekoliko veoma značajnih pozitivnih momenata:
64-bitni Zobrist ključevi su idealni za adresiranje glavne transpozicione tabele. Pošto je reč
o kvazislučajnim brojevima generisanim na bazi tekuće pozicije, Zobrist ključevi se mogu
upotrebiti za adresiranje tabele kapaciteta 264 elemenata. U praktičnim uslovima se raspolaže
sa znatno manjim kapacitetom memorije, tako da se za adresiranje koriste samo niži bitovi
Zobrist ključa. Na primer, ako se izvrši logička AND operacija između generisanog 64
bitnog Zobrist ključa i konstante 1048575 (220-1), generisaće se 20-bitni Zobrist ključevi
koji će moći adresirati transpozicionu tabelu sa 220 elemenata. Na taj način, veoma efikasno
se može prilagoditi sistem za rad sa bilo kojim kapacitetom tabele koji je predstavljen
stepenom dvojke.
97
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Prepoznavanje pozicije koja je odigrana u predhodnom toku partije, a koja nije deo
trenutnog stabla odlučivanja, obavlja se pamćenjem Zobrist ključeva pozicija u poseban
pozicioni stek. Algoritam za prepoznavanje je u tom slučaju veoma jednostavan, obavlja se
zapravo samo linearna pretraga 64-bitnih ključeva kroz listu pozicija.
Korišćenjem Zobrist ključeva mogu se izgraditi memorijske hash tabele za pešačke
strukture. Naime, u pozicijama u kojima se nalaze samo kraljevi i pešaci izuzetno je važno
dobro evaluirati mogućnost stvaranja slobodnih pešaka i njihovu promociju. Taktika koja je
uključena u ovim pozicijama često prevazilazi dubinu od 10-12 poteza. Ako se izvrši
preliminarna evaluacija ključnih pozicija i rezutat zapamti u hash memoriju kojoj se može
pristupati direktno u jednoj mašinskoj naredbi, u nekom delu stabla, računajući i quiescence
search, pozicija se direktno evaluira iz memorije čime se značajno pojačava snaga
programa, naročito u završnici.
4.6.12 Contempt faktor
Evaluacija remija koji je detektovan primenom algoritma za ponavljanje pozicije obavlja se
dodeljivanjem vrednosti 0.00. Međutim, u praksi je pokazano da se korišćenjem nulte vrednosti za
evaluaciju onemogućava aktivna igra na pobedu u slučajevima kada je vrednost pozicije objektivno
negativna, kao što je to slučaj kada se igra sa crnim figurama u otvaranju. Kada se koristi nulta
vrednost može se desiti da jači program igra na remi protiv slabijeg oponenta već u otvaranju, kada
se po izlasku iz knjiga otvaranja nađe u poziciji u kojoj ima negativnu evaluaciju. Zbog toga se
predlaže da se u zavisnosti od faze igre remi evaluira sa manjim negativnim vrednostima umesto
nulom. To će programu omogućiti da igra na pobedu čak i u slučajevima u kojima je poziciono
nešto slabiji. Contempt faktor, koji se odnosi na evaluaciju remija, u fazi otvaranja se optimalno
podešava na vrednost –0.5 pešaka, u fazi središnjice na –0.25 vrednosti pešaka. U završnici je
najbolje igrati sa klasičnim faktorom 0.00. Negativna vrednost u završnici znači ozbiljan nedostatak
u sopstvenoj poziciji, tako da je najbolje igrati na remi, ako je to moguće u datim okolnostima.
4.7 Alternativne - eksperimentalne procedure za obradu stabla
Razni istraživači su pokušali da razviju alternativne procedure i sisteme za obradu stabla koji će
približiti način obrade informacija računara ljudskom načinu razmišljanja. Takođe, razmatrane su
razne metode da bi se napravio otklon od dominatnih ALFA-BETA algoritama koji su u principu
procedure bazirane na obradi svih alternativa u stablu (brute-force). Osnovni nedostatak, koji je
takođe inherentan ALFA-BETA algoritmu je postojanje samo jedne vrednosti minimaks koja
aproksimira evaluaciju, što je u mnogim slučajevima nedovoljno za tačno određivanje ukupne
vrednosti pozicije zbog nesavršenosti i fluktuacija u samoj evaluacionoj funkciji. U ovom delu rada
razmotrićemo dva vodeća alternativna pristupa, Berlinerov B* algoritam i pristup preko
konspirativnih brojeva.
4.7.1
Berlinerov B* algoritam
Osnovna ideja kod Berlinerovog pristupa je uvođenje dve vrednosti za evaluacionu funkciju:
pesimističke i optimističke, umesto jedne kao što je to bio slučaj do sada [Berliner, 1996], [Berliner,
1979], [Palay, 1982]. One predstavljaju donju i gornju aproksimiranu vrednost koju generiše
evaluaciona funkcija. Po nekim istraživačima verovatnoća unutar intervala ima uniformnu
raspodelu gustina. Takođe, verovatnoća da se tačna evaluacija nalazi u intervalu ove dve vrednosti
je znatno veća nego što je to kada je prisutna samo jedna vrednost, kao što je to slučaj kod ALFABETA baziranih algoritama. Kod Berlinerovog pristupa, razlika između gornje i donje granice
98
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
određuje nesigurnost trenutnog čvora. Kada je ova razlika manja od nekog određenog limita, ili
kada donja granica postane veće od gornje prestaje se sa daljim proračunom u tom čvoru. Linije
koje imaju najveću nesigurnost se dalje produbljuju.
Generalno, ovakav pristup ima značajne teoretske prednosti u odnosu na ALFA-BETA.
Algoritam u svakom trenutku ima pristup informacijama o celom stablu, što nije slučaj kod ALFABETA algoritma gde je pristup informacijama i vrednostima lokalnog karaktera. Algoritam sam
optimizuje dubinu proračuna u stablu na osnovu principa stabilnosti tako da se nestabilnije varijante
ispituju do veće dubine od onih stabilnijih. Sličan cilj se kod ALFA-BETA algoritma postiže
upotrebom raznih pomoćnih tehnika koje su heurističkog karaktera, pre svega ekstenzijom i
redukcijom stabla.
Osnovni problem koji je potrebno rešiti je precizno određivanje realne stabilnosti u odnosu na
širinu intervala koji se javlja pri primeni ovog tipa algoritma.
4.7.2
Pristup preko konspirativnih brojeva
Ovaj pristup se zasniva na korišćenju minimaks metode za proračun stabla, ali u jednom drugom
vidu. Naime, uvodi se pojam konspirativnih brojeva [McAllester, 1988], [Schaeffer, 1989]. Po
definiciji, konspirativni brojevi označavaju minimalni broj terminalnih čvorova koji moraju
promeniti svoju vrednost kako bi došlo do promene odluke na osnovnom nivou [Klingbeil, 1988].
Informacije o načinu razvoja stabla se dobijaju samo preko proračunavanja konspirativnih brojeva u
raznim delovima stabla bez korišćenja pomoćnih heuristika ili ekspertskog znanja koje se posebno
implementira u program [Meulen, 1990a], [Meulen, 1990b], [Rottmann, 1995]. Ovaj pristup je bio
obećavajući u početku, ali je kasnije, naročito sa pojavom brzih procesora i hardverski
optimizovanih šahovskih ko-procesora, u potpunosti napušten.
4.8 Standardni metodi paralelizacije
U predhodnom delu ovog poglavlja prikazane su metode konstrukcije šahovskog algoritma koje su
sekvencijalnog tipa. Algoritmi, predviđeni za rad na jednoprocesorskom sistemu mogu biti
usavršeni do određenog nivoa u pogledu snage i broja analiziranih pozicija u sekundi. Dalje
usavršavanje i ubrzavanje šahovskog programa može se postići jedino korišćenjem višeprocesorskih
mašina, odnosno paralelizacijom postojećuh algoritama, pre svega ALFA-BETA algoritma
[Marsland, 1982], [Marsland, 1985], [Hyatt, 1989], [Finkel, 1982], [Ferguson, 1988].
Standardni metodi paralelizacije (SMP) koriste višeprocesorski PC hardver, najčešće dual i
quad mašine [Marsland, 1986], [Althöfer, 1993a], [Althöfer, 1993c]. Ovi tipovi paralelnih mašina
mogu biti klasifikovani kao čvrsto spegnute mašine (MIMD). Veza između procesa (šahovskih
programa) ostvaruje se korišćenjem zajedničke operativne memorije pod kontrolom istog
operativnog sistema. Takođe, neki moderni procesori poseduju paralelizaciju na nivou samog
procesora. INTEL procesori sadrže ugrađenu multithreading arhitekturu, a AMD procesori
najnovije generacije napredniju multicore arhitekturu. Vodeći PC operativni sistemi (MS Windows,
Linux) takođe definišu rad sa paralelnim arhitekturama. Većina profesionalnih PC programa
podržava paralelne arhitekture. Neki od programa rade i na platformama do 256 procesora.
Osnovna karakteristika tih sistema je potreba za ekstremno skupim hardverom tipa servera koji su u
veoma malom procentu prisutni u ukupnoj populaciji šahovskih programa. Najsloženiji problemi
koji se javljaju u oblasti paralelizacije je prenošenje velikih količina podataka između procesora.
99
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Problemi transfera podataka rastu sa kvadratom broja procesora i postaju dominantni za više od
8 procesora.
Jedno od rešenja problema je upotreba distribuirane paralelizacije. Najjači paralelni sistem
danas je Hydra, koja predstavlja mrežu od N procesora povezanih u Linux klaster. Svaki čvor u
mreži predstavlja dual INTEL procesor koji je preko dva paralelna PCI slota povezan na dve FPGA
kartice tipa VirtexV1000E, koje predstavljaju hardverske akceleratore sistema. Algoritam za
distribuiranu paralelizaciju dinamički menja i alocira delove stabla na raznim procesorima.
Koristeći slične principe i ranije su bili izgrađivani paralelni šahovski sistemi kao što su: Belle,
Hitech, Cray Blitz and Deep Thought [Hyatt, 1998]. Takođe, poznati akademski projekat je MIT-ov
paralelni šahovski program StarSocrates koga je nasledio sistem CilkChess baziran na MTD(f)
algoritmu za traženje.
Rekurzivni ALFA-BETA algoritam je po svojoj prirodi krajnje selektivan i zavisi mnogo od
dinamičkih vrednosti koje su generisane u fazi obrade stabla. Prvi pokušaji stvaranja paralelnih
sistema su ukazali na osnovni problem: tranziciju velikih delova stabla između procesora u realnom
vremenu. Prvi algoritam paralelizacije je bio: Principal Variation Splitting (PVS) i njegova
modifikovana verzija Enhanced Principal Variation Splitting (EPVS). Radeći na dva procesora, ovi
algoritmi postižu ubrzanje od 80-90% u odnosu na jednoprocesorsku verziju. Takođe, zanimljiv
pristup je i paralelizacija korišćenjem različitih programa (Schaeffer-ov projekat Phoenix). Na polju
distribuiranog paralelizma [Feldmann, 1989] koncipiran je paralelni asinhroni algoritam APHID
[Brockington, 1997], [Brockington, 2000]. Distribuirani paralelizam je naročito bio u ekspanziji
pre pojave višeprocesorskih PC mašina, kao jedini efektivni vid paralelizma [Feldmann, 1989],
[Feldmann, 1991], [Feldmann, 1992]. Problem neiskorišćenih procesora je rešen upotrebom Dynamic
Tree Splitting algoritma. Prema istraživačima algoritmi omogućavaju racionalno ubrzanje u
sistemima do 16 procesora [Romein, 2002]. Osnovni nedostatk je da ovi sistemi zahtevaju ekstremno
široku propusnu moć memorijskog sistema. Rezulatati i ekperimenti su većinom obavljeni na
superkompjuteru Cray XMP i Cray YMP sa 4 i 8 procesora respektivno.
4.9
Optimalna struktura šahovskog programa
Na osnovu višegodišnjih teoretskih i praktičnih istraživanja šahovskih algoritama, a imajući u vidu
strukturu najjačih modernih programa, na današnjem nivou znanja u ovoj oblasti može se
koncipirati najoptimalniji raspored tehnika koje se moraju upotrebiti za igradnu šahovskog
programa koji prevazilazi snagu šahovskog majstora:
100
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Osnovni pristup je korišćenjem minimaks algoritma grube snage (brute-force). Glavni
zahtev kod ovog metoda je ubrzavanje rada pojednostavljivanjem rada sa svakim
pojedinačnim čvorom u stablu.
Prvi nivo nadogradnje je PVS verzija ALFA-BETA algoritma.
Drugi nivo je korišćenje R=3 null-move algoritma. U pozicijama sa malim brojem figura
i završnicama potrebno je redukovati faktor R na 2 ili verifikovati liniju bez korišćenja
null-move heuristike.
Od pomoćnih tehnika za poboljšavanje raspodele poteza neophodno je koristiti
transpozicionu tabelu i history heuristiku.
Generatorsku funkciju je potrebno napisati što je moguće optimalnije. Redosled poteza u
njoj određuju hash tabele a ne heuristike. Generator kvazileganih poteza je bolje rešenje
u poređenju sa generatorom legalnih poteza.
Ekspertsko znanje se ugrađuje jedino na nivou evaluacione funkcije Potrebno je
predvideti korišćenje ubrzane evaluacije kod slučajeva kada je statičkim metodama
nemoguće prevazići ALFA granicu.
Neophodno je ugraditi kvalitetnu i brzu quiescence funkciju. Na ovom nivou je potrebno
koristiti SEE heurističku tehniku. Najčešće je dovoljno koristiti samo heuristiku razmene
figura (capture), premda neki autori daju prednost i drugim vidovima heuristika, pre
svega šahovima i promocijama.
Poboljšanje dubine u pojedinim interesantnim linijama postiže se korišćenjem
heurističkih pravila ekstenzije.
Za generisanje transpozicionih pozicionih ključeva i realizaciju detekcije ponavljanja
pozicije koristi se Zobrist metoda sa 64-bitnim pozicionim ključevima.
Prikazane tehnike predstavljaju teoretsku osnovu za izgradnju programa majstorske snage
korišćenjem standardnog jednoprocesorskog PC hardvera. Dalja poboljšanje u snazi programa
mogu se postići upotrebom baza pozicija i paralelizacijom, što će biti razmotreno u nastavku rada.
101
5
________________________________________
TRANSPOZICIONE BAZE
Usavršavanjem periferijskih memorijskih uređaja i povećanjem kapaciteta operativne memorije
otvorena je mogućnost za rad sa eksternim bazama podataka u realnom vremenu čime se izuzetno
pojačava igra programa u određenim segmentima partije.
Osnovna ideja kod baza podataka je omogućavanje asocijativne veze između neke pozicije i
određene vrednosti koja je smeštena u bazi. Na taj način, u bazi pozicija se mogu pamtiti kritične
informacije koje se u fazi obrade stabla mogu koristiti. Upotrebom memorisanih parametara iz baze
dolazi se do velike uštede u fazi proračuna zato što čitavo podstablo koje proističe iz tražene
pozicije nije potrebno razmatrati.
U predhodnom delu rada smo naglasili značaj glavne transpozicione tabele za povećanje
efikasnosti rada programa, naročito u fazi središnjice. Glavna transpoziciona tabela, koja pamti
određene vrednosti vezane za stablo odlučivanja se ipak ne može svrstati u baze jer je ona pre svega
dinamičkog karaktera i ne postoji povezanost 1:1 između pozicije i sadržaja u bazi zbog moguće
teoretske greške nekonzistentnosti prilikom rada sa Zobrist ključevima.
3.1 Transpozicione baze otvaranja
Osnovna koncepcija transpozicione baze otvaranja, ili knjige otvaranja, veoma je jednostavna:
u memoriji ili na disku se organizuje datoteka koja pamti pozicije iz otvaranja, njihove evaluacije,
nazive i ključne poteze koji proističu iz te pozicije. Naravno u raznim implementacijama koriste se i
dodatne informacije, ali jezgro ove tehnike ostaje nepromenjeno. Transpoziciona baza otvaranja,
slično kao kod glavne transpozicione tabele o kojoj je već bilo reči, omogućava da se traženim
informacijama o poziciji pristupi direktno, bez potrebe za proračunom [Spracklen, 1983]. Bez
obzira na sličnosti, postoje značajne razlike u tretiranju ove dve tabele. Najvažnije razlike su:
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Transpoziciona tabela otvaranja sadrži mnogo više informacija računajući i kompletno
predstavljenu poziciju u originalnom formatu. Pošto se koristi disk, i tabela otvaranja
konsultuje samo u prvim fazama partije, ne obraća se previše pažnje na brzinu pristupa i
potreban kapacitet. Transpoziciona tabela otvaranja ima pre svega statički karakter.
Kod transpozicione tabele otvaranja se ne koriste se Zobrist ključevi. Svaka pozicija u bazi
se pamti u svom originalnom obliku, tako da ne postoji ni teoretska mogućnost greške.
Transpoziciona baza otvaranja ima direktan pristup pozicijama, tako da veoma uspešno
obrađuje slučajeve kada se do nekih pozicija u otvaranju stiže različitim varijantama.
Takođe, baze otvaranja tretiraju i slučajeve inverzne transpozicije. Ako posmatramo sledeći
niz poteza: 1.e3 e5 2. e4 od osnovne pozicije došlo se do standardne pozicije koja je
prikazana na dijagramu sa slike 5.1:
Slika 5.1 Pozicija nastala posle serije poteza 1.e3 e5 2. e4.
Sada crni može da odigra iz baze potez Ng8f6 i da pređe u sistem otvaranja koji se u šahovskoj
literaturi naziva Španska partija ali sa promenjenim bojama. Igrajući na ovaj način, crni zapravo
ima prednost jer dobija jedan tempo u otvaranju i mogućnost da koristi veliki broj varijanti koje
postoje u španskoj partiji po definiciji za belog. Format i implementacija transpozicione baze
otvaranja su detaljno obrađeni u nastavku rada.
3.2 Baze završnica
Baze završnica (EGTB – EndGame Data Base) su poseban vid baza podataka koje sadrže
informacije za sve moguće pozicije sa određenim brojem figura koje se odnose na vrednost te
pozicije [Heijden, 2001]. Za razliku od baza otvaranja, baze završnica su dinamičkog karaktera i
njima se pristupa u toku obrade stabla [Bratko, 1978], [Gosling, 1992].
U oblasti kompjuterskih baza završnica dosta je pažnje posvećeno mogućnostima korišćenja
nekih alternativnih metoda za evaluaciju pozicije polazeći od činjenice da je ekspertsko znanje u
završnicama u funkciji primene određenog skupa pravila. Neki istraživači su za ovu namenu
koristili pristup preko neuronskih mreža [Haworth, 1998].
Format za određivanje pojedinih datoteka koje sadrže informacije o određenom tipu završnica
veoma je jednostavan [Coplan, 1998]. Na primer, baza sa imenom KNBKP se odnosi na završnicu
103
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
u kojoj strana koja je na potezu pored kralja ima još skakača i lovca, a druga strana kralja i pešaka.
Baza podataka koja se odnosi na ovakvu konfiguraciju figura u završnici za svaku njihovu moguću
poziciju daje evaluaciju, odnosno informaciju o tome da li je strana koja je na potezu u dobitničkoj
poziciji ili je pozicija izgubljena ili je remi [Barth, 1992]. Baze otvaranja tipa Nalimov daju i
dodatnu informaciju – koliko je najmanje poteza do mata za neku od strana koja je u odlučujućoj
prednosti. Imajući u vidu da se za svaku poziciju u bazi nalazi egzaktna vrednost evaluacije,
korišćenje baza završnica omogućava kreiranje perfektne igre u završnici sa tom strukturom figura
[Barth, 1995a], [Barth, 1995b]. Takođe, ako je broj figura na tabli nešto veći od najvećeg broja
figura u bazi, igra se značajno pojačava jer u mnogim pozicijama u stablu odlučivanja usled
razmene figura dolazi do strukture pozicije koja je memorisana u bazi završnica [Heinz, 1999b],
[Heinz, 1999c], [Horacek, 1982]. Na primer, ako je u bazi definisano 5 figura, igra sa 7,8,i 9 figura
veoma je pojačana jer se pozicije u stablu kroz serije razmena figura u osnovnom i quiescence delu
u većini svode na tabelarne pozicije. Pristup bazama završnica se obavlja korišćenjem standardnih
grafičkih aplikacija od kojih su neke serverskog tipa kojima se može pristupiti preko Interneta
(Lokasoft Nalimov Server). Za samu sintezu baza koristi se postupak retrogradne analize. Zbog
ektremno velikog broja pozicija za sintezu je potreban veoma snažan hardver. Generisanje
pojedinih baza u Nalimov sistemu baza završnica je trajalo i po više meseci neprekidnog rada.
Razni istraživači dolaze do različitih rezultata u vezi sa pojačanjem snage upotrebom baza
završnica. Većina istrživača se slaže da je ukupni dobitak snage oko 25 ELO poena u odnosu na
verzije programa koje nemaju implementirane baze završnica. Rezulati su veoma različiti i dosta
zavise od tipa šahovskog programa, veličine hash memorije, vremenske kontrole, brzine pristupa
disku. Neosporno je da baze završnica najveći efekat imaju u dva slučaja:
Kada je na tabli isti broj figura koji je memorisan u bazi. Ovo omogućava da se ove
završnice igraju perfekno bez korišćenja eksternog heurističkog znanja.
Kada se u redukciji pozicije razmenom figura dođe to tabelarnih pozicija. Upotreba baza u
ovom slučaju je veoma korisna jer omogućava programu da izbegne ulazak u izgubljenu
tabelarnu završnicu ili da forsira razmenu figura koja vodi do dobijene pozicije iz baze.
Na osnovu svih ovih razloga, implementaciji baze završnica se mora pristupiti veoma pažljivo,
jer prema nekim rezultatima, naročito u blic partijama, direktna primena baza može da dovede i do
smanjivanja rejtinga programa.
5.2.1 Princip vertikalne i oktalne pozicione simetrije
Proračun potrebnog kapaciteta baze zasniva se na predviđanju maksimalnog broja pozicija koje
nastaju kombinacijom svih mogućih položaja figura.
U poziciji sa slike 5.2, na kojoj se nalaze dva pešaka i kraljevi, a pošto se pešaci mogu nalaziti na
48 polja (na prvom i zadnjem redu se ne mogu naći po pravilima igre) i kraljevi na jednom od 64
polja, permutacijom položaja figura nastaju ukupno:
NKPPKP=48*(48-1)*(48-2)*(64-3)*(64-4) = 379.820.160 pozicija.
što je veoma veliki broj samo za ovaj tip završnica.
104
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Slika 5.2 Princip vertikalne simetrije za pozicije koje sadrže pešake.
Analizirajući pozicije sa slike 5.2, koje su vertikalno simetrične, možemo zaključiti da one
imaju identičnu evaluaciju. Takvih vertikalno simetričnih pozicija ima ½ u ukupnom broju pozicija,
tako da se korišćenjem principa vertikalne simetrije može za 50% smanjiti broj pozicija, koji sada
iznosi 189.910.080. Ako se iskoristi maksimalni stepen kompresije za jednu poziciju od 1:8 koji je
primenjen kod ENAX baza završnica, ukupan potrebni kapacitet memorije je 23.738.760 bajtova,
samo za ovaj tip završnice. Napominjemo da je ovo projektovani maksimalni kapacitet zato što je
određen broj pozicija nelegalan po pravilima šahovske igre.
U završnicama u kojima nema pešaka moguće je primeniti znatno veći stepen kompresije
baziran na principu oktalne simetrije. Ako imamo završnicu tipa KRNKB kao što je prikazano na
slici 5.3, za svaku od pozicija možemo pronaći još 7 oktalno simetričnih pozicija koje imaju
identičnu evaluaciju.
Slika 5.3 Oktalno simetrične pozicije koje ne sadrže pešake.
Koristeći sličan model proračuna broja kvazilegalnih pozicija kao u predhodnom primeru, možemo
utvrditi da za datu strukturu figura postoji ukupno:
NKRNKB=64*(64-1)*(64-2)*(64-3)*(64-4)=914.941.440 pozicija.
105
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Koristeći oktalnu simetriju ovaj broj možemo svesti na 1/8 tako da on sada iznosi 114.367.680
pozicija. Koristeći maksimalnu ENAX kompresiju podataka dolazimo do zaključka da je za
pamćenje vrednosti svih pozicija potrebno 14.295.960 bajta memorije. Primenom
prikazanih
tehnika koje koriste simetriju i kompresiju podataka, potrebne memorijske kapacitete možemo
svesti na prihvatljive realne okvire i omogućiti efikasan rad sa bazama u realnom vremenu.
5.2.2 Formati baza završnica
Razvijeni su različiti formati baza završnica. Po redosledu pojavljivanja i nazivima autora razvijene
su baze tipa Ken Thompson, Steven J. Edwards, Eugene Nalimov i Chessmaster/De Koning EDGB.
Navedene baze pripadaju grupi standardnih baza, ali su za svoje potrebe neki programeri razvili
svoj sopstveni format baza, na prime Bruce Moreland za program Ferret.
U principu postoje dva tipa baza završnica: one koje računaju udaljenost od mata (Distance to
Mate – DTM) i one koje računaju udaljenost do konverzije (DTC – Distance to Conversion). DTM
baze računaju najmanji broj poteza do mata. Najznačajniji predstavnik ove klase su baze tipa
Nalimov. DTC baze računaju najmanji broj poteza do konverzije, odnosno do poteza koji suštinski
menja tip pozicije – bilo da je u pitanju promocija, razmena neke figure ili mat. U ovu klasu spadaju
baze tipa Thompson. Pomenute dve klase baza završnica ne obrađuju pravilo 50 poteza, tako da su
na teoretskom nivou uvedene još dve klase DTZ (Distance to Zeroing) i DTR (Distance to Rule)
koje još nisu implementirane u nekom praktičnom formatu. Osnovne karakteristike pojedinih tipova
baza mogu se specificirati na sledeći način:
Baze završnica tipa Edwards – DTM tip baze. [Edwards, 1994], [Edwards, 1996]. Za svaku
poziciju se pamti udaljenost od mata. Problem sa ovim formatom baza je potreba za
korišćenjem velike količine memorije na disku. Kompletne Edwards baze za 3-4-5 figura
zahtevaju oko 30Gb na disku.
Baze završnica tipa Nalimov – DTM tip baze. [Nalimov, 1999], [Nalimov, 2000], [Nalimov,
2001]. Za svaku poziciju se pamti udaljenost od mata. Za razliku od baza tipa Edwards,
podaci se na disku nalaze u kompresovanoj formi tako da se mogu dekompresovati i koristiti
u realnom vremenu, bez gubitaka u performansama. Kompletne Nalimov baze za 3-4-5
figura zauzimaju oko 7.5Gb na disku.
Baze završnica tipa Thompson – DTC tip baze. [Thompson, 1986], [Thompson, 1991],
[Thompson, 1996]. Za svaku poziciju se pamti udaljenost od konverzije. Ovaj tip baza se
koristio u početku. Kompjuter IBM Deep Blue je u meču sa Kasparovim uspešno koristio
baze tipa Ken Thompson u par partija koje su došle do nivoa završnice. Problem sa ovim
tipom baze je u tome što ga je veoma teško realizovati u kompresovanoj formi. Takođe,
vrednosti koje se generišu iz baze je potrebno posebno interpretirati što nije slučaj kod baza
tipa Nalimov koje jasno daju podatke o tome koja je strana dobitnička u poziciji.
U praksi je korišćenje baza tipa Nalimov skoro dominantno. Pored postojećih 3-4-5 baza, radi se
na realizaciji baza sa 6 figura, od kojih su neke već dostupne. U nastavku rada prikazana je
struktura datoteka za Nalimov baze sa 4 figure. Baza podataka podeljena je u 70 datoteka ukupnog
kapaciteta 31 Mb. Kada je na potezu beli, odnosno crni, baze podataka su razdvojene. Na primer, za
završnicu tipa kralj+pešak+pešak protiv kralja, definisane su dve baze, u zavisnosti da li je u
materijalnoj prednosti beli ili crni:
kppk.nbw.emd (beli je materijanoj prednosti)
384.915
kppk.nbb.emd (crni je u materijalnoj prednosti) 610.687
106
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Pristup bazi podataka se sastoji iz dve faze. U prvoj fazi se na osnovu strukture pozicije i strane
koja je na potezu vrši selekcija jedne od 70 datoteka:
Tabela 5.1 Struktura baze podataka tipa Nalimov za 4 figure.
Nalimov datoteke sa 4 figure Kapacitet u bajtovima
kbbk.nbb.emd
205.549
kbbk.nbw.emd
249.216
kbk.nbb.emd
187
kbk.nbw.emd
1.503
kbkb.nbb.emd
13.989
kbkb.nbw.emd
13.989
kbkn.nbb.emd
2.451
kbkn.nbw.emd
14.063
kbkp.nbb.emd
775.143
kbkp.nbw.emd
369.787
kbnk.nbb.emd
479.960
kbnk.nbw.emd
555.601
kbpk.nbb.emd
1.290.857
kbpk.nbw.emd
1.511.181
knk.nbb.emd
187
knk.nbw.emd
186
knkn.nbb.emd
2.449
knkn.nbw.emd
2.449
knkp.nbb.emd
1.089.865
knkp.nbw.emd
618.587
knnk.nbb.emd
1.441
knnk.nbw.emd
1.358
knpk.nbb.emd
1.227.423
knpk.nbw.emd
1.547.889
kpk.nbb.emd
16.589
kpk.nbw.emd
17.654
kpkp.nbb.emd
1.111.988
kpkp.nbw.emd
1.116.299
kppk.nbb.emd
610.687
kppk.nbw.emd
384.915
kqbk.nbb.emd
329.501
kqbk.nbw.emd
273.890
kqk.nbb.emd
5.961
kqk.nbw.emd
7.605
kqkb.nbb.emd
505.366
kqkb.nbw.emd
401.622
kqkn.nbb.emd
582.758
kqkn.nbw.emd
413.756
kqkp.nbb.emd
1.353.920
kqkp.nbw.emd
1.103.045
kqkq.nbb.emd
257.632
kqkq.nbw.emd
257.632
kqkr.nbb.emd
641.119
107
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
kqkr.nbw.emd
562.344
kqnk.nbb.emd
302.140
kqnk.nbw.emd
284.437
kqpk.nbb.emd
913.558
kqpk.nbw.emd
886.731
kqqk.nbb.emd
181.425
kqqk.nbw.emd
141.855
kqrk.nbb.emd
296.182
kqrk.nbw.emd
211.121
krbk.nbb.emd
357.372
krbk.nbw.emd
278.694
krk.nbb.emd
7.051
krk.nbw.emd
7.059
krkb.nbb.emd
84.137
krkb.nbw.emd
216.606
krkn.nbb.emd
179.806
krkn.nbw.emd
324.996
krkp.nbb.emd
1.479.273
krkp.nbw.emd
1.208.181
krkr.nbb.emd
189.818
krkr.nbw.emd
189.818
krnk.nbb.emd
367.838
krnk.nbw.emd
308.291
krpk.nbb.emd
1.167.451
krpk.nbw.emd
1.197.199
krrk.nbb.emd
201.764
krrk.nbw.emd
135.331
Ukupni kapacitet baze je 31Mb. U drugoj fazi se na osnovu pozicije izvršava unutrašnji pristup
i dekompresija vrednosti koja se vraća kao rezultat procedure. Pristupanje bazi tipa Nalimov se
obično definiše u vidu eksterne DLL datoteke, koja se lako povezuje sa različitim vrstama
programa. Jedna od verzija programskog interfejsa sa bazom podaka je definisana u standardnoj
EGTB.DLL datoteci sa sledećim pristupnim funkcijama:
Ulazna tačka indeks
10005318h
10005390h
100039Ach
10004FB4h
100052D8h
100042E4h
1
2
3
4
5
6
ime funkcije
FRegisteredFun
FTbSetCacheSize
iDescFindFromCounters
IInitializeTb
indCalcFun2
L_TbtProBETAble
Kao ulaz u sistem koji adresira i dekomresuje Nalimov bazu koristi se reprezentacija šahovske
table u vidu bitboard formata. Reprezentacija u vidu 64-bitnih bitboard registara je veoma pogodna
za ovu namenu zato što se koristeći podatake prisutne u 64-bitnim strukturama veoma lako
izračunavaju pristupne adrese. Polja na šahovskoj tabli A1,B1,C1..F8,G8,H8 odgovaraju bitovima
0,1,2..61,62,63 odgovarajućeg bitboard-a:
U nastavku je dat listing pristupnih struktura podataka i funkcija koje omogućavaju konekciju
programa Axon II sa standardnom EGTB.DLL bibliotekom:
108
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
unit nalimov;
interface
type
BITBOARD = Int64;
BOARDTYPE = record
All : BITBOARD;
BlackPieces : BITBOARD;
WhitePieces : BITBOARD;
BlackPawns : BITBOARD;
WhitePawns : BITBOARD;
BlackRooks : BITBOARD;
WhiteRooks : BITBOARD;
BlackKnights : BITBOARD;
WhiteKnights : BITBOARD;
BlackBishops : BITBOARD;
WhiteBishops : BITBOARD;
BlackQueens : BITBOARD;
WhiteQueens : BITBOARD;
BlackKing : integer;
WhiteKing : integer;
Side : integer;
EP : integer;
end;
// Reprezentacija table u vidu bitboard strukture
// Bitboard strukture za sve bele i crne figure
// Pozicija crnog kralja 0..63
// Pozicija belog kralja 0..63
// Strana na potezu, beli = 0, = 1
// en-passant polje 0..63, ako nije moguće = -1;
BOARDPTR = ^BOARDTYPE;
TTBCache
PTBCache
TSquares
PSquares
TpcCount
PpcCount
=
=
=
=
=
=
Array [0..1048575] of Byte;
^TTBCache;
Array [0..15] of Integer;
^TSquares;
Array [0..9] of Integer;
^TpcCount;
// Hash memorija
// Pozicije figura
// Brojevi figura
function IInitializeTb(Tbloc : PChar) : Integer; cdecl; external 'EGTB.dll'
index 4;
function FTbSetCacheSize(TBCache : PTBCache; Cache_Size : LongWord) : Integer;
cdecl; external 'EGTB.dll' index 2;
function IDescFindFromCounters(pcCount : PpcCount) : Integer; cdecl; external
'EGTB.dll' index 3;
function FRegisteredFun(iTB : Integer; color : Integer) : Integer; cdecl;
external 'EGTB.dll' index 1;
function IndCalcFun2(ITB : Integer; color : Integer; wp : PSquares; bp :
PSquares; ep : Integer; invert : Integer) : Int64; cdecl; external 'EGTB.dll'
index 5;
function L_TbtProBETAble(iTB : Integer; color : Integer; index : Int64) :
Integer; cdecl; external 'EGTB.dll' index 6;
Procedure InitializeTB; // Inicijalizacija DLL sistema.
Function ProbeEGTB(B : BOARDPTR; var score : Integer; plz : Integer) : Boolean;
// Osnovna funkcija za pristup bazi. Ulazni argument je pozicija u
bitboard reprezentaciji a izlaz je vrednost (rastojanje do mata) i dubina.
Dinamički server koji je ugrađen u prikazanu EGTB.DLL biblioteku omogućava da se u
realnom vremenu vrši pristup Nalimov bazi i da u toku obrade stabla vrednosti pozicija budu
servirane glavnom algoritmu za obradu stabla i evaluaciju čvorova stabla. U autorovom programu
Axon II se sa uspehom koristi prikazana .DLL procedura. Pošto je u praksi pokazano da je brzina
pristupa disku kritična, mora se ići na upotrebu velike hash memorije za Nalimov bazu od 16-32
Mb, da bi se postigao efikasan rad celog sistema.
109
6
________________________________________
TEORETSKA ISTRAŽIVANJA
NAPREDNIH ALGORITAMA
U ovom poglavlju biće razmotrena teoretska istraživanja samog autora u oblasti teorije i prakse
naprednih šahovskih algoritama. Ako se uzme u obzir i implementacioni deo rada, sa mnogim
novinama u samoj implementaciji klasičnih i naprednih algoritma, doprinosi su brojniji, ali su u
nastavku izdvojene samo ključne teoretske novine koji nisu direktno povezane sa konkretnom
programskom realizacijom. Primenom prikazanih principa samostalno ili u kombinaciji sa već
postojećim tehnikama, mogu se usavršiti i drugi programi, čime je značaj doprinosa veći od
konkretne primene i realizacije u autorovoj šahovskoj aplikaciji. Najveći broj tehnika koje su
prikazane je verifikovan kako na teoretskom nivou kroz objavljivanje u odgovarajućim radovima,
kao i na praktičnom nivou kroz konkretnu implementaciju u šahovskoj aplikaciji koja se sa
uspehom takmičila protiv šahovskih majstora u realnim turnirskim uslovima.
Teoretski doprinosi mogu se podeliti na tri grupe prema oblastima u kojima se primenjuju. Prva
grupa su radovi u oblasti realizacije konkretnih algoritama za traženje u stablu kao i tehnika koje su
u direktnoj ili indirektnoj vezi sa datom problematikom. U ovu oblast se svrstavaju radovi autora na
definiciji novog principa za detekciju ponavljanja pozicije korišćenjem varijantnih nizova, zatim
formulacija principa nulte evaluacije u aplikacijama za rešavanje matova, teoretska i praktična
istraživanja u vezi sa novom klasom algoritama sa adaptivnom promenom dubine kao i princip
“inteligentnih figura” koji se odnosi na individualizaciju heurističkog znanja u fazi generisanja
poteza za svaku figuru čime se otvara put za efikasnu integraciju generatora poteza i evaluatora. U
drugu grupu problema svrstavaju se radovi iz oblasti paralelizacije šahovskih algoritama na slabo
spregnutim distribuiranim sistemima čime se postulira nov metod paralelizacije koji može da se
koristi na standardnim lokalnim mrežama bez potrebe za skupim višeprocesorskim serverima. Treća
grupa radova je u oblasti baza podataka. U domenu transpozicionih baza otvaranja autor je
definisao nov format za efikasno pamćenje i pristup memorisanim pozicijama, sa teoretskim
kapacitetom od više milijardi pozicija. Novi tip baza otvaranja, o kojima je reč, omogućava
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
automatsku sintezu znanja kroz generisanje novih pozicija u bazi kao i primenu mašinskog učenja
(machine learning) kroz implementaciju specifičnog oblika algoritma za automatsku interpretaciju
šahovskih partija odigranih od strane velemajstora ili drugih vrhunskih programa. U oblasti baza
završnica autor je uspešno razvio nov tip ENAX baza za sve kombinacije 3,4 ili 5 figura koje mogu
nastati u završnici, a koji ima brži pristup od standardnih Nalimov baza, sa sličnim korišćenjem
spoljašnje memorije na hard disku.
6.1 Princip detekcije ponavljanja pozicije korišćenjem varijantnih nizova
Rešenje problema prepoznavanja ponavljanja poteza veoma je značajano za realizaciju potpuno
regularnog algoritma za traženje (searcher). Prema šahovskim pravilima postoje dva slučaja u
kojima se proglašava remi: a) Ako se pozicija u kojoj je ista strana na potezu ponovi tri puta u toku
partije i b) Ako u poslednjih 5o uzastopnih poteza nije došlo do uzimanja figure ili pokreta pešaka.
Imajući u vidu da se pravilo b) može relativno lako implementirati koristeći informacije iz
generatora poteza, pažnju ćemo obrati na znatno teži slučaj a). Suština pravila je sprečavanje
“večnih” partija i omogućavanje da se kroz ne-reverzibilne poteze omogući prirodan progres u
svakoj partiji. Naravno, u prosečnoj šahovskoj partiji visok procenat poteza je manevarske prirode,
čine ga pokreti figura. Stvarni napredak u partiji se generiše promenom strukture figura kroz
razmenu, promociju i pokrete figura koji suštinski transformišu poziciju. Imajući u vidu prirodu
šahovske igre nije dovoljno ispitati pozicije koje nastaju samo u toku generisanja stabla odlučivanja
već je potrebno imati u vidu i situaciju nastalu pre tekuće pozicije - “istorija” partije.
Teoretsko i praktično rešenje navedenih problema primenom novog metoda varijantnih nizova
detaljno je obrađeno u nastavku rada.
6.1.1
Standardni pristupi u rešavanju problema
Za prepoznavanje poklapanja pozicija može se iskoristiti ista struktura memorisanja koja se koristi i
kao ulaz u generator poteza - proceduru koja ima zadatak da generiše sve legalne poteze pošavši od
tekuće pozicije u bilo kom delu stabla odlučivanja. Bez obzira na tip kodiranja figura koji može
znatno varirati, zajednička osobina je postojanje pozicione matrice koja memoriše trenutnu poziciju
nastalu u nekom delu stabla. Pored ovih, nekompresovanih vidova predstavljanja pozicije, javljaju
se i razni drugi modeli kompresije i predstavljanja pozicije: EPD dijagrami, FEN ... Bez obzira na
manju količinu memorije koju zahtevaju ovi modeli, naročito u pozicijama u završnici sa velikim
brojem praznih polja, oni su neupotrebljivi u praktičnoj realizaciji. Osnovni razlog je u tome što
vreme kompresije/dekompresije u pomenute formate višestruko nadmašuje vreme potrebno za samo
poređenje tako da je korišćenje ovih formata neracionalno u pogledu brzine izvršavanja procedura.
Sa druge strane, potrebno je efikasno rešiti problem internog predstavljanja šahovske table i
kodiranja figura. U zavisnosti od potreba koje zahteva pre svega procedura za generisanje poteza
organizacija table može biti u raznim formatima: 8x8, 1ox8, 1ox1o, 12x1o ili 12x12 bajta. U
programu Axon I koristi se matrična struktura 12x12 bajta. Naravno, u pogledu vremena poređenja
najbolje performanse pruža struktura 8x8 bajta koja predstavlja direktnu sliku šahovske table.
Korišćenje drugih matričnih organizacija dovodi do proporcionalnog usporenja ali su dobici na
drugoj strani; brže prepoznavanje granica table, rad sa jednom dimenzijom kodiranja umesto sa dve
... Pošto se poređenje vrši samo u slučaju kada je ista strana na potezu potrebno je ispitivati samo
pozicije sa parnom odnosno neparnom dubinom u zavisnosti od toga da li tekuća pozicija od koje se
počinje ispitivanje ima parnu ili neparnu dubinu. Time se automatski redukuje broj mogućih
ispitivanja na 5o%.
U ranijim poglavljima u radu, prilikom definicije Zobrist metoda za generisanje 64-bitnih
pozicionih ključeva, naglasili smo značajnu primenu metode za realizaciju algoritma za
111
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
prepoznavanje ponavljanja pozicija. Bez obzira na teoretsku mogućnost greške koja je veoma mala,
korišćenje 64-bitnih Zobrist ključeva za prepoznavanje pozicije umesto celih 512-bitnih struktura je
znatno efikasnije tako da gotovo svi moderni programi koriste taj pristup. Nedostatak Zobrist
metode je u potrebi da se u realnom vremenu koristi višedimenzionalna matrica slučajnih brojeva,
što nije moguće efikasno realizovati kod sistema koji nemaju brzu primarnu ili sekundarnu
procesorsku hash memoriju. Takođe, kod sistema koji sadrže hardverski implementirane procedure
korišćenje memorijskih tabela je veoma teško implementirati, tako da je za ove primene potrebno
potražiti druge pristupe. U toku rada sa verzijama programa koji nemaju implementiranu Zobrist
metodu, pokazalo se da je moguće razviti efikasani algoritam koji za svoj rad neće koristiti 64-bitne
memorijske strukture već varijantne nizove poteza koji su kodirani u 16-bitnom formatu.
Standardni pristup se može formalno definisati na sledeći način:
Konačna sekvenca poteza definisana je nizom p1, p2, p3, …., pn, gde je pi pozicija (ili 64-bit
Zobrist ekvivalent pozicije) posle (i-1)tog poteza za i = 2,3,….n. Svaki potez između dve
susedne pozicije pi-1 , pi je definisan i legalan. Pretpostavka je da je pi<>pj za i<>j i i, j < n
kada se primene na konkretno stablo odlučivanja. Standardna metoda podrazumeva proveru za
promenjivu i tako da je pi = pn za i = n-1, n-2, …,1. Algoritam može biti ubrzan jer je pi<>pj
za parne promenjive i, i neparne promenjive, odnosno za pozicije na kojima su suprotni igrači
na potezu.
6.1.2
Pristup preko varijantih nizova
Prilikom razvoja stabla koristeći bilo koji regularan algoritam traženja: ALFA-BETA, PVS,
NegaScout; koji ima normalan redosled promena strana (ovde se izuzima null-move koji
dozvoljava jednoj strani da igra dva puta) generišu se tzv. varijantni nizovi koji u suštini
predstavljaju liste poteza čiji je početak u korenu stabla a kraj u terminalnom nodu koji se evaluira.
Pojam je veoma sličan pojmu best-line. Zapravo, best-line je varijanta koja sadrži najbolje
sopstvene i protivničke poteze. U zavisnosti od načina kodiranja imamo različite tipove varijantnih
nizova [Vučković, 2004b]. U cilju unifikacije i kompresije informacija može se uvesti poziciono
označavanje poznato i standardizovano kod mnogih šahovskih programa, najviše pod Winboard
okruženjem. Neka je data pozicija prikazana na dijagramu sa slike 6.1:
Slika 6.1 Pozicija u kojoj beli remizira korišćenjem pravila večitog šaha.
Korišćenjem 16-bitne pozicione notacije, o kojoj je reč, formira se varijantni niz koji opisuje
seriju poteza damom i kraljem koji formiraju remi poziciju na bazi večitog šaha:
C1H6 H8G8 H6G5 G8H7 G5H5 H7G7 H5G5 G7H8 G5H6 …
112
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Koristeći poziciono označavanje lako je dobiti informaciju o početnom i odredišnom polju.
Analizirajući strukturu ovakvog načina označavanja, jasno je da je potrebno 4 bajta (32 bita) za
kodiranje jednog poteza. Međutim, moguće je broj bitova svesti na 16. Ako se posmatra poziciona
matrica koja ima 8x8 polja, za njihovo kodiranje je potrebno 6 bita - 64 kombinacije. Za slučaj
matrica 12x12 imamo 144 polja ili 8 bita za označavanje. To znači da se može definisati 16-bitni
sistem kodiranja tako što se izvorno i odredišno polje kodiraju sa po 8 bita. Ovaj jednostavan
sistem kodiranja je osnova za razvoj originalne procedure za prepoznavanje bazirane na varijantnim
nizovima. Osnovna premisa je da se informacije na osnovu kojih se vrši prepoznavanje dobijaju ne
na osnovu pozicije već na osnovu varijante koja je kodirana na način koji je prikazan. U programu
Axon I, celokupna organizacija generatora poteza, sistema za pretragu stabla, funkcija za
odigravanje poteza zasnovana je na prikazanom načinu kodiranja. Varijantni nizovi koji se
formiraju duž grana stabla odlučivanja do terminalnog noda u toku rada same procedure za traganje
se koriste kao ulaz za proceduru za prepoznavanje ponavljanja poteza.
Nov pristup preko varijantnih stringova može se formalno definisati na sledeći način:
Konačna sekvenca poteza može se predstaviti kao (p1,a1,b1), (p2,a2,b2),…,(pn,an,bn) gde je pi
figura koja se kreće, odnosno njen kod, ai i bi su početno i destinaciono polje i-tog poteza na
tabli, respektivno. Algoritam omogućava tranziciju nad parom uređenih trojki (pi,ai,bi) i
(pj,aj,bj) u trojke (pi,ai,bj) i (pi,0,0) za uslove pi=pj , bi=aj i i<j. Potez (p,a,b) gde je (a=b) se
naziva zatvoreni lanac. Simetrični potezi (pi,ai,bi) i (pj,aj,bj) gde je pi=pj , ai=bj i bi =aj
generišu dva zatvorena lanca (pi,0,0) i (pj,0,0). Kada nijedna tranzicija nije moguća,
ponavljenje poteza se detektuje jedino kada su svi pozicioni lanci zatvoreni i kada je ista strana
na potezu. Kao i u standardnoj metodi, postoji fleg koji registruje da li je odigrani potez
reverzibilan ili nije čime se skraćuje dužina varijantnog stringa za obradu i poboljšava
efikasnost.
6.1.3 Strukture podataka
U nastavku ćemo definisati tipove i strukture podataka koje ćemo koristiti u realizaciji algoritma
prepoznavanje na bazi varijantnih stringova. Definicije kao i algoritam ćemo prikazati na
programskom jeziku Pascal.
Formalnu definicija tipa potez čini 24-bitna pakovana struktura:
Move_Type = packed record
From_square:byte;
To_square:byte;
Piece_Flags:byte;
end;
Značenje pojedinih polja u strukturi podataka je:
From_square : adresa početnog polja,
To_square : adresa destinacionog polja,
Piece_Flags : 4-bitni kod figure i 4 bitni flegovi. Kombinacijom ova dva tipa
podatka, dobija se konačna definicija Piece_Flags:=16*Piece + Flags.
Nad ovim osnovnim tipom podatka grade se dve osnovne strukture podataka:
LiST_OF_MOVES: array [0..254] of move_type;
{Lista poteza }
113
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
index:integer;
{Pokazivač na listu poteza}
Lista poteza je jednodimenzionalni niz nad definisanim tipom u kome se pamti varijantni string koji
se analizira.
CHAIN_LIST: array [1..16] of move_type;
UnClosed_chains: word;
{Konkatenaciona lista}
{Broj otvorenih lanaca}
Konkatenaciona lista je osnovna struktura podataka u koju se smeštaju potezi nad kojima se vrši
analiza. Generisanje konkatenacione liste na osnovu liste poteza obavlja se primenom 3 osnovna
pravila tranzicije, refleksije i simetrije u postupku koji će se detaljno izložiti u nastavku. Promenjiva
UnClosed_chains ima ključni karakter za rad algoritma jer ona predstavlja brojač nezatvorenih
lanaca u konkatenacionoj listi. Kada je vrednost tog brojača 0, prepoznato je ponavljanje poteza.
Obe strukture podataka su jednodimenzionalni nizovi, njima se lako pristupa i po svojoj efikasnosti
ne zaostaju za klasičnim pristupima baziranim na 64-bitnim Zobrist ključevima.
6.1.4. Algoritam
Pre definisanja samog algoritma za prepoznavanje ponavljanja pozicija korišćenjem varijantnih
nizova, formalno ćemo definisati tri pravila čijom se zajedničkom primenom nad 16-bitnim
varijantnim nizom, prepoznaje sekvanca ponavljanja poteza. Pravila su nazvana prema operacijama
koje se vrše sa elementima varijantnog stringa a analogno određenim matematičkim pravilima:
Pravilo tranzicije: Ako se tekući potez može napisati u formi Piece_AnBm i ako je data
konkatenaciona lista chain_list u kojoj postoji potez oblika Piece_BmCq, predhodni sadržaj
u konkatenacionoj listi chain_list se zamenjuje novim sadržajem Piece_AnCq.
Pravilo refleksije: Ako konkatenaciona lista chain_list posle primene pravila tranzicije
sadrži potez tipa AnAn, ovaj potez se briše iz liste. Brojač unclosed_chains se umanjuje za
1.
Pravilo simetrije: Ako se posle primene pravila tranzicije u konkatenacionoj listi
chain_list nađu potezi Piece_AnBm i Piece_BmAn, oni se brišu iz liste. Brojač
unclosed_chains se umanjuje za 2. Pravilo simetrije detektuje situacije kada dve identične
figure zamene mesta.
Slika 6.2 Ilustracija rešenja problema zamene identičnih figura.
Pretpostavimo da varijantni niz koji opisuje kretanje dva skakača ima sledeći oblik:
C4A3 D2C4 A3B1 B1D2
114
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Kao rezultat nastala je idetična pozicija samo što su skakači sa c4 i d2 zamenili mesta. Sledeća
tabela ilustruje situaciju u strukturama podataka posle svakog poteza:
Tabela 6.1 Tabela prikazuje rešenje problema zamene mesta idetičnih figura.
Potez
LIST_OF_MOVES
C4A3
N_C4A3
Promenjiva
UnClosed_chains
1
D2C4
N_C4A3 N_D2C4
2
A3B1
B1D2
N_C4B1 N_D2C4
N_C4D2 N_D2C4
2
2
---
---
0
Pravilo koje je
primenjeno
Ubacivanje poteza u
listu
Ubacivanje poteza u
listu
Tranzicija (c4a3 i a3b1)
Tranzicija (c4b1 i b1d2).
Pravilo simetrije je
primenjeno (N_c4d2 i
N _d2c4).
Ponavljanje pozicije je
detektovano
Procedura za prepoznavanje radi korektno u svim slučajevima samo ako se primene sva tri pravila u
svakom prolazu kroz listu poteza. Sam algoritam procedure za prepoznavanje ponavljanja pozicija
korišćenjem varijantnih nizova može se opisno predstaviti sledećim nizom koraka:
•
Početni pokazivač index se postavlja na adresu poslednjeg upisanog poteza u listu poteza,
•
Svi elementi konkatenacione liste chain_list se postavljaju na 0. Brojač unclosed_chains se
postavlja na 0.
•
Pretraživanje liste poteza obavlja se od poslednje adrese prema nižim adresama. U slučaju da se
u listi poteza pronađe elemenat čiji je bit najveće težine 1 - odmah se izlazi iz procedure jer se
radi od ne-reverzibilnom potezu (pokretanje pešaka ili uzimanje figure) pa nije pronađeno
ponavljanje pozicije. Ako je potez reverzibilan, uvodi se u listu ulančavanja poštujući sledeća
pravila tranzicije, refleksije i simetrije koja su već opisana:
Ako u listi ulančavanja postoji potez čije je destinaciono polje jednako početnom polju tekućeg
poteza vrši se ulančavanje transformacijom poteza u listi ulančavanja. Primer: ako je u listi
ulanačavanja potez A1B1 a tekući potez B1E5 onda se umesto postojećeg A1B1 u listu upisuje
A1E5. Ovim je ilustrovana primena pravila tranzicije. Ako je posle primene pravila tranzicije
došlo do izjednačavanja polaznog i destinacionog polja potez se briše iz liste ulanačavanja
(pravilo refleksije). Primer: ako je u listi ulanačavanja potez A1B1 a tekući potez B1A1
primenom tranzicije bi došlo do generisanja poteza A1A1 tako da se umesto toga odgovarajuće
mesto u listi ulančvanja popunjava nulom. U slučaju da je došlo do situacije da dve idetične
figure razmene mesta, pimenjuje se pravilo simetrije.
Osnovna logika procedure je zatvaranje varijantnih lanaca u listi ulančavanja. Samo u
slučaju da se zatvore svi varijantni lanci (što drugim rečima znači da su svi elementi liste
ulančavanja jednaki 0) prepoznato je ponavljanje poteza. Da bi ilustrovali ovo pravilo
predpostavimo da imamo varijantu C1H6 H8G8 H6G5 G8H8 G5H6 … Pošto je skeniranje
u obrnutom redosledu lako je uvideti da se posle prva dva koraka formiraju dva potencijalna
lanca poteza (G5H6 i G8H8), posle trećeg koraka prvi lanac se zatvara (H6G5) a posle
četvrtog (H8G8) i drugi, tako da se proglašava slučaj ponavljanja poteza. Ako se u bilo kom
trenutku zatvore svi varijantni lanci u listi ulančavanja pronađeno je ponavljanje pozicije.
115
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Postupak se ponavlja za svaki potez iz liste poteza. Ako se dodje do dna liste ili do nekog
poteza koji ima postavljen bit najveće težine, izlazi se iz procedure - ponavljanje pozicije nije
nađeno.
Na osnovu opisanog metoda i struktura podataka može se implementirati odgovarajuća
procedura na programskom jeziku Pascal koja uspešno vrši supstituciju klasičnog algoritma za
prepoznavanje koji je baziran na primeni 64-bitnih Zobrist ključeva. Listing procedure sa
komentarima prikazan je u nastavku rada:
Function PERPETUAL(move_TOS:word):Boolean;
{Definicija konstanti i promenjivih}
Const piece_mask= 11110000b;
flags_mask= 00001111b;
color_mask=10000000b;
chain_list_no=16;
Var chain_list:array [1..chain_list_no] of move_type;
unClosed_chains:integer;
f,g,index:integer;
found_transition,found_symetry,same_side_on_move:Boolean;
BEGIN
{Inicijalizacija promenjivih i konkatenacione liste}
PERPETUAL:=FALSE; index:=move_TOS; unClosed_chains:=0;
for f:=1 to chain_list_no do chain_list[f].piece_flags:=0;
{Glavna petlja koja skenira listu unazad, pošavši od promenjive index}
REPEAT
{Ako je u pitanju ne-rekurzivni potez izlazi se iz procedure; nije pronađeno
ponavljanje pozicije}
IF (list_of_moves[index].piece_flags AND flags_mask)<>0 then EXiT;
{Logička promenjiva same_side dobija vrednost TRUE ako je ista strana na potezu
kao i ona strana koja je na početku varijantog niza. Početak liste se indeksira
promenjivom MOVE_TOS, kraj liste promenjivom index}
IF
(list_of_moves[index].piece_flags AND color_mask) =
(list_of_moves[move_TOS].piece_flags AND color_mask)
THEN same_side_on_move:=TRUE
ELSE same_side_on_move:=FALSE;
{Ispitivanje sadržaja konkatenacione liste u slučaju da je pravilo tranzicije
primenjivo}
f:=1; found_transition:=FALSE;
WHILE (f<=chain_list_no) AND (not found_transition) DO
116
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
BEGIN
IF (list_of_moves[index].piece_flags and piece_mask =
chain_list[f].piece_flags and piece_mask)
AND (list_of_moves[index].from_square= chain_list[f].to_square)
THEN
BEGIN
{Primena pravila tranzicije}
found_transition:=TRUE;
chain_list[f].to_square:=list_of_moves[index].to_square;
END;
f:=f+1;
END;
{Ako je pravilo tranzicije primenjeno u predhodnoj grani, vrši se ispitivanje
primenljivosti pravila refleksije ili simetrije }
iF found_transition THEN
BEGIN
iF (chain_list[f].to_square=chain_list[f].from_square) then
BEGIN
{Primenjeno je pravilo refleksije}
Chain_list[f].piece_flags:=0;
UnClosed_chains:= UnClosed_chains-1;
END
ELSE
BEGIN
g:=1;
found_symetry:=FALSE;
{Ispitivanje konkatenacione
pravilo simetrije}
liste
za
slučaj
kada
je
moguće
primeniti
WHILE (g<=chain_list_no) AND (f<>g) AND (not found_symetry) DO
BEGIN
IF (chain_list[f].piece_flags and piece_mask =
chain_list[g].piece_flags and piece_mask)
AND (chain_list[f].from_square = chain_list[g].to_square)
AND (chain_list[f].to_square = chain_list[g].from_square)
THEN
BEGIN
{Pravilo simetrije je primenjeno}
found_symetry:=TRUE;
chain_list[f].piece_flags:=0;
chain_list[g].piece_flags:=0;
UnClosed_chains:= UnClosed_chains-2;
END;
g:=g+1;
END;
END;
END
ELSE
BEGIN
{U slučaju da pravilo tranzicije ne može da bude primenjeno, novi potez se
ubacuje u konkatenacionu listu – realizuje se operacija insert}
FOR f:=1 to chain_list_no do
IF (chain_list[f].piece_flags=0) then
117
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
BEGIN
chain_list[f]:=list_of_moves[index];
UnClosed_chains:= UnClosed_chains+1;
END;
END;
index:=index-1;
UNTIL ((unClosed_chains=0) AND same_side_on_move) OR (index=0);
{Ako su svi lanci u konkatenacionoj listi zatvoreni i ako je na kraju
varijantnog niza ista strana na potezu kao i na početku – detektovano je
ponavljanje pozicije }
IF ((unClosed_chains=0) AND same_side_on_move) THEN PERPETUAL:=TRUE;
END;
Značaj efikasne implementacije algoritma za prepoznavanje pozicija naročito je izražen u
završnici, gde je frekvencija pojave poklapanja pozicija izuzetno visoka, a dubine proračuna iznose
u proseku preko 15 polupoteza. Kao primer, prikazaćemo poziciju iz završnice na slici 6.3. U ovoj
poziciji dobitnički potez za belog je Th8! sa idejom dovođenja belog kralja na polje b7 i
promocijom slobodnog pešaka. Kako je pozicija otvorena, crni ima mogućnost da serijom šahova
uspori plan belog. Na tabli je samo 5 figura sa dugačkim sekvencama šahova za obe strane tako da
je značaj procedure za detekciju ponavljanja pozicija veoma jasno izražen.
Slika 6.3 Pozicija iz završnice koja ilustruje značaj efikasnog prepoznavanja ponavljanja pozicije.
Koristeći prikazanu poziciju proveden je eksperiment sa isključenom i uključenom procedurom za
detekciju ponavljanja pozicije. Za analizu je korišćen modifikovan autorov program Axon I na PC
hardveru sa AMD 2200+ procesorom i 256 DDR memorije. Rezultati su prikazani u tabeli 6.2 i 6.3
respektivno.
118
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Tabela 6.2 Analiza pozicije bez procedure za detekciju ponavljanja pozicije.
Dubina
Potez
Evaluacija
1
2
3
4
5
6
7
8
9
10
11
12
G1F1
G1F1
G1F1
G1F1
G1F1
A8H8
G1F1
G1F1
A8H8
A8H8
A8H8
A8H8
+2.30
+2.23
+2.44
+2.37
+2.42
+2.47
+2.48
+2.52
+2.55
+2.55
+2.65
+5.04
Broj
čvorova
929
1396
7299
18964
43701
274992
364926
1541540
2252388
2062293
4635873
9770293
Ukupno je obrađeno 1 193 867 terminalnih čvorova uz 20 974 594 generisanih pozicija. Sledeći
eksperiment je proveden sa uključenom procedurom za detekciju ponavljanja pozicije:
Tabela 6.3 Analiza pozicije sa procedure za detekciju ponavljanja pozicije.
Dubina
Potez
Evaluacija
1
2
3
4
5
6
7
8
9
10
11
12
G1F1
G1F1
G1F1
G1F1
G1F1
A8H8
G1F1
A8H8
A8H8
A8H8
A8H8
A8H8
+2.30
+2.23
+2.44
+2.37
+2.41
+2.47
+2.48
+2.47
+2.55
+2.55
+2.55
+4.87
Broj
čvorova
929
1396
7299
18883
46990
263862
399843
2806126
693285
1451126
3618668
8524217
U ovom slučaju ukupan broj terminalnih čvorova koji je obrađen iznosi 977.942, sa 17.832.624
generisanih pozicija. Ukupno je registrovano 14.941 slučajeva detekcije ponavljanja pozicije.
119
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Komparativna analiza u predhodna dva slučaja pokazuje da je na istoj dubini program do
konačnog rezultata došao analizirajući 18% manje terminalnih pozicija i 15% manje generisanih
pozicija. Uključivanje rada procedure za obradu varijantih stringova usporava generalno program za
oko 10% u završnici, ali procenat usporenja značajno pada u fazi središnjice ili u situacijama kada
postoji veliki broj ne-reverzibilnih poteza. Imajući u vidu sve parametre, ukupni dobitak na
prikazanom primeru iznosi oko 10%. Progresija stabla za slučaj kada je uključena procedura za
detekciju ponavljanja pozicija je brža zato što u tačkama gde je registrovan remi evaluacija iznosi
0.00 tako da nije potrebno ispitivati podstablo iz tog čvora, čime se štedi na broju pozicija koje je
potrebno obraditi.
Dakle, možemo da zaključimo da se novina koju je autor preložio u oblasti detekcije
ponavljanja pozicija odnosi na nov pristup u rešavanju koji se oslanja na obradu varijantnih nizova,
za razliku od standardnog pristupa metodom Zobrista korišćenim u najvećem broju slučajeva.
Eksperimenti pokazuju efikasnost novog pristupa kako u pogledu implementacije tako i u pogledu
povećanja brzine izvršavanja. Značajno je napomenuti, da je prednost nove metode prilagodljivost i
na sisteme koji su hardverski orijentisani (Hydra), a na kojima zbog nedostatka memorije nije
moguće implementirati klasičan Zobrist hash metod. U ovom poglavlju je razmatran osnovni
algoritam na programskom jeziku Pascal, čija je implementacija na mašinskom jeziku deo
šahovskog programa Axon. Modifikovana verzija programa korišćena je za provođenje
eksperimenta koji dokazuje da se primenom nove metode u svim slučajevima postižu uštede u
obradi stabla preko 10% naročito u završnicama, gde je procenat uštede znatno veći. Pošto u
programu Axon nije implementirana procedura za prepoznavanje koja radi korišćenjem Zobrist
pristupa, nije bilo moguće uporedno analizirati ova dva metoda, ali je autor uveren da iz razloga
koji su detaljno navedeni u ovom poglavlju, nov pristup ima svakako nesumljive prednosti u
pogledu implementacije, načina izvršavanja i prilagodljivosti okruženjima sa malo hash memorije
na raspolaganju. Ovaj zaključak ja baziran na činjenici da su memorijske strukture nad kojima se
vrši obrada u slučaju varijantnih nizova znatno kompaktnije od onih upotrebljenih u klasičnom
pristupu.
6.2 Princip nulte evaluacione funckije u aplikacijama za rešavanje matova
(Mate Solver Application)
Problemski šah predstavlja značajnu oblast u šahovskoj teoriji i praksi bez obzira na njegovu znatno
manju popularnost u odnosu na klasičan šah. Za razliku od standardne šahovske igre, gde svaka
partija počinje od osnovne pozicije i gde se povlače potezi sa ciljem dobijanja materijala i
prisiljavanja protivnika na predaju najčešće zbog materijalnih gubitaka, u problemskom šahu se
polazi od pozicije koja predstavlja zadati problem u kome je potrebno naći jedan ili više ključnih
poteza koji vode do rešenja, najčešće tipa matiranje u N poteza. Nalaženje osnovnog poteza
praćenog sekvencom poteza koji definišu sve grane i varijante rešenja predstavlja konačni cilj ove
klase šahovske igre. Takođe, kompozicija šahovskih problema traži još veći stepen šahovske
imaginacije i kreativnosti, potpuno drugačijeg vida od one koja se javlja u fazi odigravanja partije
protiv realnog protivnika.
Uvođenje kompjutera u oblast problemskog šaha je pre svega u funkciji stvaranja pomoćnog
alata koji će kompozitoru ili rešavaču šahovskih problema pružiti mogućnost brzog i tačnog
nalaženja rešenja datog problema u najkraćem broju poteza. Pristupi koji se koriste za realizaciju
aplikacije za rešavanje matova su u principu veoma slični postulatima za rešavanje problema u
klasičnom šahu ali uz poštovanje osnovnih razlika; algoritmi koji se koriste moraju da budu u
potpunosti ne-heuristički kako bi se izbegla svaka mogućnost greške koja može da se javi zbog
primene metoda za selektivno sečenje stabla. Imajući ovo u vidu, za realizaciju algoritma je najbolje
upotrebiti klasičnu ALFA-BETA brute-force proceduru. Iz teorije je poznato da ako se program
bazira na ovom tipu osnovnog algoritma, mora se obezbediti visok stepen efikasnosti i brzine rada
celog sistema, najčešće korišćenjem brzog hardvera i mašinski orijentisanih programskih jezika.
120
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Evaluaciona funkcija u ovom vidu aplikacija mora da bude tako koncipirana da bude što
jednostavnija i brža kako bi ukupna efikasnost sistema bila zadovoljavajuća. Klasični pristupi
predviđaju korišćenje samo materijalne evaluacije u odnosu pešak:skakač:lovac:top:dama =
1:3:3:5:9, čime se postiže najveći broj sečenja u stablu. Iz teorije je poznato da su evaluacione
funkcije sa grubom rezolucijom pogodnije za implementaciju u ALFA-BETA orijentisanim
programima. Za prikazani odnos vrednosti figura, rezolucija evaluacione funkcije je maksimalna i
ima vrednost jednog pešaka.
Istražujući u ovoj oblasti, autor je došao do ideje da se princip smanjivanja rezolucije
evaluacione funkcije može dovesti do ekstrema, i da se umesto materijalne evaluacije može
upotrebiti nulta evaluaciona funkcija, koja svim terminalnim čvorovima dodeljuje vrednost
0.00 [Vučković, 2004a].
Ovaj radikalni pristup se oslanja na činjenicu da je cilj programa u problemskom šahu rešavanje
problema, odnosno određivanje matova u određenom broju poteza, a ne evaluiranje krajnjih pozicija
u korist belog ili crnog [Vučković, 2001a]. Pošto je definicija mata situacija u kojoj je kralj neke
strane u šahu i nema legalnih poteza kojima bi prešao u drugu poziciju, jasno je da se detekcija
situacije matiranja, kao i detekcija ponavljanja pozicija, može obaviti na nivou algoritma za
pretragu stabla, nezavisno od tipa i vrednosti evaluacione funkcije. Treći slučaj, kada je kralj u pat
poziciji (nije u šahu, ali strana koja je na potezu nema ni jedan legalan potez koji može da povuče)
se takođe obrađuje na nivou algoritma za pretragu. Imajući u vidu pristup korišćenjem nulte
evaluacione funkcije, mogu se izdvojiti samo 3 moguće vrednosti koje svaki čvor u stablu može da
ima:
– Kada nije pronađen mat, kada je kralj neke strane u pat poziciji, ili
Vrednost 0.00
kada je detektovano ponavljanje pozicije.
Vrednost +MT/n – Kada je u podstablu pronađen mat u n polupoteza.
Vrednost -MT/n – Kada je u podstablu pronađen mat koji suprotna strana daje u n
polupoteza.
Primenom ovako ekstremne redukcije broja mogućih vrednosti evaluacije u svakom čvoru
stabla na samo tri različite vrednosti dolazi se do maksimiziranja broja sečenja u stablu primenom
ALFA-BETA algoritma, čime se maksimalno smanjuje broj čvorova koje je potrebno ispitati za
detekciju mata u N poteza. Drugi korisni efekat je u ekstremnom ubrzavanju rada evaluacione
funkcije. Poznato je da evaluaciona funkcija spada u sporije procedure, tako da u zavisnosti od
kvaliteta i heuristika koje su ugrađene 10-40% vremena koje se troši na proračun stabla, algoritam
provodi izvršavajući evaluaciju pozicije. Princip nulte evaluacije omogućava da se evaluiranje
pozicije obavi maksimalno brzo u samo jednoj naredbi tipa evaluation:=0; koja se na mašinski
jezik prevodi samo u jednoj naredbi: mov [evaluation],0 . Na taj način, procenat vremena koje se
provodi u evaluacionoj funkciji je blizu 0% tako da se maksimalno ubrzava ukupni rad ostatka
programa. Primenom ovih principa realizovana je aplikacija za rešavanje šahovskih problema tipa
mat-u-N poteza [Vučković, 2003a]. Jezgro aplikacije prikazano je na sledećem listingu na
programskom jeziku Pascal:
121
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
procedure searcher;
label l1,l2,l3,lup,lend;
var move,alter:word;
begin
{Obavlja se Shannon type-A proračun stabla}
depth:=0; analized_moves:=0; stack[0].alter:=0; { Inicijalizacija osnovnih promenjivih…}
L1: GENERATOR;
{ <- Generator poteza. Težine poteza se automatski dodeljuju koristeći
istu proceduru. }
if stack[depth].full=0 then
begin
stack[depth].minmax:=CUTOFF; {Ako je u pitanju osnovni čvor, CUTOFF konstanta
se dodeljuje minmax promenljivoj}
goto L3;
end;
L2: alter:=stack[depth].alter;
{ ALTER predstavlja indeks tekućeg poteza }
move:=stack[depth].moves[alter].move; { MOVE predstavlja tekući potez }
combination[depth]:=move;
{ Pamti se glavna varijanta. }
asm
mov dx,move
call MOVE_FORWARD;
end;
{ Asemblerska procedura za igranje jednog poteza unapred }
inc(depth); fluid:=fluid+next_raw; { Povećavanje dubine pretrage }
if depth<max_depth then goto L1; { Ako je nova dubina veća od horizonta, evaluira se čvor }
stack[depth].evaluation:=0;
LUP:
{ Nulta evaluacija terminalnog čvora }
if depth=0 then goto LEND; {Ako se evaluacija obavlja na nultom čvoru, izlaz ! }
L3: MOVE_BACK;
{ Asemblerska procedura za vraćenje jednog poteza unazad }
dec(depth); fluid:=fluid-next_raw; { Umanjivanje dubine, vrećanje nivoa za jedan }
alter:=stack[depth].alter;
stack[depth].moves[alter].evaluation:=stack[depth+1].minmax;
inc(stack[depth].alter);
if stack[depth].alter>=stack[depth].full then goto LUP; {Ako su svi potezi obrađeni u ovom
čvoru, vraćanje na gornji nivo}
goto L2;
LEND: { Kraj programa. }
end;
Slika 6.4 Geniss Mate Solver v2.0 – jezgro programa.
Ključne karakteristike programa su:
G.M.S predstavlja ALFA-BETA, Shannon type-A program za pretragu. Svi legalni potezi se
ispituju do određene dubine pri čemu se dubina pretrage povećava iterativno. Program je
univerzalnog karaktera i rešava sve šahovske probleme u najmanjem broju poteza.
122
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Standardni ALFA-BETA algoritam u kombinaciji sa nultom evaluacionom funkcijom
postiže visoku efikasnost rada.
Nulta evaluaciona funkcija se realizuje koristeći samo jednu mašinsku naredbu tako da je
ekstremno brza. Generator poteza proizvodi listu legalnih poteza u svakoj poziciji zajedno
sa njihovim heurističkim težinama, čime se omogućava efikasno sortiranje poteza već na
osnovnom nivou, bez potrebe za korišćenjem drugih tehnika. Ako generator poteza
detektuje napad na kralja i ako je broj legalnih poteza 0, detektovan je mat.
Radna verzija programa je u potpunosti napisana na mašinskom jeziku čime se postiže
maksimalno korišćenje potencijala procesora. Kod predstavlja mešavinu 16-bitnog i 32bitnog mašinskog jezika i pogodniji je za izvršavanje na AMD procesorima u odnosu na
INTEL.
6.2.1
Eksperiment
Komparativne analize pokazuju da G.M.S. koji radi na prosečnoj PC platformi, u ograničenim
vremenskim uslovima, bez teškoća nadmašuje ljudske oponente u rešavanju problema, čak i
velemajstore problemskog šaha. To je osnovni razlog zašto programima sličnog tipa nije dozvoljeno
da učestvuju na turnirima problemskog šaha i da se takmiče protiv ljudskih oponenata. Efikasnost
programa G.M.S. potvrđena je i testirana na velikom broju pozicija koje se koriste za takmičenja u
profesionalnom problemskom šahu (Chess Informant, 2000). Program je rešio sve probleme tipa
mat-u-N poteza, a kod određenih primera našao alternativna rešenja i varijante. Kao ilustraciju
izabran je jedan težak problem koji je prikazan na dijagramu sa slike 6.5:
Slika 6.5 Mat-u-6 problem (primer).
Tabela 6.4 Eksperimentalni rezultati.
Pote
z
GEN
EVL
S (G/T)
T (sec)
1
2
3
4
5
6
1-6
922
24034
320008
3973630
44689880
99323877
148332046
28
678
8463
103514
1141950
2457682
3712315
4077144
7638638
7270111
7240207
<< 1 sec
<< 1 sec
< 1sec.
1
6
14
21
123
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Rešenje problema (1. Nd6+ Kc5 2. Nb5 Kc4 3. Bf5! Re3 4. Nd6+ Kc5 5. Ne4+ Kc4
6. Nd2++) sadrži neke neočekivane poteze manevarske prirode. Eksperiment je proveden
koristeći G.M.S. v2.0 aplikaciju. Dubina pretrage se inkrementalno povećavala, od dubine 1
do dubine 6. Prva pronađena matna sekvenca predstavlja rešenje. Hardver koji je korišćen u
eksperimentu je 1Ghz Pentium Celeron sa 128Mb operativne memorije. Rezultati
eksperimenta su prikazani u tabeli 6.4. Simboli prikazani u tabeli imaju sledeća značenja:
PLY – dubina pretrage u polupotezima (depth=2*ply-1),
GEN – broj generisanih pozicija,
EVL – broj evaluiranih terminalnih pozicija,
S (G/T) – NPS faktor - broj generisanih pozicija u sekundi,
T –Ukupno vreme obrade (u sekundama).
Rešenje problema je pronađeno na dubini 6, obrađujući samo 10% od ukupnog stabla,
zahvaljujući dobrom redosledu poteza (move ordering). Analiza eksperimentalnih rezultata
ukazuje na neke osnovne činjenice:
•
Ukupna efikasnost rada programa je veoma visoka. Na dubini 6, program postiže
brzinu obrade od oko 6.3 miliona pozicija u sekundi i 175.548 evaluacija u sekundi.
•
U zavisnosti od pozicije, svi problemi koji predviđaju rešavanje matova od 2-4 poteza
se obrade za manje od sekunde, dok je za rešavanje matova u 5 ili 6 poteza potrebno
manje od minute. U turnirskim uslovima, u kojima je predviđeno rešavanje setova
problema za ograničeno vreme, program po rezultatima višestruko nadmašuje
profesionalne rešavače problema.
•
Stablo odlučivanja koje se generiše u toku izvršavanja G.M.S. programa raste
eksponencijalno, analogno primeni algoritama u klasičnom šahu. Upotrebom
prikazanih metoda i tehnika za sečenje stabla, faktor ekspanzije se smanjuje, ali
problem kombinatorne ekplozije i dalje ostaje prisutan. Na primer, za obradu stabla na
dubini 9 (ply=5) G.M.S. generiše oko 44.7 miliona pozicija i 1.1 milion terminalnih
čvorova u stablu. Ako pretpostavimo da jedan čvor ima 20 legalnih poteza kao izlaz,
na nivou 9 postoji približno 209=512 milijardi pozicija. Zahvaljujući efikasnim
tehnikama sečenja stabla, za nalaženje pravilnog rešenja je potrebno samo oko
0.0002% ukupnog stabla.
•
Pošto se obrađuju svi legalni potezi do određene dubine, sve varijante matova do
fiksne dubine ukoliko postoje će biti pronađene u fazi analize. G.M.S. koristi tehniku
inkrementalnog produbljavanja, tako da će matovi, koji mogu biti realizovani u
manjem broju poteza biti prirodno pronađeni u ranijim fazama iteracije. Na taj način,
algoritam radi selektivno, pronalazeći minimalna rešenja i može da kao izlaz generiše
sortirana rešenja problema prema minimalnom broju poteza koje je potrebno povući
da bi se postigao mat. Korišćenjem programa G.M.S. u nekim kompozicijama nađena
su rešenja u manjem broju poteza koji je čak i autor tih problema predvideo.
Realizacija G.M.S. programa je veoma značajna u oblasti problemskog šaha i ona na
najbolji mogući način rešava sve probleme koji su postavljeni pred aplikaciju ovog tipa. Kao
što je već istaknuto, program je zamišljen univerzalno, tako da se može koristiti i kao
124
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
pomoćni alat i kako osnovna aplikacija. On predstavlja integralni deo autorovog programskog
sistema Geniss i kao modul je uvršten u aplikacije koje se bave klasičnim šahom (Geniss
Axon i Axon I) kao optimizator sekvence matiranja, u slučajevima kada je glavni algoritam
pronašao mat-u-N poteza.
6.3 Algoritam za adaptivnu kontrolu dubine (A.D.C.)
Algoritam za adaptivnu kontrolu dubine proizilazi iz studiranja ljudskog načina razmišljanja u
oblasti razvoja i proračuna šahovskih kombinacija. Mnoga istraživanja u kognitivnoj oblasti
psihologije upućuju na činjenicu da ljudi razvijaju posebne unutrašnje algoritme procene
pozicije koji su kvalitativno drugačiji od danas postojećih najboljih algoritama za računske
mašine. Očigledno je da postoji znatno bolji način za proračun stabla odlučivanja nego što to
predviđa klasična teorija kompjuterskog šaha. Najjači svetski velemajstori sa ELO rejtingom
od preko 2800 poena tvrde da mogu proračunati najviše dve pozicije u sekundi. Ako se to
uporedi sa brzinom proračuna koja kod standardnih modernih PC mašina prevazilazi 500.000
pozicija u sekundi, jasno je da moraju da postoje drugi pristupi i algoritmi koji će bolje
iskoristiti računski potencijal modernih kompjutera.
Sa druge strane, adaptivna kontrola dubine ima svoju analogiju u realizaciji algoritama
redukcije kod nekih šahovskih programa. Redukcija stabla odlučivanja je zapravo skraćivanje
osnovne dubine proračuna u funkciji kvaliteta već pronađenog vodećeg poteza. Na primer,
ako je pronađen potez koji uzima protivničkog topa i za koji se prema evaluaciji dobijenoj iz
proračuna podstabla može zaključiti da je sa velikom verovatnoćom najbolji u poziciji, onda
se ostalim potezima koji su manjeg kvaliteta može skratiti dubina proračuna za jedan. Uštede
koje se dobijaju u proračunu stabla veoma su značajne. Naročito je koristan efekat koji se
javlja kod upotrebe null-move tehnike zato što skraćivanje osnovnog stabla istovremeno
skraćuje i null-move dubinu sondiranja koja već predstavlja umanjenu dubinu osnovnog
stabla. Sa druge strane, korišćenje tehnike skraćivanja dubine može da dovede do velikih
opasnosti u smislu propuštanja nekih značajnih varijanti koje nisu bazirane na klasičnim
specijalnim potezima: razmenama figura, šahovima i promocijama. Način razmišljanja
šahovskih majstora je veoma sličan prikazanom modelu i oni u toku proračuna skraćuju
dubinu proračuna za marginalne varijante, a neke varijante čak i uz potpunosti odbacuju bez
posebnog razmatranja.
Za prikazanu tehniku ne postoje dovoljno ni teoretskih ni praktičnih istraživanja tako da je
na njenom razvoju potrebno dosta samostalnog rada. Autor je razvio svoju verziju algoritma,
koji je veoma stabilan i dovodi do značajnih ušteda u obradi stabla, naročito u pozicijama u
središnjici koje su taktičke orijentacije [Vučković, 2001b]. Ideja se zasniva na upotrebi
transpozicione tabele i history heuristike za formiranje vodećeg poteza. Naime, korišćenjem
ovih memorijskih struktura, kako je to već naglašeno, postiže se znatno poboljšanje u
redosledu poteza, čime se omogućava da najbolji potezi budu razmatrani na početku liste
poteza u svakoj varijanti. Imajući u vidu da su na ovaj način u prvim prolazima u petljama za
formiranje liste poteza generisana glavna varijanta, ostatak poteza, odnosno podvarijanti može
se posmatrati sa skraćenom dubinom. Međutim, direktno skraćivanje dubine po istraživanjima
autora generiše suviše mnogo nestabilnosti u igri i taktičkih previda, smanjujući značajno
ukupnu snagu igre.
125
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Zbog toga, autor uvodi rešenje da se, kada su stvoreni uslovi za skraćivanje dubine u
podgranama stabla ne skraćije osnovna dubina već da se poveća R faktor null-move
sondiranja za 1.
Implementacija koja je bazirana na ovom principu je veoma jednostavna i zahteva
izuzetno nisku količinu eksternog heurističkog znanja. U standardnom ALFA/BETA-PVS-nullmove algoritmu je potrebno dodati informaciju o inkrementiranju/dekrementiranju. Sledeći
primer predstavlja deo koda preuzetog iz autorovog programa Axon II koji ilustruje metodu:
{.}
if (hash_mode=Eexact) then {PVS čvor, deo glavne varijante}
begin
if (stack[depth].regular>0) and (incrementator=0) and (CRmove and
(xcheck+xcapture+xpromotion+xfork+xescape)=0) then
decrementator:=decrementator+1;
{Uslovi za dekrementiranje dubine}
VALUE:= - SEARCHER (DEPTH+1, LOCAL_HORiSONT, -ALFA-1, -ALFA,decrementator);
{ PVS rekurzivni poziv !}
if (value<=ALFA) or (value>=BETA) then goto PVS;
{ Van granica, nema rekurzivnog poziva verifikacione procedure}
end;
VALUE:= - SEARCHER (DEPTH+1, LOCAL_HORiSONT, -BETA, -ALFA,decrementator);
{ Osnovni ALFA-BETA verifikacioni poziv}
PVS:
{.}
U vezi sa uslovima koji moraju biti ispunjeni da bi funkcionisanje tehnike bilo pravilno,
možemo naglasiti sledeće ključne činjenice:
Tehnika se implementira kroz uvođenje novog argumenta u rekurzivnu funkciju.
Promenjiva decrementator se prolongira kroz stablo i nosi informaciju o tome da li je
neko podstablo deo osnovne varijante ili ne.
Uslovi da bi se vrednost dekrementatora uvećala za 1 su sledeći: analiza najboljeg
poteza je izvršena, pri čemu je potez regularan, nije bilo inkrementiranja u
predhodnom delu stabla i potez ne pripada grupi specijanih poteza tipa šah, razmena
figura, promocija ili odlazak sa napadnutog polja.
U podgrani se vrši upoređivanje vrednosti promenjive decrementator sa 0. Ako je
vrednost dekrementatora različita od 0, može se izvršiti operacija uvećavanja R
faktora za 1, uz istovremeno smanjivanje vrednosti inkrementatora za 1. Deo koda koji
implemntira ovu promenu R faktora se kodira neposredno pre rekurzivnog poziva
null-move procedure:
126
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
nullr:=3;
if incrementator>0 then {Inkrementiranje R faktora}
begin
nullr:=nullr+1;
decrementator:=decrementator-1;
end;
VALUE:=local_horisont-1-nullR;
{Izračunava se novi horizont}
if (value<(depth+1)) then VALUE:=depth+1; {Kontrola dubine}
VALUE:= - SEARCHER(depth+1, VALUE, -BETA, -BETA+1, incrementator);
{Rekurzivni poziv null-move procedure}
if value>=BETA THEN BEGIN SEARCHER:=BETA; EXIT; END; {Null-move izlaz}
end;
Slika 6.6 Jezgro A.D.C. procedure.
Ovaj jednostavan princip omogućava značajne redukcije u pojedninim taktičkim
pozicijama uz zadržavanje relativne stabilnosti koju ima algoritam sa fiksnom osnovnom
dubinom. Da bi se odredio stepen redukcije, proveden je niz eksperimenata nad pozicijama
koje su taktičkog karaktera. Kao prvi primer prikazaćemo rezultate analize taktičke pozicije
preuzete iz klasičnih EPD testova:
Slika 6.7 Pozicija iz EPD sistema testiranja. Ključni potez je …Dg2+!!
Pozicija je karakteristična jer sadrži dugačke nizove taktički forsiranih nastavaka. Za
realizaciju eksperimenta upotrebljen je autorov program Axon II, koji u osnovnoj formi
predstavlja R=3 null-move tragač. Rezultati prvog testiranja su za slučaj kada algoritam radi u
osnovnom režimu fiksne dubine, bez korišćenja A.D.C. tehnike. Za testiranja kod svih
127
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
primera korišćen je hardver baziran na AMD Sempron 2600+ procesoru sa 512Mb DDR 400
RAM memorije [Vučković, 2003b]. Listing rezultata je prikazan u nastavku:
D=1
D=2
D=3
D=4
D=5
D=6
D=7
D=8
D=9
D=10
D=11
D=12
D=13
D=14
c6d5
c6d5
c6d5
c6d5
c6d5
c6d5
f3g2
c6d5
f3g2
f3g2
f3g2
f3g2
f3g2
f3g2
+0.2
+0.0
+0.2
+0.1
+0.2
-0.0
+0.2
+0.1
+3.8
+3.8
+3.8
+3.8
+9.5
+ MT/21
(105)
(2)
(109)
(77)
(103)
(-16)
(149)
(78)
(1954)
(1954)
(1994)
(1994)
(4882)
[169 pos.
0.0 s.]
[1206 pos.
0.0 s.]
[5633 pos.
0.0 s.]
[13031 pos.
0.0 s.]
[27210 pos.
0.0 s.]
[107103 pos.
0.3 s.]
[256833 pos.
0.7 s.]
[624952 pos.
1.8 s.]
[912381 pos.
2.7 s.]
[1166523 pos.
3.4 s.]
[1694856 pos.
4.8 s.]
[3070062 pos.
8.4 s.]
[5002272 pos.
13.4 s.]
[5080574 pos.
13.5 s.]
U toku testiranja program je dostigao prosečnu brzinu od 376.338 pozicija u sekundi, i
potpunu analizu završio na dubini 14, posle 13.5 sekundi otkrivajući mat u 21. potezu posle
ključnog poteza crnog Dg2!.
U nastavku je proveden eksperiment nad istom pozicijom, ali je sada A.D.C. heuristika
bila uključena. Programski listing posle novog eksperimenta izgleda ovako:
D=1
D=2
D=3
D=4
D=5
D=6
D=7
D=8
D=9
D=10
D=11
D=12
D=13
D=14
c6d5
c6d5
c6d5
c6d5
c6d5
c6d5
f3g2
c6d5
f3g2
f3g2
f3g2
f3g2
f3g2
f3g2
+0.2
+0.0
+0.2
+0.1
+0.2
-0.0
+0.2
+0.1
+3.8
+3.8
+3.8
+3.8
+9.5
+ MT/21
(105)
(2)
(109)
(77)
(103)
(-16)
(149)
(78)
(1954)
(1954)
(1994)
(1994)
(4882)
[169 pos.
0.0 s.]
[1206 pos.
0.0 s.]
[5633 pos.
0.0 s.]
[13031 pos.
0.0 s.]
[27210 pos.
0.0 s.]
[107103 pos.
0.3 s.]
[212725 pos.
0.6 s.]
[581469 pos.
1.7 s.]
[814976 pos.
2.3 s.]
[955585 pos.
2.7 s.]
[1271878 pos.
3.6 s.]
[1989393 pos.
5.5 s.]
[3207670 pos.
8.6 s.]
[3248168 pos.
8.7 s.]
U ovim uslovima program je dostigao prosečnu brzinu 373.352 pozicija u sekundi, što je
samo za 0.8% slabije od prve analize, tako da je gubitak na vremenu zbog korišćenja A.D.C.
tehnike zanemarnljiv. Sa druge strane, upotreba A.D.C. tehnike nije uopošte degradirala rad
algoritma, jer je na svim nivoima evaluacija identična u oba slučaja. Međutim, korišćenje
A.D.C. tehnike je značajno poboljšalo performanse analize jer je njena implementacija
omogućila uštedu u broju čvorova u stablu u ukupnom vremenu potrebnom za analizu
pozicije. Broj generisanih čvorova u drugom testu iznosi samo 63.9% u odnosu na prvi, a
vreme 64.4% u odnosu na prvi test što je veoma značajno.
128
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Da bi se utvrdio relativni odnos sa drugim programima, proveden je eksperiment sa nizom
profesionalnih i amaterskih programa. Analizom prikazane pozicije sa slike 6.7 korišćenjem
drugih programa dolazi se do rezultata koji su prikazani u sledećoj tabeli:
Tabela 6.5 Prikazuje rezultate analize pozicije pomoću drugih programa.
Program
Vreme rešavanja problema Pronađeno rešenje
Axon 2
8.7 sec
MT 11
Toga II 1.1b
16 sec
MT 11
Anmon 5.53
18 sec
MT 11
Dragon 4.6
1:58 sec
MT 11
Fruit 050809
10 sec
MT 11
Fruit 2.1
17 sec
MT 11
Gothmog
5 sec
MT 11
List 512
1 sec
MT500
Naum 1.91
?
?
Pharaon
1:13 sec
MT 11
Prodeo
1 sec
MT500
Ruffian 2.0
38 sec.
MT 11
Ruffian Leiden 2003
36 sec.
MT 11
Rybka 1.0 BETA w32
?
?
Sjeng
22 sec
MT 12
Spike 1.1
1:12 sec
MT 11
King 3.33
1 sec.
MT79
Zappa 1.0
56 sec.
MT 11
Shredder 9 UCi
3:00 sec
?
Kriterijum za ocenu vremena za analizu je trenutak u kome je program našao ključni
potez, Qg2+!!. koji vodi do mata u 11 poteza. Najbolji rezultat u ovom testu pokazali su
programi koji mat evaluiraju u posebnoj proceduri za nalaženje matova, kao što su programi
Prodeo, List512 i King 3.33. Najbolji rezultat sa klasičnom evalucijom ima Gothmog. Axon II
pripada višoj grupi rešavača. Karakteristično je da mnogi programi koji imaju rejting preko
2650 ELO poena relativno slabo rešavaju postavljeni problem. UCI verzije programa Naum
1.91 i Rybka su čak javili greške prilikom pokušaja analize date pozicije ! Ipak, karaterističan
je rezultat koji je postigao najjači profesionalni šahovski program Shredder 9 UCI, višestruki
šampion sveta u kompjuterskom šahu. Tek posle 3 minuta proračuna program je postavio
potez Qg2 kao dominantni ali nije evaluirao rešenje kao mat u 11 poteza, iako je osnovna
dubina bila preko 17 polupoteza. Ovo najviše govori o heurističkim tehnikama sečenja stabla
koje su rizične i koje u nekim posebnim situacijama značajno degradiraju performanse
programa čiji je rejting oko 2800. Analiza dobijena direktno iz programa Shredder 9 pokazuje
da heuristički algoritam ima velikih problema u “razumevanju” prikazane pozicije:
13/18
0:00
14/38 0:12
(5.215.470) 420
15/44 0:25
16/44 0:44
16/46 0:55
417
17/48 1:54
+1.76
+1.62
1...cxd5 2.Rad1 (332.026) 452
1...cxd5 2.Qc3+ Kg8 3.Rad1 c6 4.a4 Bc8 5.Rd2 Rff6 6.Ra1 Rfg6 6.b4 Ba6 8.b5
+1.38 1...cxd5 2.Qc3+ Kg8 3.Rad1 c6 4.a4 Bc8 5.Rd2 Rff6 6.b4 Ba6 (10.629.617) 416
+1.63++ 1...cxd5 2.Qc3+ (18.484.803) 416
+1.63 1...cxd5 2.Qc3+ Kg8 3.Rad1 c6 4.a4 Bc8 5.Rd2 Rf5 6.b4 Ba6 6.Re1 (23.025.744)
+1.88++ 1...cxd5 2.Qc3+ (46.011.176) 410
129
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
17/49
17/49
3:02
3:06
+2.37 1...cxd5 2.Qc3+ Kg8 3.Qb3 Be6 (74.465.259) 408
+2.38++ 1...Qg2+ (76.455.511) 409
best move: Qf3-g2 time: 3:06.437 min n/s: 409.794 CPU 99.6% n/s(1CPU): 411.439 nodes: 76.796.981
Kao drugi primer, analizirana je pozicija iz jedne velemajstorske partije, gde je crni
povukao Ng4! i ubrzo dobio. Međutim, u istoj poziciji, program nalazi traženi potez na dubini
9, ali na dubini 10 nalazi još bolji nastavak Sd3!! koji vodi do mata u 19 poteza.
Slika 6.8 Pozicija iz velemajstorske partije.
U prvoj fazi testiranja, program je radio bez A.D.C tehnike i postigao performanse koje su
prikazane na sledećem listingu, sa prosečnom brzinom proračuna od 316.419 pozicije u
sekundi:
D=1
D=2
D=3
D=4
D=5
D=6
D=7
D=8
D=9
D=10
h4g5
h4g5
e5c4
e5c4
e5c4
e5c4
e5c4
e5c4
e5g4
e5d3
+0.6
+1.7
+1.2
+1.2
+1.5
+1.3
+2.1
+2.1
+6.6
+ MT/19
(336)
(875)
(624)
(624)
(800)
(713)
(1092)
(1092)
(3419)
[123 pos.
0.0 s.]
[1202 pos.
0.0 s.]
[13169 pos.
0.0 s.]
[27435 pos.
0.1 s.]
[65926 pos.
0.2 s.]
[175729 pos.
0.6 s.]
[409607 pos.
1.5 s.]
[918573 pos.
3.4 s.]
[3025814 pos.
11.0 s.]
[8195253 pos.
25.9 s.]
U drugom testu, upotrebljena je verzija programa sa uključenom A.D.C. tehnikom:
D=1
D=2
D=3
D=4
D=5
D=6
D=7
D=8
h4g5
h4g5
e5c4
e5c4
e5c4
e5c4
e5c4
e5c4
+0.6
+1.7
+1.2
+1.2
+1.5
+1.3
+2.1
+2.1
(336)
(875)
(624)
(624)
(800)
(713)
(1092)
(1092)
[123 pos.
0.0 s.]
[1202 pos.
0.0 s.]
[13169 pos.
0.0 s.]
[27435 pos.
0.1 s.]
[65926 pos.
0.2 s.]
[175729 pos.
0.6 s.]
[364087 pos.
1.4 s.]
[827627 pos.
3.0 s.]
130
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
D=9 e5g4
D=10 e5d3
+6.6
+ MT/19
(3419)
[2922304 pos.
[8105671 pos.
10.3 s.]
24.6 s.]
Rezultati pokazuju da skoro i da nema dobitka u ovom slučaju. Broj čvorova u stablu u
drugom testu iznosi 98.9% broja čvorova u prvom testu, a vreme 94.9%.
Možemo zaključiti da je korišćenje A.D.C. tehnike strogo uslovljeno tipom pozicije koja
se analizira i da je daleko pogodnija za taktička stabla koja imaju veći dubinu traženja i kod
kojih izdvajanje vodećih poteza ima veći efekat. Sa druge strane, u pozicijama sa dosta figura,
koje su i strateške i taktičke prirode dobici u brzini rada su minimalni.
6.4 Princip individualizacije figura i integracije generatora poteza i
evaluatora
Realizacija i implementacija generatora poteza i evaluaciona funkcija se standardno obavlja
korišćenjem dve odvojene funkcije. Po definiciji, generator poteza ima zadatak da formira
listu legalnih ili kvazilegalnih poteza koji se razmatraju u svakom čvoru u stablu, a
evaluaciona funkcija na osnovu trenutne pozicije i nekih pomoćnih parametara da izračuna
odgovarajuću numeričku vrednost. Generator poteza se primenjuje u svim čvorovima u
osnovnom delu stabla i quiescence proceduri, dok se evaluaciona funkcija primenjuje samo na
nivou obrade terminalnih čvorova i quiescence procedure. Ovakva podela je prirodna i
razumljiva ako se ima u vidu ne-heuristička varijanta generatora poteza.
Posmatrajmo, međutim heurističku varijantu generatora koja je neophodna u realizaciji
quiescence procedure. Kao primer pokazaćemo jednu jednostavnu poziciju iz završnice (Slika
6.9):
Slika 6.9 Ilustrovana je metoda integracije generatora poteza i evaluacije.
Ako je beli na potezu, generator poteza formira listu kvazilegalnih poteza koji se u datom
slučaju poklapaju sa listom legalnih poteza:
Kg3,Kg1,Kh1,h4,g3,g4,a5.
131
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Potezi u ovoj listi težinu dobijaju u kasnijim fazama obrade, korišćenjem transpozicione
tabele i history tabele. Međutim, u heurističkim tipu generatora, potezi već na nivou
generatorske funkcije dobijaju svoje težine. To je od izuzetnog značaja za rad procedure u
uslovima quiescence ALFA-BETA tragača koji poteze razmatra selektivno, na osnovu
njihove relativne vrednosti. Primenjujući ekspertsko znanje na poziciju sa slike 6.9, od
generisanih poteza se izvaja potez a5 koji omogućava napredovanje i promociju slobodnog
pešaka. Lista poteza, koju bi za ovaj slučaj generisao heuristički generator poteza bi imala
sledeći oblik:
Specijalni potezi: a5
Ostali potezi: g4,g3,h4,Kg3,Kg1,Kh1
Razmatranje poteza a5 kao vodećeg u datoj poziciji je racionalno kako na nivou osnovnog
stabla tako i na nivou quiescence procedure. U osnovnom delu stabla, pošto potez a5
predstavlja najbolji, dobitnički potez, velika verovatnoća je da se neće ni razmatrati ostatak
liste poteza, zbog BETA sečenja stabla. U quiescence proceduri, po heurističkim pravilima
potez a5 predstavlja jedini potez koji je potrebno razmatrati, jer od svih ostalih poteza on
jedino ima potencijal da poveća trenutnu evaluaciju čvora.
Materijalna evalucija date pozicije ima vrednost 0.00. Međutim, heuristička evaluacija
mora biti u stanju da u ovoj konfiguraciji pešaka i kralja beli sigurno promoviše pešaka i
dobija partiju. Dakle, prilikom obrade lokalne evaluacije za pešaka na polju a5, mora postojati
procedura koja otkriva da na vertikali ispred tog pešaka nema protivničkih pešaka i da se on
može slobodno promovisati u damu.
Upoređivanjem postupaka za detekciju promotivnosti pešaka kod generatorske i
evaluacione funkcije može se konstantovati da su oni identični. To znači, da
evaluatorska funkcija neracionalno ponavlja isti postupak za detekciju, koji je već
izvršen na nivou generatorske funkcije, čime se usporava rad celog algoritma
[Vučković, 2002a].
Za svaku figuru koja je detektovana na tabli, generatorska i evaluaciona funkcija moraju
imati predviđene grane za obradu. Standardni blok dijagram funkcionisanja odvojenih
generatorskih i evaluacionih procedura, za dati primer sa slike 6.9, može se prikazati na
sledećoj slici (Slika 6.10):
Slika 6.10 Prikazana je standardna struktura generatorske i evaluacione funkcije.
132
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
U standardnom sistemu, razdvajanje generatora poteza i evaluacione funkcije stvara
potrebu sa dvostrukim pristupom matrici koja definiše tekuću poziciju, prvi put u fazi
generisanja liste poteza a drugi put u fazi evaluacije. Sve ostale pomoćne procedure za ove
dve funkcije se u određenom obimu preklapaju i dupliraju. Slika 6.10 jasno ukazuje na
problem suvišnog rada kada je u pitanju određivanje karakteristika poteza a5! i njegove
evaluacije.
Imajući u vidu ove probleme, i zahtev da se realizuje što je moguće brži quiescence
tragač, autor je koncipirao nov pristup u integraciji generatorske i evaluacione
funkcije baziran na individualizaciji figura [Vučković, 2002c].
Blok dijagram koji ilustruje nov pristup je prikazan na sledećoj slici (Slika 6.11):
Slika 6.11 Prikazana je struktura integrisanog generatora liste poteza i evaluatora.
U integrisanoj funkciji pristup trenutnoj poziciji se obavlja samo jednom. Takođe,
postupak razdvajanja figura po tipu je realizovan samo na jednom mestu u programu. Za
svaku od 12 različitih figura, 6 tipova belih i crnih, razvijena je po jedna posebna mašinska
procedura koja implementira logiku potrebnu za generisanje poteza sa heurističkom težinom i
evaluacijom te figure. Na taj način, predloženi koncept zapravo razvija tehniku koji se može
nazvati “princip inteligentnih figura” koji podrazumeva da mašinska definicija svake figure
sadrži dovoljno logike za realizaciju generatorskih i evaluacionih zadataka. Naravno,
omogućeno je da se u zavisnosti od potrebe isključuje jedna ili druga funkcija. U višim
delovima stabla, gde nije potrebna evaluacija čvorova, može se isključiti evaluacioni deo, dok
u terminalnom nivou stabla, ako je u pitanju završna pozicija iz koje se ne generišu nastavci,
isključuje i samo generisanje poteza.
Ovako definisana i implementirana integrisana funkcija (Slika 6.11) ima niz prednosti u
odnosu na klasičan sistem [Vučković, 2002b]. Osim fleksibilnosti i univerzalnosti omogućeno
je povećanje ukupne efikasnosti zato što je prenos informacija između generatorskog i
evaluacionog dela sada veoma jednostavan, jer se oba vida obrade pozicije nalaze
implementirana u jednoj istoj proceduri. Na taj način moguće je izbeći niz suvišnih ispitivanja
u evaluacionoj funkciji, jednostavno koristeći informacije iz faze generisanja. U svim
verzijama autorovog programskog sistema Axon koristi se prikazani princip integracije.
133
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
6.5 Metoda za distribuiranu paralelizaciju šahovskih algoritama
korišćenjem lokalne mreže
Kao što smo u ranijim poglavljima u radu istakli, povećanje snage programa je moguće
izvršiti paralelizacijom postojećih algoritama, odnosno jednoprocesorskih verzija programa.
Prvi stepen paralelizacije je korišćenje dva procesora u sprezi. Klasični pristupi predviđaju
korišćenje dual PC računara koji imaju dva procesora na istoj matičnoj ploči čime se
omogućava čvrsta sprega i mogućnost efikasne komunikacije i razmene podataka na
osnovnom - memorijskom nivou. Kao implementacija ovog pristupa mogle bi se pomenuti
mašine koje imaju multithread (INTEL) odnosno multicore (AMD) arhitekture.
U realnim uslovima, PC kompjuteri sa višestrukim procesorima veoma su retki i skupi.
Oni se u najvećem broju slučajeva nabavljaju za potrebe realizacije servera, tako da se
procenat iskorišćenja za potrebe paralelnog šahovskog programa, koji bi eventualno bio
instaliran, značajno smanjuju.
Imajući u vidu realne okolnosti, autor je razvio novu klasu algoritama za
paralelizaciju šahovskih aplikacija na distribuiranim sistemima. Za realizaciju
hardvera koriste se standardni procesori koji su spregnuti lokalnom 100 Mbit-nom ili
1 Gbit-nom LAN mrežom. Novina, koju nova klasa algoritama uvodi, je distribuirana
paralelizacija metodom podeljenih listi, na način koji do sada nije direktno
implementiran u nekoj poznatoj aplikaciji [Vučković, 2005a].
Metodu ćemo objasniti na primeru dvoprocesorskog sistema [Vučković, 2005b], [Vučković,
Na slici 6.12 je prikazana blok šema sistema sa dva procesora povezanih
standardnom LAN mrežom:
2005c].
Slika 6.12 Blok šema distribuiranog dvoprocesorskog sistema.
Sistem se sastoji od dva asinhrona identična šahovska programa tipa Axon I (Slika 6.13).
Analogna arhitektura u drugim oblastima računarstva se naziva master-slave tako da je data
terminologija usvojena i u ovom slučaju. Master računar organizuje sinhronizaciju i
komunikaciju sa korisnikom, dok slave računar jedino ima funkciju proračunavanja svog dela
stabla. Komunikacija preko lokalne mreže značajno limitira mogućnosti prelaska informacija
sa jednog procesora na drugi, čime se smanjuje kapacitet kanala za sinhronizaciju proračuna
stabla, što je kod svih paralelnih algoritama kritično.
134
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Slika 6.13 Paralelna verzija programa Axon I.
Nova metoda uvedena od strane autora, omogućava da se korišćenjem principa podeljenih
listi izvrši efikasna paralelizacija na osnovnom nivou i da procesori radeći asinhrono,
paralelno generišu određene kompatibilne delove stabla. Komunikacija između dva procesora
u samoj fazi proračuna je minimalna, tako da ne postoji problem sa propusnim opsegom
mreže. Metoda je pogodna i za korišćenje na više procesora. Da bi objasnili postupak
realizacije algoritma, poslužićemo se modelom koji proističe is pozicije na slici 6.13.
Izvršavanjem heurističkog generatora poteza nad prikazanom pozicijom generiše se lista od
44 kvazilegalnih poteza, koji su prikazani u nastavku:
Tabela 6.6 Lista poteza sa heurističkim težinama.
0.
1.
2.
3.
4.
5.
6.
6.
8.
9.
10.
11.
12.
13.
14.
15.
16.
16.
18.
19.
20.
21.
H4H8
H3E6
H4F4
H4G5
E5C4
E5G4
F2F4
A1C1
H3G2
E1E3
H3F5
E1E2
A1D1
E1C1
B2C3
H3G4
G3G4
G1F1
A3A4
G1H2
G1G2
A1A2
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
%
%
.
.
.
.
.
.
.
.
. + . . . . . a . r . p # i t
. . c . d . f a q . n p . . t
s . . . d . . a . . n p . i t
s . . . . . . a . . n p # i t
s . . . . . . a . . n p . i .
s . . . . . . a . . n . # . .
s . . . . . . a . . n . . i t
s . . . . . . a . . . p . i t
s . . . . . . a . . . p . i t
s . . . . . . a . . . p . . t
. s . . . . . . a . . . . # . t
. s . . . . . . a . . . . . . t
. s . . . . . . a . . . . . . t
. s . . . . . . . . . . p . i .
. s . . . . . . . . . . p . i .
. s . . . . . . . . . . . # . t
. s . . . . . . . . . . . # . t
. s . . . . . . . . . . . . . t
. s . . . . . . . . . . . . . t
. s . . . . . . . . . . . . . t
. s . . . . . . . . . . . . . t
. s . . . . . . . . . . . . . t
(<--)
(<--)
(1)
(2)
(<--)
(1)
(<--)
(<--)
(1)
(<--)
(2)
(1)
(1)
(2)
(<--)
(3)
(<--)
(<--)
(<--)
(1)
(2)
(2)
135
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
22.
23.
24.
25.
26.
26.
28.
29.
30.
31.
32.
33.
34.
35.
36.
36.
38.
39.
40.
41.
42.
43.
A1B1
F2F3
G1H1
E1B1
B2C1
E1D1
E5D3
E1F1
E5F3
H3F1
H4H7
H4F6
E5F7
E5C6
D4D5
H4E4
H4H5
H4H6
H4G4
E5D7
E1E4
E5G6
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
s
s
s
s
s
s
s
s
s
s
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
+
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
c
c
c
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
m
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
d
d
.
.
d
d
d
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
f
.
.
f
f
.
f
f
.
.
.
.
.
.
.
.
.
.
.
.
.
a
a
a
a
a
a
a
a
.
a
a
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
r
r
r
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
n
n
.
n
n
n
n
n
n
.
.
.
.
.
.
.
.
.
.
.
.
p
p
p
p
p
p
p
p
p
.
.
.
.
.
.
.
.
.
.
.
.
.
#
#
#
#
#
#
#
#
#
#
#
#
.
.
.
.
.
.
.
.
.
.
i
i
i
i
.
i
.
i
i
.
.
.
t
t
.
.
.
.
.
.
.
.
t
t
.
.
t
t
t
t
t
.
t
.
(3)
(1)
(3)
(3)
(1)
(4)
(2)
(5)
(3)
(4)
(3)
(4)
(4)
(5)
(<--)
(5)
(6)
(7)
(8)
(6)
(6)
Generator poteza istovremeno određuje i njihove heurističke težine, tako da se potezi
preliminarno sortiraju na osnovu tih karakteristika. Posle sortiranja, potezi u redosledu u listi
opadaju na osnovu svoje težine, tako da je na poziciji 0. potez sa najvećom težinom, a na
poziciji 43. potez e5g6 kome je generator dodelio najmanju heurističku težinu. Pošto se u
suštini radi o paralelnoj verziji ALFA-BETA algoritma, uticaj redosleda poteza na efikasnost
rada algoritma je od presudnog značaja. Dobra osobina ovog pristupa je činjenica da se greške
u sortiranju poteza po važnosti odražavaju samo na efikasnost rada a ne i na potpunu
eliminaciju varijante, kako je to slučaj kod forward-pruning metoda.
U ovako uređenoj listi poteza, susedni potezi u listi se razlikuju za malu vrednost – imaju
malo heurističko rastojanje. Data osobina uređenih listi ovog tipa je iskorišćena za
uspostavljanje ravnoteže u paralelizaciji. Naime, ako u prikazanoj listi poteza izdvojimo sve
poteze sa parnim i neparnim indeksima, omogućićemo da se jednostavnom metodom izvrši
paralelizacija. Dakle, generalno nov pristup se može definisati na sledeći način:
Nova metoda paralelizacije korišćenjem asinhronog slabo spregnutog distribuiranog
sistema oslanja se na podeli sortirane heurističke liste poteza na N podlisti prema
modulu indeksa N. Sve podliste su komplementarne i svaka od njih se dodeljuje
drugom procesoru za obradu. Paralelni sistem dinamički određuje najbolji potez kao
max(e1,e2,…,en) gde su e1,e2,…,en evaluacije generisane od strane odgovarajućih
procesora.
Na primeru sa slike 6.13, za dva procesora, gde je N=2, ukupna lista poteza je podeljena na
dve liste. Lista sa parnim indeksima sadrži uređen niz poteza: H4H8, H4F4, E5C4, F2F4 … ,
a ona sa neparnim indeksima: H3E6, H4G5, E5G4, A1C1, …
Prva lista poteza se distribuira prvom (master) procesoru a druga lista sekundarnom
(slave) procesoru. Proračun stabla nad obe komplementarne liste obavlja se asinhrono, na dva
procesora bez potrebe da se međusobno vrši prenos velikih količina podataka. Ubrzanje celog
sistema u odnosu na jedan procesor nastaje zato što svaki od procesora radi samo sa ½ liste
poteza, čime se brzina prolaska kroz sve podvarijante na osnovnom nivou znatno povećava.
136
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Da bi se prikazali realni empirijski podaci, izvršen je eksperiment na dvoprocesorskim
sistemu, nad standardnim yazgac.epd skupom pozicija koji se koristi za testiranje šahovskih
mašina. Kao referenca, prikazani su rezultati testiranja na jednoprocesorskim sistemu.
Rezultat su prikazani u sledećoj tabeli:
TABELA 6.7 TABELA PRIKAZUJE BROJ POZICIJA DOBIJENIH ANALIZOM NA
JEDNOPROCESORSKOM I DVOPROCESORSKOM SISTEMU.
Br.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Single
Bh7
Rxg7
Rd4
Nc5
Bd6
Rc1
Qd8
Qc7
Qxg6
Nh4
Ne5
O-O-O
Qxh3
Nxb8
Bxg7
a4
f5
Qxg5
Nc4
Nc3
Kc3
Bxe2
h7
Rxh3
c4
Rxd7
Qxc6
Kh2
Rxf4
Re4
cxb5
Re1
Qe2
Br.pozicija Master Br.pozicija Slave
Br.pozicija
728249 Bh7
1466745 Rxg7
1469002 Be7
1555512 Nxf6
1388059 Bd6
276446 Rf4
84001
Qd3
10527566 Qc7
4963938 Qh3
16605243 Nh4
3689251 Rh8
37440614 O-O-O
2050870 dxc4
1115403 Nxb8
14547957 Bxg7
23997961 a4
2159123 f5
2690807 e5
1466950 Nb5
10621431 Nc3
346605 Kc3
2965166 Rh2
724166 h7
2243812 Rxh3
4190791 c4
2520953 Rxd7
14345697 Ne1
7423320 Kh2
2872671 Qxf4
40308515 Qh5
4005703 cxb5
8435525 Re1
2447903 Qe2
596521
1512966
1525525
1564616
1381623
201065
56237
2148993
3760483
25709788
2188589
32454430
1711382
1335819
10789489
15604024
1212576
2382803
839488
13809770
177727
1580737
5719170
7257178
4569494
25238813
1243715
3803816
2754258
28140075
3001105
11814379
2928657
717922 bxc3
759523 Qd3
1031013 Rd4
10863177 Ng5
2597391 Rf1
497102 Rc1
9823036 Qd8
9189599 Bxf7
5771366 Qxg6
15273693 Bg5
12246408 Ne5
32279825 Qa4
19446143 Qxh3
1032344 Qd3
6283498 Bg5
22423349 h4
2076168 Nxd5
12102548 Qxg5
3312836 Nc4
7965793 Ra5
196995 Kc2
2151353 Bxe2
487909 Bc6
2138494 Rg3
2969132 h4
2032580 Bg3
12422980 Qxc6
5258905 Qxa7
527141 Rxf4
14897082 Re4
2622334 Rd1
5680953 Rd1
2128323 Rf3
137
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Eksperiment je izvršen u dve faze. Prvo, izvršeno je referentno testiranje na sistemu sa
jednim procesorom na dubini 7 u svakoj poziciji. Hardver koji je korišćen za eksperiment je
PC sa AMD Sempron 2600+ procesorom/256 Mb RAM i 50 Mb hash memorije za program.
U drugoj fazi, pozicije su testirane na istoj dubini ali korišćenjem paralelnog računara sa
distribuiranom spregom, kako je to ranije objašnjeno.
Eksperimentalni rezulati za master i slave računar su takođe sistematizovani u tabeli 6.7.
Podvučenim poljima su označena tačna rešenja. Rezultati ukazuju da je u svim slučajevima
ključni potez, na nekoj od mašina u paralelnoj konfiguraciji pronađen ranije nego što je to
slučaj kod jednoprocesorske mašine, čime je postignut napredak. Teoretski je lako objasniti
ovu činjenicu ako se uzme u obzir da svaki procesor radi sa ½ ukupne liste poteza, i da se
najbolji potez mora naći u jednoj od dve podliste. Na prikazanom primeru, ALFA-BETA
ciklusi na osnovnom nivou sa slučaj jednoprocesorskog sistema imaju širinu 44 poteza. Znači,
u svakom ciklusu, pored ključnog poteza osnovni ALFA-BETA algoritam razmatra još 43
podvarijanti. U drugom slučaju, svaki procesor razmatra samo još 21 pomoćnih varijanti.
Akceleracija dvoprocesorskog sistema povezana je sa strukturom pozicije koja se
analizira. Uštede se kreću od nekoliko procenata pa do 30% celokupnog stabla. Na primer, u
redu 30 u tabeli, drvo odlučivanja ima 40.308.515 pozicija. Drugi procesor, koji je pronašao
rešenje obradio je samo 28.140.075 pozicija, što čini 69.8% ukupnog stabla. Dakle, za
dvoprocesorske sisteme, može se postulirati nejednakost da je:
MIN(Tp1,Tp2)<Ts
gde su Tp1,Tp2 vremena potrebna za obradu neke pozicije na prvom odnosno drugom
procesoru, a Ts vreme potrebno za obradu na jednoprocesorskoj mašini. Prikazana formula se
može generalizovati u sledećem obliku:
MIN(Tp1,Tp2,….,TpN)<Ts
gde je N broj procesora.
Prikazani principi i rezultati su poslužili za konstrukciju autorovog paralelnog
distribuiranog sistema Achilles koji može koristiti mrežom do 16 računara. Implementacioni
detalji, kao i rezulati koji su postignuti u testiranju sistema prikazani su u nastavku rada.
6.6 Definicija transpozicione baza otvaranja sa mogućnošću mašinskog
učenja
U toku rada sa transpozicionom bazom otvaranja osnovni problemi koji se javljaju su u vezi
sa podešavanjem baze na osnovni program [Buro, 1999], [Slate, 1987]. Upotreba standardnih
baza otvaranja, ili baza koje su generisali drugi programi, može da dovede do nestablinosti u
igri u otvaranju i do gubljenja važnih tempova u igri [Buro, 2000], [Hyatt, 1999]. Ovaj efekat
je poznat od ranije, još u početnim verzijama baza otvaranja, kada su korišćene
velemajstorske partije za izgradnju baze [Spracklen, 1983]. Programi su odigravali
memorisane poteze ali su u momentu izlaska iz baze lutali u planu igre, jer nisu poznavali
ideje i osnovne principe iz određenih sistema otvaranja. Ne razumevajući svrhu pojedinih
138
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
poteza u otvaranju, često je dolazilo do nepotrebnog manevrisanja određenim figurama, ili do
višestrukog igranja istim u otvaranju, što se prema principima šahovske igre smatra
pogrešnim. Jednostavno, u nedostatku znanja o opštim principima otvaranja, program je
pokušavao da optimizuje položaj svojih figura prema sopstvenoj evaluacionoj funkciji.
Korišćenjem metode inktemetalnog učenja (temporal learning) moguće je koncipirati
nekoliko metoda automatskog učenja raznih parametara šahovske igre, računajući tu i baze
otvaranja [Schaeffer, 2001], [Baxter, 1998a], [Baxter, 1998b], [Beal, 1999], [Tesauro, 1992].
Istražujući u ovoj oblasti, autor je došao do značajnih rezultata u pogledu definicije,
primene i implementacije posebnog tipa baza otvaranja, koje su direktno spregnute i
uključene u programski sistem Axon. Prvi korak je bilo definisanje efikasnog modela baze sa
mogućnošću brzog pristupa pojedinim pozicijama u tabeli. Autor je koncipirao nov tip baze
otvaranja OPENX, koji pored osnovne tabele pozicija sadrži i indeksnu tabelu koja značajno
ubrzava pristup pojedinim poljima.
Raspolažući sa direktnom kontrolom nad svim resursima transpozicione tabele bilo
je moguće razviti specifičan vid procedura koje omogućavaju mašinsko učenje, dakle
automatsku sintezu novog znanja u transpozicionoj tabeli bez korišćenja ekspertskog
znanja ili upliva čoveka u tok sinteze i podešavanje znanja.
Ovaj princip predstavlja značajan napredak jer je konstrukcija novog znanja u tabeli otvaranja
veoma efikasna, naročito u varijanti mašinskog učenja iz PGN partija protiv drugih
kompjutera. Međutim, prvo ćemo objasniti format same tabele kroz prikaz tipova i struktura
podataka, koristeći programski jezik Pascal:
type
oaxmitype = record
move:word;
value:word;
end;
{Osnovni tip podatka}
{Definicija poteza}
{Vrednost poteza}
oaxtype = record
eco:string[3];
{ ECO kod otvaranja}
{.}
on_move:Boolean;
{Strana koja je na potezu}
manual:Boolean;
{Ručno podešavanje}
{.}
position:array [0..31] of byte;
{Definicija pozicije}
omi:array [1..10] of oaxmitype;
{Potezi i težine}
{.}
version:longint;
{Tip, verzija programa}
depth:byte;
{Dubina}
move:integer;
{Najbolji potez}
evaluation:integer; {Evaluacija tragača}
{.}
name:string[64];
{Ime varijante}
next:longint;
{Pokazivač na sledeću poziciju}
end;
139
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Osnovne strukture podataka koje su definisane korišćenjem datih tipova su:
var
OAX,DAX:oaxtype;
index:longint;
openbase:Boolean;
{Radna i pomoćna pozicija}
{Index}
{Baza je aktivna}
oaxidx:file of longint; {Indeksni fajl}
oaxdat,maxdat,ecodat: file of oaxtype; {Glavna definicija
baze}
opendir : string[32];
{Radni direktorijum baze, najčešće C:/axon/}
Osnovna definicija baze sadrži 232.516 pozicije iz svih varijanti otvaranja. Pozicije su
smeštene u osnovnu OAX.DAT datoteku koj ima 354.23Kb i indeksnu datoteku kapaciteta
16.384 Kb. Na sledećoj slici prikazan je vizuelni izgled aplikacije OPENX, koja predstavlja
server baze za sve tipove programa tipa Axon koji imaju standardni interfejs prema OAX
bazi:
Slika 6.14 Vizuelni izgled aplikacije OPENX koja predstavlja server OAX baze za Axon
programe.
Na slici 6.14 prikazan je deo OPENX aplikacije koja implementira opcije koje su vezane za
mašinsko učenje:
140
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Slika 6.15 Slika prikazuje opcije mašinskog učenja.
Scenario mašinskog učenja može se prikazati sledećim koracima:
Prva faza je realizacija automatskog odigravanja partija korišćenjem nekog
standardnog grafičkog okruženja. Odigrane partije, zajedno sa rezultatima se snimaju
interno na nivou GUI-a.
Korišćenjem OPENX aplikacije odigrane partije se analiziraju na nivou PGN datoteka.
Da bi se organizovao pristup automatskom generatoru, prvo se konvertuje PGN
datoteka u međudatoteku koja sadrži sve esencijalne podatke bitne za automatsku
sintezu. Na primer, ako na ulazu imamo PGN datoteku sledećeg oblika:
[Event "Arena tournament"]
{No=1}
[Site "PC15"]
[Date "2006.02.21"]
[Round "1"]
[White "Axon"]
[Black "Fruit_21"]
[Result "1-0"]
[ECO "C42"]
[Opening "Petrov"]
[Time "20:32:38"]
[Variation "Damiano Variation"]
[TimeControl "40/600:40/600:40/600"]
[Termination "adjudication"]
[PlyCount "117"]
[WhiteType "program"]
[BlackType "program"]
1.e4 e5 {(e7e5 Nb1c3 Ng8f6 Ng1f3 Nb8c6 Bf1b5 Bf8b4 d2d3 00 Bb5xc6 d7xc6
Nf3xe5
141
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Qd8d4 Ne5c4 Bb4xc3+ b2xc3 Qd4xc3+ Bc1d2) -0.15/13 33} 2.Nf3 Nf6 {(Ng8f6
Nb1c3 Nb8c6
Bf1c4 Bf8c5 00 00 d2d3 d7d6 Bc1g5 Bc8e6 Nc3d5) -0.16/12 15} 3.Nxe5 Qe7
{(Qd8e7 Ne5f3
Qe7xe4+ Bf1e2 Nb8c6 Nb1c3 Qe4b4 Nc3b5 Qb4a5 00 a7a6 Nb5d4 Nf6e4) -0.38/12
23} 4.Nf3
{(Ne5f3) 0.30/14 29} Qxe4+ {(Qe7xe4+ Bf1e2 Bf8e7 Nb1c3 Qe4f5 00 00 d2d4
Nb8c6 Be2d3
Qf5g4 h2h3 Qg4e6) -0.49/12 24} 5.Be2 {(Bf1e2) 0.40/16 1} Be7 {(Bf8e7 d2d4
00 Nb1c3
Qe4f5 00 Nb8c6 Be2d3 Qf5h5 Bc1f4 Nf6d5 Nc3xd5 Qh5xd5) -0.62/12 19} 6.Nc3
{(Nb1c3)
0.40/14 12} Qb4 {(Qe4b4 00 00 d2d4 d7d5 Nc3b5 Qb4a5 Bc1d2 Qa5b6 Rf1e1 Nb8c6
Be2d3)
-0.64/13 15} 6.O-O {(00) 0.40/14 15} d5 {(d7d5 d2d4 00 Nc3b5 Qb4a5 Qd1e1
Qa5b6 Be2d3
Nb8c6 Bc1f4 Nf6e4 Nb5xc7) -0.70/13 14} 8.d4 {(d2d4) 0.40/13 10} O-O {(00
Nc3b5 Qb4a5
Bc1d2 Qa5b6 a2a4 a7a5 Bd2f4 Nb8a6 Rf1e1 Nf6e4 Nf3e5) -0.60/12 23} 9.Re1
{(Rf1e1)
0.40/14 15} Qb6 {(Qb4b6 Be2b5 Be7b4 Qd1d3 Bc8d7 Bb5xd7 Nb8xd7 Bc1f4 Rf8e8
Nf3g5 Bb4xc3
b2xc3) -0.42/11 13} 10.Ne5 {(Nf3e5) 0.40/13 15} Re8 {(Rf8e8 Be2d3 Be7d6
Nc3b5 Bd6xe5
Re1xe5 Re8xe5 d4xe5 Nf6g4 Qd1f3 Nb8c6 Bc1f4 Nc6xe5 Bf4xe5 Ng4xe5 Qf3xd5
Ne5xd3 Qd5xd3)
__________________________________________________________________________
Konvertovana datoteka ima sledeći oblik:
E2E4
E7E5
G1F3
G8F6
F3E5
D8E7
E5F3
E7E4
F1E2
F8E7
B1C3
E4B4
E1G1
D7D5
D2D4
E8G8
F1E1
B4B6
F3E5
F8E8
E2D3
B8D7
C3A4
<=>
<=>
<=>
<=>
<=>
<=>
<=>
<=>
<=>
<=>
<=>
<=>
<=>
<=>
<=>
<=>
<=>
<=>
<=>
<=>
<=>
<=>
<=>
P
P
N
N
N
Q
N
Q
B
B
N
Q
K
P
P
K
R
Q
N
R
B
N
N
**
**
**
**
**
**
**
**
**
**
**
**
E1
**
**
E8
**
**
**
**
**
B*
**
E4
E5
F3
F6
E5
E7
F3
E4
E2
E7
C3
B4
G1
D5
D4
G8
E1
B6
E5
E8
D3
D7
A4
(e4 , Axon=W)
(e5 , Axon=W)
(Nf3 , Axon=W)
(Nf6 , Axon=W)
(Nxe5 , Axon=W)
(Qe7 , Axon=W)
(Nf3, Axon=W)
(Qxe4+ , Axon=W)
(Be2 , Axon=W)
(Be7 , Axon=W)
(Nc3 , Axon=W)
(Qb4 , Axon=W)
(O-O , Axon=W)
(d5 , Axon=W)
(d4 , Axon=W)
(O-O , Axon=W)
(Re1 , Axon=W)
(Qb6 , Axon=W)
(Ne5 , Axon=W)
(Re8 , Axon=W)
(Bd3 , Axon=W)
(Nbd7 , Axon=W)
(Na4 , Axon=W)
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
(23)
Procedura koja vrši transformaciju, zapravo predstavlja leksički analizator PGN datoteka i
čini integralni deo OPENX procedure.
142
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
U trećoj fazi, na osnovu kompresovane liste koja je prikazana, vrši se podešavanje
stabla u transpozicionoj bazi otvaranja. Potezi u varijantama u kojima je Axon dobio se
pojačavaju, a oni koji vode u izgubljenu partiju se umanjuju. U slučaju da postojeća
dubina u bazi otvaranja nije dovoljna, vrši se sinteza novih čvorova. Na ovaj način,
sistem sam, na osnovu igre protiv nekog oponenta uči i podešava sopstvenu bazu,
prilagođavajući je igri protivnika. Ako se sada u drugoj iteraciji ponovi automatski
meč, ali sada sa naučenom bazom, po rezultatima autora ELO rejting se pojačava za
50-70 ELO poena. Opisani proces se može predstaviti na sledećem dijagramu:
Slika 6.16 Princip automatskog pojačavanje snage programa korišćenjem sintetičke baze
otvaranja.
Dakle, princip stvaranja automatskih, sintetičkih baza otvaranja postaje jedan nov
koristan metod koji uvodi ideju automatskog učenja na veoma upotrebljiv način u
oblast kompjuterskog šaha.
Pored prikazonog osnovnog metoda, OPENX program sadrži još nekoliko metoda
mašinskog učenja koji su od manje važnosti. Jedna od metoda je inkerementalno povećanje
dubine evalucije za svaki čvor u bazi. Koristeći ugrađeni program Axon I sistem je u stanju
da samostalno, analizirajući transpozicionu bazu otvaranja automatski verifikuje evaluaciju
svakog čvora u bazi tako što u svakom prolazu povećati dubinu verifikacije za 1. Značaj ovih,
kao i drugih sistema automatskog učenja je potrebno posebno verifikovati. Princip sintetičke
baze otvaranja je testiran i veoma uspešno primenjen u praktičnoj i turnirskoj praksi.
6.7 ENAX baze završnica
Koncepcija i princip rada sa bazama završnica opisan je u poglavlju o bazama podataka.
Istaknuto je da su danas najviše u upotrebi baze završnica tipa Nalimov, koje za sve
kombinacije 3,4 i 5 figura direktno daju evaluaciju bez potrebe za daljim traganjem u stablu.
Korišćenje baza završnica veoma pojačava igru u završnici sa malim brojem figura tako da se
one danas koriste u gotovo svim modernim programima. Trenutno se radi na sintezi baza
završnica sa 6 figura, od kojih su neke već završene i dostupne programerima.
143
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Problem eksponencijalne eksplozije, koji je karakterisičan za proračun stabala javlja se i u
oblasti baza završnica. Nalimov baza završnica sa 4 figure sadrži 70 datoteka i oko 31Mb
podataka. Baza završnica sa 5 figura sadrži 228 datoteka i 6.2 Gb podataka. Kompletne baze
završnica sa 6 figura će biti reda veličine više terabajta tako da se razvoj u ovoj oblasti polako
približava fizičkim limitima. Razvoj baza završnica otvara niz problema u vezi sa metodama
kompresije i dekompresije podataka u realnom vremenu. Na primer, program koji servisira
Nalimov bazu završnica mora da za svaku poziciju čija se evaluacija zahteva pristupi
određenom podatku na disku, da izvrši dekompresiju podataka u realnom vremenu i da vrati
evaluaciju pozicije - što značajno ograničava brzinu pristupa. U nekim testovima se čak
preporučuje da se u blic partijama sa vremenskom kontrolom 3-5 min obavezno isključuju
baze završnica.
Imajući u vidu ove činjenice, autor je istražujući u ovoj oblasti razvio novu koncepciju
baza završnica, koje se zasnivaju na novoj tehnici smeštanja i kompresije podataka čime se
značajno ubrzava pristup evaluaciji pozicija u završnici. Osnovna pretpostavka nove metode
je drugačije kodiranje vrednosti pozicije nego što je to slučaj kod baza tipa Nalimov.
Standardne baze kao izlaz generišu evaluacije tipa +-MAT/n koje daju informacije o broju
poteza do mata koji se daje protivniku ili koje protivnik daje strani koja je na potezu.
Informacija je veoma korisna za optimizaciju igre u nekim tipovima završnica, jer je
algoritam za pretragu u stanju da pronađe najkraći put do mata u određenoj poziciji. Sa druge
strane, za kodiranje vrednosti mata potrebno je minimalno 6-7 bitova informacije što zahteva
prostor u bazi. Ako se postavi pitanje minimalističkog pristupa dolazi se do konstatacije da je
minimalan broj bitova koji je potreban za kodiranje vrednosti svake pozicije 2. Obično je
tabela kodiranja predstavljena sledećim vrednostima:
Tabela 6.8 Osnovni dvobitni tip kodiranja za bazu završnica.
Kod vrednosti pozicije u bazi (evaluacija)
00
01
10
11
Značenje
Pozicija je remi
Pozicija je dobijena za belog
Pozicija je dobijena za crnog
Specijalni kod (moguće su različite namene)
Ovaj minimalistički pristup ima dovoljno fleksibilnosti za definisanje baze završnica, uz
zadržavanje visokog nivoa kompresije podataka. Korišćenjem samo dva bita za definiciju
evaluacije pozicije omogućeno je da u jednom bajtu na disku budu smeštene evaluacije 4
pozicije što se smatralo maksimalnim nivoom kompresije podataka.
Međutim, pokazalo se mogućim da se izvrši još jedan stepen kompresije.
Za pamćenje vrednosti pozicije moguće je izdvojiti samo jedan bit informacije. Kodiranje
je predstavljano sledećom tabelom:
144
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Tabela 6.9 Jednobitni tip kodiranja za bazu završnica.
Kod vrednosti pozicije u
bazi (evaluacija)
0
1
Značenje
Strana koja je na potezu u datoj poziciji dobija.
Neodređeno – remi ili dobija protivnik Određivanje konkretne
vrednosti se dobija analizom čvorova na sledećem nivou.
Funkcionisanje algoritma može objasniti sledećim koracima:
Ako je pozicija dobijena za igrača koji je na potezu, evaluira se dobitak direktno iz
baze (stanje 0).
U suprotnom, razmatraju se čvorovi na sledećem nivou da bi se odredilo da li je remi
ili da strana koja je na potezu gubi (stanje 1). U slučaju da u skupu pozicija na
narednom nivou koje nastaju primenom legalnih poteza iz osnovne pozicije nema ni
jedne pozicije čija je vrednost 1, osnovna pozicija je izgubljena za stranu koja je na
potezu. Ako ni to nije slučaj, osnovna pozicija je remi.
Postupak određivanje evaluacije za slučaj da strana koja je na potezu nije u dobitnoj
poziciji, može se predstaviti na sledećim primerima (Slika 6.16 i Slika 6.17).
Slika 6.17 Određivanje evaluacije izgubljene pozicije za belog koji je na potezu.
Na slici je prikazana situacija iz završnice 4 figure, beli je na potezu. Sondiranje baze na
osnovnom nivou daje vrednost 1 što znači na beli nije u pobedničkoj poziciji. Druga faza je,
kao što je to definisano, određivanje legalnih poteza u poziciji i razmatranje rezultujućih
pozicija. Za poziciju sa slike 6.16, legalni potezi za belog kralja su g4,h3,h2 i f2. Sve četiri
145
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
pozicije koje su rezultat odigravanja ovih poteza se evaluiraju I sondiraju u bazi. U svakoj od
ove četiri pozicije crni dobija (sondiranje u bazi daje vrednost 0) tako da se prema principu
koji je izložen može smatrati da je osnovna pozicija izgubljena za belog.
Ako je data pozicija sa slike 6.17, legalni nastavci za belog su g4, h3, h4 i f4. Potez g4
koji uzima protivničkog skakača se razmatra na početku liste nastavaka. Posle uzimanja na g4
nastaje pozicija u kojoj crni ima kralja i lovca protiv kralja što nije dobitnička pozicija tako da
je izlaz iz baze za ovaj slučaj 1.
Slika 6.18 Određivanje evaluacije remi pozicije za belog koji je na potezu.
Pošto postoji nastavak u kome crni ne dobija, a koji beli može da odigra jer je na potezu
ostali nastavci (h3,h4 i f4) se ne moraju ni evaluirati jer je osnovna pozicija remi.
Primenom prikazanih tehnika, autor je razvio sopstveni format za baze završnica.
ENAX baze, koje su integralni deo programskog sistema Axon, građene su na
prikazanim principima i koriste samo 1 bit informacije za evaluaciju pozicija iz
završnice.
Ovim principom se dobija maksimalna kompresija baza. Za sintezu ENAX baza sa 3,4 i 5
figura autor je koristio sopstveni konvertor i Nalimov baze kao osnovu. Konvertor
omogućava da se generišu sve legalne pozicije sa 3 ,4 i 5 figura, kojih ima više milijardi, i da
se za svaku poziciju izvrši kodiranje u ENAX formatu. Prilikom sinteze korišćeni su principi
vertikalne i oktalne simetrije koji su već objašnjeni u poglavlju o bazama. Rezultat
146
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
automatske sinteze, koji na PC računaru sa AMD Barton 2200+ procesorom traje oko nedelju
dana, predstavljaju ENAX baze koje su prema broju figura i veličini podeljene na 6 datoteka.
Idealan raspored je da se formiraju tri tabele na 3,4 i 5 figura, ali je ENAX baza sa 5 figura
zbog veličine morala biti podeljena na četiri klastera kako bi maksimalni kapacitet datoteke
bio sveden na manje od 2Gb. Memorijski zahtevi za određene datoteke su prikazani u sledećoj
tabeli:
Tabela 6.10 Tabela prikazuje memorijske zahteve za pojedinačne datoteke.
Datoteka
Kapacitet
Komentar
ENAX3
10836 bajta
Baza za 3 figure
ENAX4
11.151.744 bajta
Baza za 4 figure
ENAX51 1.805.884.416 bajta Baza za 5 figura
(prvi klaster)
ENAX52 1.800.336.384 bajta Baza za 5 figura
(drugi klaster)
ENAX53 1.800.388.608 bajta Baza za 5 figura
(treći klaster)
ENAX54 886.095.296 bajta
Baza za 5 figura
(četvrti klaster)
Totalni kapacitet ENAX baze za 3,4 i 5 figura je 6.304.866.284 bajta, dakle približno
kapacitetu koji je potreban za Nalimov bazu. ENAX baze koriste programi Geniss Axon I
Axon I. U toku rada sa njima pokazale su se neke od prednosti u odnosu na Nalimov baze:
Brži pristup – Pristup ENAX bazama sa korišćenjem bafera je brži nego kod Nalimov
baza. Osnovni razlog je u tome što se podaci u ENAX bazi nalaze u
nekompresovanom formatu za razliku od Nalimov baze. ENAX predstavlja zapravo
tabelu bitova kojoj se pristupa direktno, u jednoj naredbi, koristeći relativno prostu
formulu za proračun adrese. Velika prednost je i u optimalnom korišćenju
memorijskog kapaciteta. ENAX baza u nekompresovanom stanju sa 5 figura ima
približno isti kapacitet kao kompresovana Nalimov baza.
Znatno manji broj datoteka u definiciji baze: definicija ENAX baza za 3 i 4 figure ima
samo dve datoteke. Nalimov baza za 3 i 4 figure ima 70 fajlova. Definicija ENAX
baze za 5 figura ima 4 datoteke, a Nalimov baza 228. Rad sa velikim brojem otvorenih
datoteka stvara određene probleme operativnom sistemu i degradira performanse celog
sistema.
Mogućnost korišćenja memorijske ENAX baze sa 3 ili 4 figure. Potrebni kapacitet za
memorisanje ENAX baze za 3 i 4 figure iznosi oko 11Mb tako da nije nikakav
problem da se baza u kompletnoj veličini kopira u radnu memoriju i da se direktno
koristi u realnom vremenu. Time je omogućeno višestruko ubrzanje u odnosu na rad
sa diskom. Za memorisanje Nalimov baze sa 3 i 4 figure je potrebno oko 31Mb tako
da je problem smeštanja u memoriju nešto teže rešiti. Razliku od 20Mb je korisnije
upotrebiti za proširenje opsega glavne transpozicione tabele.
147
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Mogućnost efikasnog sekundarnog kompresovanja i prenošenja: Prilikom naknadne
kompresije, korišćenjem standardnih arhivera (WinZip) kompletna ENAX baza se
može komprimovati sa 6.2 Gb na oko 700Mb i arhivirati na jedan klasičan CD optički
disk. Sličan postupak nije moguć za Nalimov bazu koja je u osnovi već ekstremno
sažeta, tako da je za njen prenos potrebno predvideti 2 DVD optička diska.
Prikazane teoretske tehnike predstavljaju osnovu za izgradnju kvalitetne šahovske
aplikacije Sve prikazane teoretske novine koje su i praktično proverene u testiranju na
turnirskim uslovima su implementirane i korišćene u raznim autorovim aplikacijama.
Uvođenje pojedinih tehnika je značilo postepeno povećavanje snage programa. U tezi su
prikazane samo ključne tehnike koje su od šireg teoretskog značaja dok sami programi sadrže
i brojne tehnike razvijene na programskom, implementacionom nivou. Druga strana ovih
istraživanja je u tome što se po iskustvu autora od 20-30 novih ideja samo jedna pokaže zaista
korisna. Ostali pristupi, ma koliko izgledali obećavajući u početku, moraju da budu odbačeni
posle dužeg praktičnog testiranja ako se pokaže da ne doprinose porastu ukupnih performansi
programa.
148
7
_____________________________________
IMPLEMENTACIJA I
EVALUACIJA SISTEMA
U ovom poglavlju biće prikazani razvojni i implementacioni detalji autorovog programskog
sistema Axon. Programski sistem obuhvata nekoliko aplikacija koje su razvijane duži niz
godina i koje su povezane u logičku celinu. Uvođenje novih programskih koncepcija i
tehnika, pojačavanje hardvera i paralelizacija su doveli do porasta snage programa od preko
700 ELO poena u odnosu na prvobitnu verziju. Na današnjem nivou razvoja, programski
paket Axon sadrži nekoliko šahovskih aplikacija koje obuhvataju problemski i realni šah.
Najjače verzije programa Axon na jednoprocesorskim sistemima su u rangu internacionalnog
majstora u šahu protiv ljudskih protivnika. Paralelni šahovski sistem Achilles, koji je razvijen
na osnovu autorove nove koncepcije korišćenjem principa vektorske paralelizacije, postiže
odlične rezulate u mečevima protiv drugih kompjutera. U raznim fazama teoretskog i
praktičnog razvoja, program je učestvovao na više turnira na kojima je igrao protiv šahovskih
majstora i postizao odlične rezultate. Takođe, program je učestvovao u nekoliko mečeva po
ubrzanom tempu protiv vrhunskih šahista i potvrdio visoke performanse.
7.1 Kratak vremenski pregled razvoja autorove šahovske aplikacije
Interesovanje autora za kompjuterski šah, kao jedan od najsloženijih vidova veštačke
inteligencije je izazvao istorijski meč između IBM-ovog šahovskog superkompjutera Deep
Blue i svetskog šampiona Garija Kasparova održanog maja 1997 god. Podržan od strane
najveće kompjuterske kompanije na svetu i praćen od strane globanih telekomunikacionih
sistema, meč je predstavljao snažan impuls za razvoj mnogih tehničkih oblasti veštačke
inteligencije, a pre svega teorije igara koja je kasnije doživela pravu ekspanziju u mnogim
oblastima. Rezultatski, kompjuter je pobedio prvaka sveta u meču od 6 partija rezultatom 3.5-
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
2.5. Iz istorije kompjuterskog šaha poznato je da su kompjuteri i ranije, pre 1997 pobeđivali
najjače svetske velemajstore, pa i Kasparova u sporadičnim partijama na kratkim vremenskim
kontrolama. Meč protiv Deep Blue mašine je značajan po tome što je to bila prva pobeda
kompjutera nad svetskim šampionom u šahu u meču sa klasičnom kontrolom vremena (4 sata
po partiji), gde se smatralo da su ljudski velemajstori neprikosnoveni. Da napomenemo da je
u to vreme ELO rejting Kasparova iznosio preko 2840 poena. Ovim mečom ispunjena je
prognoza bivšeg šampiona sveta Mihajla Botvinika, koji je i sam učestvovao u konstrukciji
šahovskih mašina, da će do kraja 20. veka kompjuter biti svetski šampion u šahu. Sa druge
strane, jasno je da je kompjuterska tehnologija u hardverskom i softverskom smislu toliko
napredovala, da je nivo veštačke inteligencije u domenu šaha prevazišao vrhunsku ljudsku
inteligenciju, što je prvi nagoveštaj budućnosti koje će izazvati pojava inteligentnih mašina u
mnogim sverama života.
U periodu od 1997 do početka 2000 god. autor je, radeći samostalno i u slobodnom
vremenu, počeo da sve značajnije proučava probleme veštačke inteligencije koji se javljaju u
kompjuterskom šahu i da radi na razvoju algoritama i programa za neke jednostavnije logičke
igre. Savladavši pre svega tehnike obrade stabla, od početka 2000. autor intenzivno radi na
razvoju prve jednoprocesorske verzije šahovskog programa Geniss Axon 2000. U početku,
algoritmi su bili orijentisani za operativni sistem MS DOS, da bi u verziji Geniss Axon 2001
autor prešao na rad pod operativnim sistemom MS Windows 95, da bi u poslednjoj verziji
Geniss Axon XP, program bio prilagođen za rad pod operativnim sistemom MS Windows XP.
Najvažniji momenti u razvoju programa su praćeni odgovarajućim testiranjima u realnim
uslovima protiv jakih šahovskih igrača i šahovskih majstora. Etape u razvoju programa su
prikazane nastavku:
•
Jun 2001 prva zvanična partija odigrana pred publikom protiv Prof. Dr Mark
Karpovskog sa Bostonskog univerziteta u okviru međunarodne konferencije
“Kompjuterska inteligencija”. Partija nije imala kontrolu vremena i završila se
pobedom kompjutera. Prof. Kaprovski ima snagu jakog klubskog igrača I
kategorije. Prva verzija programa Geniss Axon 2000 je radila na PC kompjuteru
PII 400Mhz i 128 Mb memorije, bez baza otvaranja. Procenjena snaga programa je
bila 2090 ELO poena.
•
Februar 2002 prvo učestvovanjee programa (Geniss Axon 2001) na
tradicionalnom otvorenom šahovskom turniru povodom Dana inženjera i
tehničara, održanom na Elektronskom faklultetu u Nišu. U jakoj konkurenciji 28
šahista, u kojoj je učestvovlo 2 igrača sa titulama internacionalni majstor i FIDE
majstor, 7 majstorskih kandidata i prvokategornika igralo se 7 kola po švajcarskom
sistemu sa tempom 15 minuta po igraču. Kompjuter je podelio od 3-5. mesta za 5
poena iz 7 parija (2 remija i jedan poraz). Program Geniss Axon 2001 je radio na
PC kompjuteru PII 400Mhz i 128 Mb memorije, bez baza otvaranja. Zbog
usavršavanja u algoritmu, program je bio jači od svog predhodnika i imao
procenjenu snagu od 2160 ELO poena.
•
27. Jun 2002 Na Elektronskom fakultetu je odigran promotivni meč između
internacionalnog majstora Branimira Maksimovića (rejting 2402) i programa
Geniss Axon XP. Usavršena verzija programa je podržavala linearne baze
otvaranja i optimizovana je za rad na AMD XP procesorima i Windows XP
operativnom sistemu. Meč se igrao u četiri partije sa tempom 30 min. po igraču i
150
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
završen je rezultatom 2:2, bez remija. Program je tada koristio jedan od najbržih
PC računara koji su bili na raspolaganju (Athlon XP 1800+ procesor) i dostigao
rejting 2340-2370.
•
Oktobar 2002 U okviru međunarodne konferencije ICEST 2002 odigran je
brzopotezni turnir (5 min. po igraču) u 7 kola, igralo se naizmenično i sa belim i sa
crnim figurama po dve partije po dvokružnom sistemu. Kompjuter je podelio prvo
mesto sa 11.5 bodova od mogućih 14. Korišćen je komercijalni računar srednjih
performansi sa INTEL Celeron 1Ghz procesorom i program Geniss Axon XP.
•
Februar 2003 Na Elektronskom fakultetu je održan tradicionalni otvoreni
šahovski turnir povodom dana inženjera i tehničara. Igralo se sa tempom od 15
minuta po igraču, 7 kola po švajcarskom sistemu. U veoma jakoj konkurenciji 24
igrača, uz učešće 1 internacionalnog majstora, dva FIDE majstora, 9 majstorskih
kandidata, 8 prvokategornika i drugokategornika, program je zauzeo prvo mesto
zabeleživši 5 pobeda (protiv IM, FM i 3 MK), i dva remija (protiv FM i MK).
Usavršena verzija programa Geniss Axon XP (v50) je koristila PC računar sa
Athlon XP 2000+ procesorom i u središnjici je računala više od 2 miliona pozicija
u sekundi. Ova verzija programa je prevazišla snagu od 2450 ELO poena – nivo
jakog internacionalnog majstora.
•
17. Jun 2003. Na Elektronskom fakultetu je održan šahovski meč između
velemajstora Miroslava Tošića (rejting 2470) i kompjuterskog programa Geniss
Axon XP (v63) pobedom 3.5-0.5 za velemajstora Tošića. Kompjuter je koristio
verziju koja nije dovoljno testirana, tako da je po mišljenju nekih eksperata igrao
oslabljen za oko 50 ELO poena. Na kompjuteru sa AMD 2200+ procesorom
program je realno igrao sa snagom od oko 2410 poena. Ovaj meč na vrhunskom
nivou je pokazao sve nedostatke programa u fazi otvaranja, strategije u središnjici i
završnici.
•
Jul 2003. Stabilna verzija programa Geniss Axon XP (v50) radeći na laptop
kompjuteru sa INTEL 1.8Ghz procesoru je učestvovala na četvoromeču koji je
održan u centru Niša, na otvorenom. Nekoliko stotina gledalaca je imala priliku da
vidi program uživo jer su partije i analiza kompjutera prenošeni uživo, preko
projektora. Uz ušestvovanja 3 vrhunska internacionalna majstora, igrajući po
ubrzanom tempu od 25 minuta po igraču, kompjuter je osvojio 1. mesto sa 2.5
poena iz tri partije, što je najveći uspeh do tada.
•
Februar 2004. Nova eksperimentalna verzija programa Axon sa implementiranom
null-move heuristikom je igrala na tradicionalnom turniru na Elektronskom
fakultetu. Novine u programu su se takođe odnosile na uvođenje transpozicione
baza otvaranja. Program je zauzeo 3 mesto, sa 5 poena iz 7 partija, uz dva remija i
jednim porazom koji je rezulat direktne greške operatera. Null-move verzija je
donela porast snage programa od oko 40 ELO poena.
•
Maj 2004. Program Axon je koristeći laptop mašinu sa AMD MP 2400+
procesorom igrao sa pobednikom otvorenog prvenenstva Niša IM Miroslavom
Miljkovićem meč u 2 partije sa vremenskom kontrolom 25 min. po igraču. Meč se
151
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
završio 1:1 uz dva remija. IM Miljković je u tom momentu imao procenjeni rejting
na turniru od oko 2500 ELO poena.
•
5. Februar 2005 – Na 7. tradicionalnom šahovskom turniru na Elektronskom
fakultetu učestvuje usavršena verzija programa Axon I sa transpozicionim bazama
otvaranja i prvi put primenjenim bazama završnica tipa ENAX, o kojima je bilo
reči u ranijem delu rada. U konkurenciji 34 igrača, među kojima je 4 intermajstora,
2 FIDE majstora, 11 majstorskih kandidata, 9 prvokategornika… program zauzima
2. mesto sa 5.5 poena iz 7 partija, bez poraza. Ovo je bio najjači turnir na kome je
program učestvovao. Radeći na kompjuteru sa AMD XP 2200+ procesorom,
kompjuter je igrao sa performansama od oko 2490 ELO poena.
•
25. Februar 2006 – Na 7. tradicionalnom šahovskom turniru povodom dana
inženjera i tehničara održanom na Elektronskom fakultetu, u konkurenciji 36
igrača sa nekoliko internacionalnih i FIDE majstora učestvuje nova verija
programa Axon II. Nova verzija programa predstavlja nov potpuno redefinisan
program na mašinskom jeziku za 32-bitne kompjutere. Koristeći slična znanja i
tehnike iz ranijih verzija, posle jednogodišnjeg rada autor je pripremio program
koji je za oko 100% brži u pogledu broja pozicija u sekundi u odnosu na program
Axon I i takođe ima implementiran niz novih tehnika izgrađenih oko R=3 nullmove algoritma, nov tip glavne transpozicione tabele, kao i implementirane
procedure za vezu sa transpozicionom bazom otvaranja i bazom završnica tipa
Nalimov sa 3-4-5 figura. Ovo je program koji je protiv ljudi dostigao snagu od
preko 2540 ELO poena radeći na kompjuteru sa novim 64 bitnim AMD
procesorom na frekvenciji 1.8Ghz. Program je osvojio prvo mesto sa 6 poena iz 7
partija bez poraza, što je ako se ima u vidu snaga turnira do tog momenta najbolji
rezultat.
•
Mart 2006 – Posle jednogodišnjeg razvoja i testiranja postao je operativan autorov
višeprocesorski paralelni sistem Achilles. Sistem je baziran na novom teoretskom
principu naznavom vektorska paralelizacija. Radeći na 8 AMD xp64 procesora na
kojima se izvršavaju posebno prilagođene verzije programa Axon II, sistem u
središnjici razvija 6-7 miliona pozicija u sekundi. Po preliminarnim rezultatima u
mečevima protiv najjačih jednoprocesorskih programa, uz korišćenje novog tipa
sintetičke baze podataka, sistem razvija peformanse više od 2750 ELO poena.
Ko što je to više puta istaknuto, šahovski program predstavlja integraciju širokog spektra
softverskih i hardverskih tehnika. Tehnološka rešenja se u ovom domenu veštačke
inteligencije, kao u retko kojoj oblasti, mogu direktno evaluirati i uporediti sa nivoom ljudske
inteligencije. Turnirski tip testiranja, kad mašina u potpuno istim uslovima igra protiv čoveka
– šahovskog majstora predstavlja najzahtevniji ali i najteži vid provere. U proteklim
godinama, programski sistem Axon, u raznim verzijama je po mišljenju autora uspešno prošao
seriju testova ovog tipa.
152
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
7.2 Uticaj pojedinih implementiranih tehnika na porast snage programa
Imajući u vidu vremenski tok razvoja, od prvobitne verzije programa nastale u leto 2001,
programski sistem Axon se razvio od nivoa klubskog igrača (Geniss Axon 2001) do nivoa koji
dostiže velemajstorsku snagu u osmoprocesorskoj verziji (Achilles). Porast snage iznosi oko
700 ELO poena za poslednjih 5 godina razvoja, što šahovski programski sistem Axon svrstava
u jedan od napropulzivnijih razvojnih sistema u kompjuterskom šahu. Na sledećem dijagramu
prikazan je porast snage najjačih verzija programa po godinama, definisan pomoću ELO
rejtinga:
Porast ELO snage programa
3000
2500
2360
2450
2490
2540
2002
2003
2004
2005
2750
2090
ELO
2000
1500
1000
500
0
2001
2006
Slika 7.1 Porast snage programa po godinama.
Na porast snage je uticalo uvođenje brojnih naprednih tehnika i novih verzija algoritama,
uvođenje transpozicionih baza otvaranja i baza završnica, kako i napredak u hardveru i
paralelizaciji. Uticaj uvođenja pojedinih ključnih tehnika na porast ELO snage programa je
sistematizovan u sledećoj tabeli:
Tabela 7.1 Porast snage programa u funkciji uvođenja naprednih tehnika.
Verzija programa
Geniss Axon 2001
Geniss Axon 2002
Geniss Axon XP
Osnovne karakteristike
ALFA-BETA tehnika. Program
je u potpunosti napisan na
mašinskom jeziku u 16-bitnom
INTEL x86 formatu.
ALFA-BETA, znatno unapređen
quiescence tragač, nova
evaluaciona funkcija, uvođenje
6-bajtnog hash sistema.
Poboljšanja u hash sistemu.
Uvođenje linearne baze
otvaranja. implementacija
tehnike A.D.C. adaptivne
Porast ELO rejtinga u odnosu
na predhodnu verziju
Osnovna verzija programa na
PII 400 Mhz PC kompjuteru ima
rejting 2090 ELO poena.
Korišćenjem ekvivalentnog
hardvera napredak je +70 ELO
poena. Sa korišćenjem AMD XP
1800+ procesora i 64Mb hash
memorije, napredak je +270
ELO poena.
Napredak iznosi +80 do 90 ELO
poena. Za testiranje je korišćena
AMD XP 2000+ mašina.
153
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Axon I
Axon I
Axon II
Achilles
kontrole dubine.
Uvođenje R=2 null-move
tehnike, implementacija
transpozicione baze otvaranja.
Uvođenje ENAX baze završnica.
Potpuno nov program napisan
na 32 bitnom X86 mašinskom
jeziku sa korišćenjem 64 bitnih
MMX ekstenzija. Poboljšanja u
svim elementima programa.
Povezivanje sa Nalimov bazom
završnica.
Paralelni osmoprocesorski
sistem baziran na principu
vektorske paralelizacije i
bazičnim AXON II mašinama.
Dobitak iznosi +40 ELO poena
na istom hardveru.
+10 ELO poena
+ 40-50 ELO poena.
Značajan porast snage u odnosu
na jednoprocesorske verije.
Preliminarni testovi pokazuju
porast snage od +200 ELO
poena.
7.3 Osnovna koncepcija i struktura programskog sistema
Programski sistem Axon obuhvata nekoliko programa i sintetički generisanih struktura
podataka. Razvoj programskog sistema je sledio prirodan tok usavršavanja sa konstantnim
porastom ELO rejtinga samog programa, kao što je to prikazano u predhodnom delu ovog
poglavlja. Strukturu programskog sistema Axon možemo prikazati na sledećoj slici (Slika
7.2):
Slika 7.2 Struktura programskog sistema AXON.
154
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Jezgro programskog sistema čine programi za igranje šaha. Svi programi ovog tipa su
razvijeni u hibridnoj programskoj arhitekuri. Osnova aplikacije razvijana je u programskom
okruženju Delphi for Windows a glavni deo programa koji implementira algoritme za obradu
stabla igre je na mašinskom jeziku. Osnovne verzije programa koje sadrže 16-bitni mašinski
kod (Geniss Axon I Axon I) su razvijane u programskom okruženju Delphi 1.0, a 32-bitna
verzije programa Axon II i Achilles u Dephi 7 razvojnom sistemu. Najsavršeniji program sa
16-bitnim kodom, Axon I, sadrži oko 50.000 linija koda u asemblerskom programskom jeziku
i oko 7000 linija pisanih na Pascal-u. Programski sistem Axon, ako se imaju u vidu sve
aplikacije koje su prikazane u strukturi programskog sistema, sadrže oko 60.000 linija koda u
Pascal-u i oko 350.000 linija 16-bitnog i 32-bitnog koda.
7.4 GMS (Geniss Mate Solver)
Kao što je već u radu detaljno prikazano, u problemskom šahu je opseg problema i zadataka
koji se postavljaju pred šahovsku aplikaciju znatno manji tako da je koristeći osnovne
algoritme moguće efikasno i relativno jednostavno realizovati program koji rešava pozicije
tipa mat-u-N poteza. Jedna od prvih aplikacija u sistemu Axon koja je napisana je G.M.S
(Geniss Mate Solver) čiji je GUI prikazan na sledećoj slici:
Slika 7.3 Geniss Mate Solver v2.0 aplikacija – grafičko okruženje.
Aplikacija omogućava rešavanje matova koristeći originalni princip nulte evaluacione
funkcije na način kako je prikazano u predhodnom poglavlju. U toku rešavanja problema
program dostiže ekstremno visoku brzinu rada. Na PC mašini sa INTEL 1Ghz Celeron
procesorom, rešavajući poziciju sa slike 7.3 sa 15 figura, dostignuta brzina iznosi 1.149.645
evaluacija u sekundi. Podržane su sve standardne opcije grafičkog okruženja – postavljanje
pozicije, snimanje i učitavanje iz predefinisanih baza pozicija, kao i rešavanje korišćenjem
ugrađenog mašinskog G.M.S. programa.
155
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
7.5 Axon I
Axon I predstavlja najaču verziju programa iz grupe 16-bitnih aplikacija. Grafičko okruženje
je integrisano sa mašinskim programom. U programskom delu implementirane su standardne i
niz naprednih tehnika. Jezgro programa je ALFA-BETA/PVS/R=2 null-move tragač, sa
mašinski definisanom generatorskom i evaluacionom funkcijom. Na AMD XP 2000+
mašinama, program Axon I ima snagu jakog internacionalnog majstora. U turnirskim
uslovima i mečevima, program je dobio niz jakih profesionalnih šahista sa titulama IM i FIDE
majstora. Verzija v50 je naročito prilagođena za igru protiv ljudi (“anti-grandmaster
strategy”) posebnim podešavanjem evaluacione funkcije. Na slici 7.4, prikazano je grafičko
okruženje programa Axon I:
Slika 7.4 Axon I grafičko okruženje.
Pored standardnih opcija, program sadrži implementiranu A.D.C. proceduru, Winboard
adapter za vezu sa drugim programima u fazi testiranja, vezu sa transpozicionom bazom
otvaranja tipa OPENX i mogućnost konekcije sa drugim procesorom koristeći postojeću LAN
mrežu. Axon I sadrži modul za formiranje dual sistema za paralelno izvršavanje programa na
2 procesora po originalnoj metodi podeljenih listi čija je teoretska i praktična osnova
prikazana u predhodnom poglavlju. Pojačanje snage koje se dobija u dvoprocesorskoj
konfiguraciji iznosi oko 40-50 ELO poena.
156
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
7.6 Axon Arena Benchmark Engine - benčmark aplikacija
Verzija programa Axon I je upotrebljena za izgradnju aplikacije za merenje brzine hardvera
kod jednoprocesorskih sistema (Axon Benchmark Engine). Program je potpuno zatvoren u
izvršnu datoteku i može se koristiti kao samostalna benchmark aplikacija. U saradnji sa
kompanijom za proizvodnju šahovskog softvera Arena sa sedištem u Nemačkoj, razvijena je
plug-in benchmark verzija programa Axon koja se isporučuje sa profesionalnim Arena v1.0
grafičkim okruženjem od novembra 2003 god. (slika 7.5):
Slika 7.5 Axon Benchmark kao deo profesionalnog grafičkog okruženja Arena v1.0.
Po rečima eksperata iz kompanije Arena u prvim mesecima eksploatacije, benchmark
program je imao oko 40000 download-a iz više od 150 zemalja. Na svetskom nivou po
stepenu korišćenja Axon Benchmark je u oblasti referenciranja hardvera u samom vrhu,
odmah posle profesionalnih programa ChessBase Fritz i Shredder Landmark aplikacija.
Otvorena je i adresa na sajtu www.sedatchess.com na kome se vrši kontinualno testiranje i
prezentacija rezultata sa Axon Benchmark aplikacijom.
7.7 Aplikacija za razvoj i testiranje evaluacione funkcije
Sa početkom rada na novoj 32 bitnoj verziji programa, autor se suočio sa problemom
efikasnog razvoja i testiranja evaluacione i quiescence procedure u vidu nezavisne aplikacije
koja je otvorena i namenjena samo konstrukciji pojedinih ključnih procedura programa.
Grafičko okruženje programa za testiranje funkcija prikazano je na slici 7.6:
157
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Slika 7.6 Grafičko okruženje programa za testiranje funkcija
Grafičko okruženje sadrži sve neophodne funkcije koje su od koristi programeru za razvoj
evaluacione funkcije. Pored standardnih opcija za kreiranje i memorisanje pozicija u vezi sa
vizuelnim prikazom raznih parametara i argumenata, implementriana je specijalna opcija za
automatsko testiranje evaluacionih funkcija koja se bazira na slučajnom raspoređivanju skupa
od N figura na šahovskoj tabli vodeći računa o legalnosti pozicije. Testiranje pozicija na razne
parametre računajući i simetriju je veoma brzo, što značajno olakšava programeru
implementaciju i promenu pojedinih aspekata evaluacije koje su neophodne u dinamičkoj fazi
razvoja aplikacije. Konekcija sa glavnom aplikacijom je veoma jednostavna i obavlja se preko
zajedničke UNIT datoteke koju koristi i osnovna aplikacija. Posle prevođenja na mašinski
jezik, kreira se datoteka ENGINE.DCU koja sadrži sve relevantne strukture podataka,
procedure i funkcije za realizaciju šahovske mašine. U fazi kompilacije osnovnog programa
Axon II jednostavno se u listi uses direktiva navodi unit engine.dcu čime je povezivanje
izvršeno na veoma efikasan način. Kontrola pojedinih procesa u unit-u engine.dcu se obavlja
preko niza zajedničkih procedura od kojih su ključne:
procedure
procedure
procedure
procedure
procedure
procedure
procedure
STORE_TO_HASH;assembler;
RESET_HASH;
{Brise hash i inicijalizira promenjive}
POWER_HASH;
{Nasleđuje informacije iz prosle iteracije hash-a}
RESET_AXON;
RESET_SEARCHER;
{Resetuje tragač}
RESET_PPS;
RESET_STACK;
{Resetuje stek}
procedure FLOAT_MOVES;assembler;
procedure FLOAT_SHARP;assembler;
procedure FLOAT_HASH;assembler;
{Procedure za izbor najboljeg poteza}
158
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
procedure FLOAT_FROM_HISTORY;assembler;
procedure MARK_HASH_MOVE;assembler;
procedure MOVE;assembler;
{Generisanje poteza}
procedure AXON;assembler;
move/generator}
procedure AXON_ILLEGAL;assembler;
procedure AXON_DRAW;assembler;
procedure AXON_TO_EI;assembler;
procedure AXON_EAX_VALUE;assembler;
{Generisanje liste poteza,
procedure NULL_MOVE;assembler;
{Izlaz za ilegalnu poziciju}
{Izlaz za remi poziciju}
{Konekcija za Nalimov bazu }
{Određivanje uslova za Null-Move}
function QUIESCENCE_SEARCHER(depth,VERTICAL,ALFA,BETA:integer):integer;
function
SEARCHER(depth,LOCAL_HORISONT,ALFA,BETA,incrementator:integer):integer;
procedure SEARCH_HORISONT(LEVEL:cardinal); {Osnovne procedure za obradu
stabla}
procedure AXON_II;
{GLAVNI ITERATIVNI GENERATOR, KONTROLISAN VREMENSKI}
procedure ILLEGAL_DETECTOR;assembler;
procedure LEGAL_MOVES;assembler;
procedure
procedure
procedure
procedure
poteza}
procedure
procedure
{Detekcija ilegalnosti pozicije}
{Lista legalnih poteza}
RESET_HISTORY;
{Obrada istorije poteza}
SORT_HISTORY;
UPPGRADE_HISTORY;
NEW_HIST_MOVE(move:cardinal); {Dodaje se novi potez u listu
RESET_HY;
{Brise hystory strukturu i inicijalizira promenjive}
RECHARGE_HY;
procedure EVALUATOR;assembler;
{EVALUATOR}
procedure load_FEN_to_X(s:string); {Konverzione funkcije}
procedure load_epd_string(ss:string; var bmq,bmq2,bmq3,nameq,commq:string);
function decode_epd_move(m:cardinal):string;
function compare_epd(move1,move2:string):Boolean;
procedure table_to_oax;
procedure inverse_x;
{OAX convertor za obradu OPENX baza}
procedure check_legal_moves_white;assembler;
pozicija za bele i crne}
procedure check_legal_moves_black;assembler;
{Određivanje legalnosti
procedure INIT_TABLEBASES(o:string; e:PChar); {Inicijalizacija Nalimov
transpozicionih baza}
procedure INIT_NALIMOV(e:PChar);
Pošto se veći broj aplikacija referencira na ENGINE.DCU rešen je problem automatske
promene verzija programa, jednostavno se generiše novi UNIT u generatoru evaluacione
funkcije.
159
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
7.8 Axon II
Osnovna aplikacija nove generacije programa Axon II je u suštini šahovski program zatvoren
u monolitnu izvršnu datoteku koja se sa standardnim šahovskim vizuelnim okruženjima
povezuje korišćenjem UCI protokola. Na taj način postignut je veliki pomak u odnosu na
predhodne verzije koje su imale integrisanu formu. Povezivanje na standardna grafička
okruženja kao što su: ChessBase, Arena, ShredderClassic (Slika 7.6) i drugi omogućava
standardizaciju i pruža mnoge prednosti naročito u pogledu testiranja, konekcije sa
standardnim šahovskim serverima na Internetu, korišćenje mnogih opcija vezanih za kreiranje
baze otvaranja… Na slici 7.7 prikazana je inicijalizacija programa Axon II kao UCI engine
spregnut sa profesionalnim ShredderClassic GUI okruženjem:
Slika 7.7 Povezivanje Axon II programa sa ShredderClassic GUI
korišćenjem UCI protokola.
Testiranja koja su obavljena u pomenutim grafičkim okruženjima ukazuju na potpuno
stabilan rad programa Axon II fazi eksploatacije.
7.9 Paralelizacija programa korišćenjem originalne metode vektorske
paralelizacije
Prelazak na rad u višeprocesorskom okruženju dovelo je do potrebe za rešavanjem novog niza
problema na koncepcijskom, implementacionom i komunikacionom nivou. Izborom
paralelnog sistema koji se sastoji od skupa standardnih jednoprocesorskih PC mašina
povezanih LAN mrežom nameće nova rešenja koja u literaturi nisu dovoljno obrađena.
160
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Istražujući u ovoj oblasti, autor je došao do nove teoretske koncepcije na osnovu koje
je izgrađen potpuno nov algoritam paralelizacije na distribuiranim mašinama
korišćenjem metode vektorske paralelizacije.
Ako posmatramo klasični plan šahovskog programa koji je na više mesta u tezi obrađen,
možemo da registrujemo jasno izdvajanje 3 faze: glavni ALFA-BETA/PVS/null-move
algoritam se u terminalnim čvorovima oslanja na quiescence tragač koji se u svakom svom
čvoru poziva na evaluator.
osnovno stablo >> quiescence tragač >> evaluator
U osnovnom planu je jasna uočljiva linearna koncepcija šahovskog programa koja se
zapravo zasniva na principu redukcije – osnovna pozicija se kroz glavno stablo redukuje na
niz terminalnih čvorova koji se redukuju na quiescence procedure, a koja se zatim svodi na
niz čvorova koji se evaluiraju.
Nova koncepcija ima drugačiji plan koji se veoma jednostavno može objasniti. Naime,
umesto principa linearnosti uvodi se princip nelinearnosti tako što se osnovno stablo ne
završava quiescence tragačem već se u terminalnim čvorovima pokreće nov ciklus obrade.
Zapravo, evaluacija koja se obavlja u terminalnim čvorovima se prolongira za još jedan nivo.
Dakle, kao da je celi sistem stabla odlučivanja, ako se posmatra u X-Y ravni vektorski
pomeren za jedan nivo više. Nova koncepcija bi se mogla predstaviti na sledeći način:
osnovno stablo << >> vektorski evaluator
što predstavlja strukturu ciklusa. Nova koncepcija može da bude efikasna samo ako se u
terminalnim čvorovima upotrebe novi procesori, dakle u višeprocesorskom okruženju. U
zavisnosti od broja raspoloživih procesora, pomeranje može da bude za više od jednog nivoa,
ali je problem u tome što broj procesora raste približno sa kvadratom pomeraja što je
nepovoljno. Sa druge strane, prema predloženoj novoj koncepciji, rad svih procesora je
nezavistan i asinhron tako da je hardverski gledano između procesora potrebno uspostaviti
samo klasičnu distribuiranu mrežu, bez potrebe za višeprocesorskim matičnim pločama.
7.10
Achilles – paralelni šahovski sistem
Šahovski sistem Achilles predstavlja paralelni sistem nove generacije koji svoj rad bazira na
metodi vektorske paralelizacije sa jednim stepenom pomeraja nivoa evaluacije.
Osnovna verzija, koja se sastoji od osmoprocesorskog sistema baziranog na AMD X64
mašinama na 1.8 Ghz. i na programu Axon II u pojedinačnim čvorovima, generiše u preko
95% slučajeva jedan eksterni vektorski nivo, što u praktičnoj igri znači pojačavanje ELO
rejtinga osnovnih mašina za preko 200 ELO poena. Sa ovim rejtingom, paralelna mašina igra
na nivou koji može da dosegne rejtinge od preko 2800 ELO poena u partijama sa kraćom
vremenskom kontrolom (do 25 minuta po igraču). Teoretski gledano, ako bi na raspolaganju
bila mreža sa 82=64 procesora, mogla bi se metodom vektorske paralelizacije realizovati
vektorska mašina sa dva eksterna nivoa, tako da bi porast snage u odnosu na rejting programa
Axon II iznosio oko 400 ELO poena. To znači da bi paralelna mašina tog tipa igrala sa
snagom od preko 3000 ELO poena. Vizuelni izgled osnovne aplikacije koja vrši vektorsku
paralelizaciju i sinhronizaciju je prikazan na slici 7.8:
161
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Slika 7.8 Osnovna aplikacija za vektorsku paralelizaciju.
Povezivanje sa pojedinačnim Axon II mašinama koje rade na jednoprocesorskim
sistemima se obavlja korišćenjem UDP paketa. Ovaj vid komunikacije i sinhronizacije
omogućava da mašine ne moraju da budu na mreži sa istom IP adresom, što pruža i praktično
mogućnost za gradnju paralelnih sistema sa više desetina procesora.
7.11
Prezentacioni generator
Prezentacioni generator predstavlja jednostavnu aplikaciju koja u realnom vremenu, na
osnovu komunikacije korišćenjem UDP paketa sa AXON II UCI programom ili Achilles
serverom generiše trenutnu poziciju na stilizovanoj dvodimenzionalnoj šahovskoj tabli (slika
7.9):
Slika 7.9 Prezentacioni AXON generator.
162
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Pored komunikacije na principu UDP paketa i standardnih LAN mreža, razvijena je i
varijanta koja koristi komunikaciju preko standardnih komunikacionih COM portova pri
brzini od 96 Kbita/sec. Aplikacija je sa uspehom više puta korišćena u javnim mečevima koje
je igrao kompjuter.
7.12 Komunikaciona UDP aplikacija
Rešavajući komunikacione probleme za programski sistem Achilles, autor je koncipirao
univerzalni sistem za prenos kodiranih šahovskih informacija korišćenjem standardnih UDP
(Universal Datagram Protocol) protokola. Osnovna komunikaciona aplikacija je prikazana
na slici 7.10:
Slika 7.10 Univerzalna kontrolna UDP aplikacija.
Aplikacija omogućava direktnu komunikaciju preko Interneta, tako da Achilles server i
mašina na kojoj se igra, a koja ima instaliran Axon II UCI sistem, mogu biti na fizički
različitim mestima, što je veoma značajno za učestvovanje na međunarodnim turnirima.
Takođe, omogućena je daljinska kontrola sistema, tako da je izvodljivo preko Interneta
kontrolisati rad servera sve do nivoa sistemskog resetovanja pojedinih mašina.
7.13 OPENX generator otvaranja
Osnovna namena OPENX generatora otvaranja, kao što je to napomenuto ranije u tezi, je
kontrola generisanja i održavanje OPENX transpozicine baze otvaranja za Axon sistem.
Aplikacija (Slika 7.11) servisira potrebe za bazama otvaranja za sve programe Axon sistema –
pošto je koncepcijski OPENX format baze postavljen kao unutrašnji standard sistema.
163
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Slika 7.11 Grafičko okruženje programa za tretiranje baze otvaranja tipa OPENX.
Osim svih standardnih opcija koja imaju okruženja ovog tipa (SCID) OPENX generator
ima i opcije mašinskog učenja koje omogućavaju stvaranje veoma efikasnih sintetičkih baza
otvaranja. Po istraživanjima autora, korišćenje dobre sintetičke baze otvaranja može
poboljšati rejting u igri protiv nekog oponenta za 50-70 ELO poena.
7.14 Struktura sistema ACHILLES
Osnovna struktura autorovog šahovskog sistema Achilles prikazana je na Slici 7.12. Paralelni
šahovski sistem predstavlja implementaciju baziranu na naprednim algoritmima čija je
teoretska osnova prikazana u radu. On istovremeno predstavlja prvi šahovski progam sa
primenjenim principom vektorske paralelizacije i distribuiranom obradom. U osnovnoj
verziji, program koristi 8 procesora, ali je predviđenja mogućnost proširenja sistema do 16
procesora.
164
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Slika 7.12 Struktura paralelnog šahovskog sistema Achilles.
Osnovne karateristike programskog sistema Achilles su:
•
Sistem je baziran na korišćenju Axon II jednoprocesorkog 32-bitnog šahovskog
programa. Jednoprocesorska verzija programa se instalira u vidu modula na svakom
od 8 AMD X64 1.8Ghz procesora.
•
Sistem je distribuiranog tipa i radi na računarima koji su povezani lokalnom LAN
mrežom sa brzinom prenosa 100 Mbit/sec. Za korišćenje većeg broja računara u
sistemu, potrebno je predvideti korišćenje LAN mreže kapaciteta 1Gbit/sec.
•
Program Achilles server povezuje paralelni sistem u jednu celinu. On reguliše pravilnu
implementaciju algoritma vektorske paralelizacije,
organizuje distribuciju i
sinhronizaciju procesa u paralelnom sistemu, vrši sintezu informacija u realnom
vremenu dobijenih od procesora i organizuje komunikaciju sa Axon II UCI mašinom.
Svi vidovi unutrašnje komunikacije kao i veza sa UCI aplikacijom odvijaju se
upotrebom UDP paketa i IP adresa, tako da računari ne moraju da budu u istom file
sistemu, zapravo mogu da budu na razičitim fizičkim lokacijama na Internetu. Ovakav
pristup je potpuno nov i omogućava kreiranje paralelnog sistema na zahtev, samo kada
se igra šahovski meč ili turnir.
•
Program Axon II UCI predstavlja osnovnu aplikaciju koja ima višestruku namenu.
Prvo, ova aplikacija omogućava povezivanje sa Achilles serverom korišćenjem UDP
165
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
paketa čime je omogućeno fizičko lociranje servera nezavisno od lokacije na kojoj se
igra partija. Drugo, Axon II UCI sadrži implementiran Axon II šahovski program koji
konstantno radi paralelno sa serverskom aplikacijom čime je omogućena kontrola
situacija kada dođe do prekida kominikacije sa serverom ili do prekida rada samog
servera. U svakom momentu na raspolaganju je lokalna vrednost najboljeg poteza
generisana od strane jednoprocesorske Axon II mašine. Treće, omogućena je konekcija
sa ChessBase GUI grafičkim okruženjem korišćenjem standardnog UCI protokola,
čime se otvara mogućnost za povezivanje sa najjačim profesionalnim svetskim
serverima kao što je www.playchess.com.
•
Axon II UCI koristi OPENX transpozicionu bazu otvaranja. Koristeći eksterni Openx
generator, moguće je podešavati bazu otvaranja manuelno ili koristiti neku od opcija
za mašinsko učenje radi kreiranja sintetičke baze. Druga opcija je korišćenje
standardne baze tipa .bkt iz samog grafičkog okruženja.
•
Upotrebom eksternog evaluatora moguće je veoma jednostavno menjati parametre
samog šahovskog programa. Sve promene se ugrađuju u engine.dcu koji se distribuira
svim aplikacijama u sistemu tako da je omogućena sinhronizacija promena za sve
delove sistema.
Prema preliminarnim testovima paralelni sistem Achilles igra na nivou ELO rejtinga od 27502800. Postoji dosta prostora za dalja usavršavanja sistema dodavanjem još 8 procesora do
maksimalnog kapaciteta od 16 procesora, povećavanjem brzine rada osnovnih modula
upotrebom bržih procesora, prelaskom na 1Gbit mrežu, i poboljšanjem na nivou samih Axon
II programa.
166
8
_____________________________________
TESTIRANJE I EKSPERIMENTI
U nastavku rada, biće prikazani empirijski rezultati dobijeni testiranjem programa Axon I
Achilles pomoću raznih metoda. Prema cilju testiranja, metode možemo podeliti na dve velike
grupe: metode za određivanje vrednosti pojedinih programskih tehnika i metode za
određivanje ukupne šahovske snage programa. U prvu grupu spadaju pre svega metode za
automatsko testiranje korišćenjem standardnih EPD testova. U drugu grupu spadaju metodi i
postupci za određivanje snage programa na osnovu partija koje su igrane protiv drugih
oponenata čiji je rejting poznat. Danas se u ovom smislu, za izračunavanje šahovske snage
koristi ELO metoda, koje je u svom osnovnom vidu implementirana u mnogim aplikacijama i
grafičkim okruženjima. Ova metoda i sam postupak izračunavanja usvojen je kao standard,
tako da se njenom implementacijom vrši rangiranje igrača i šahovskih programa.
8.1 EPD testiranje
EPD testovi se sastoje od niza šahovskih pozicija koje su pažljivo odabrane. Svaka pozicija
poseduje jedan ili više najboljih poteza koji predstavljaju rešenje koje program mora da
pronađe u okviru ograničenih vremenskih resursa. EPD test predstavlja logičku celinu i može
da pruži dosta informacija naročito u fazi razvoja programa, kada se određuje uspešnost neke
tehnike. Uspešna primena novih metoda zasniva se na vrednovanju korišćenjem prikazane
tehnike testiranja. Standardni metod razvoja podrazumeva primenu testiranja nad identičnim
skupom EPD testova sa jednakim vremenskim ograničenjima, pa ako se pokaže da je
primenom tehnike došlo do poboljšanja procenta uspešnog rešavanja EPD testova tehnika se
usvaja a ako to nije slučaj ona se odbacuje. Potrebno je međutim sačuvati izvesnu dozu
rezerve u pogledu konačnih zaključaka zato što postoji određeno međudelovanje dve ili više
istovremeno primenjenih tehnika tako da može doći do izvesne divergencije rezultata. Sa
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
druge strane ne postoji uvek direktna korespodencija između uspešnosti u EPD testiranju i
ukupnog nivoa igre realnim turnirskim okolnostima.
Za testiranje strateških i taktičkih mogućnosti programa Axon koristiće se standardni EPD
testovi: vac,yazgac,bk, bt2450,bt2630,CCC-4,kaufman,kaufman2,lct2,mats,quick. Ovi testovi
predstavljaju ekvivalente benchmark testovima u nekim drugim oblastima istraživanja.
Testovi su različite orijentacije, neki tretiraju pre svega taktičke sposobnosti programa, neki
strateške, određeni testovi obrađuju pozicije u središnjici ili završnici. Često se dešava da
neka tehnika pokazuje napredak u jednoj grupi testova a da smanjuje procenat uspešnog
rešavanja u drugoj grupi. Za sva testiranja koristiće se autorova razvojna aplikacija Axon
Evaluation Tester koja u sebi ima ugrađenu logiku za automatsko izvršavanje EPD testova.
Hardver na kome su testiranja obavljenjena je PC sa CPU AMD Sempron 2600+, 512Mb
DDR400, matičnom pločom Microstar K7N2. Osnovno testiranje koje ćemo obaviti je
taktičke prirode i obuhvata VAC.EPD test. On se sastoji od 300 taktičkih pozicija. Program
Axon će se izvršavati inkrementalno, povećavajući dozvoljeno vreme analize u svakom
prolazu. Rezultati su prikazani u sledećoj tabeli (Tabela 8.1):
Tabela 8.1 Rezultati testiranja VAC.EPD testa sa inkrementalnim povećanjem vremena.
Vreme testiranja po
poziciji (sec)
2
5
10
20
60
Rezultat
265
279
285
290
293
Povećanje u odnosu na
predhodno testirana
+14
+6
+5
+3
Procenat uspešnosti
EPD testiranja
88 %
93 %
95 %
97 %
98 %
Grafički se ovi rezultati mogu prikazati na sledećem grafikonu (Slika 8.1):
Pozicije
VAC.EPD
300
295
290
285
280
275
270
265
260
255
250
Broj pozicija
2
5
10
20
60
Vrem e
Slika 8.1 Rezultati taktičkih testova VAC.EPD.
Rezultati testiranja pokazuju postepeno povećanje procenta uspešnosti u funkciji vremena.
Primećuje se međutim da, dok je porast vremena linearan koji postepeno prelazi u
eksponencijalnu funkciju, porast uspešnosti sledi logaritamsku krivu. Ovo testiranje direktno
168
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
ukazuje da negativno delovanje efekta kombinatorne eksplozije. Optimalne taktičke
performanse program Axon postiže za 5-10 sec vremenske intervale, kada je taj procenat
93%-95%.
Sledeća grupa testiranja odnosi se na uticaj null-move tehnika sa različitim faktorima
redukcije na taktičke osobine programa. Za testiranje je korišćen VAC.EPD test sa
vremenskim ograničenjem od 3 sec. Bazična vrednost testiranja obavljena je korišćenjem
samo ALFA-BETA tehnike. Sledeći nivo testiranja obavljen je uključivanjem transpozicione
tabele i history heuristike. U nastavku testiranja razmatrani su uticaji primene null-move
tehnika sa stepenom redukcije R=2, R=3 i R=4 i uključenim odnosno isključenim
transpozicionim tabelama. Rezultati su prikazani u sledećoj tabeli (Tabela 8.2):
Tabela 8.2 Tabela prikazuje uticaj pojedinih tehnika na rezultate testiranja.
Programerske tehnike upotrebljene za
analizu
ALFA-BETA
ALFA-BETA + transpozicione tabele
ALFA-BETA + R=2 null-move
ALFA-BETA + R=2 null-move +
transpozicione tabele
ALFA-BETA + R=3 null-move
ALFA-BETA + R=3 null-move +
transpozicione tabele
ALFA-BETA + R=4 null-move
ALFA-BETA + R=4 null-move +
transpozicione tabele
Broj rešenih pozicija na
VAC.EPD testu
248
264
256
266
Prosečna
dubina
5.89
6.51
7.06
7.96
258
270
7.17
8.28
258
268
7.22
8.5
Rezultati iz tabele 8.2 su prikazani na sledećim grafikonima:
Grafik broja resenih pozicija
275
270
265
260
255
250
245
240
235
1
2
3
4
5
6
7
8
Slika 8.2 Grafikon prikazuje broj rešenih pozicija.
169
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Grafik prosecne dubine
10
8
6
4
2
0
1
2
3
4
5
6
7
8
Slika 8.3 Grafikon prikazuje prosečnu dubinu.
Analiza rezultata pokazuje pre svega odlučujući uticaj transpozicionih tabela na
performanse samog programa. Prema prikazanim rezultatima najoptimalnija konfiguracija
algoritma za traženje podrazumeva korišćenje R=3 null-move tehnike sa uključenim
transpozicionim i history heuristic tehnikama. Korišćenjem ove tehnike postiže se
maksimalan broj rešenih pozicija uz prosečnu dubinu 8.28. Korišćenjem R=2 null-move
tehnike, koja teoretski generiše manje mogućnosti za grešku od R=3 algoritma, postižu se
nešto slabiji rezultati u testiranju, 1.5% manje rešenih pozicija i 3.9% manju prosečnu dubinu.
Pošto je korišćenje transpozicionih tabela neophodno, radi daljeg preciznijeg određivanja
značaja R=2 i R=3 null-move tehnike, nastavljeni su testovi nad nešto širim skupom EPD
pozicija. Za dalja testiranja korišćeni su testovi (yazgac.epd 33 pozicije, bk.epd 24 pozicije,
bt2450 30 pozicija, bt2630 30 pozicija) sa standardnim vremenom od 15 sec. Ova grupa
testova predstavlja složeniji skup taktičkih i strateško-taktičkih pozicija. Rezultati u ovoj
grupi testova (Tabela 8.3) pokazuju dominaciju R=2 tehnike.
Tabela 8.3 Uticaj pojedinih tehnika redukcije na broj rešenih pozicija kod nekih EPD
testova.
ALFA-BETA + transpozicione
tabele
ALFA-BETA + R=2 null-move
+ transpozicione tabele
ALFA-BETA + R=3 null-move
+ transpozicione tabele
yazgac.epd
(33)
23
bk.epd
(24)
14
bt2450.epd
(30)
22
Bt2630.epd
(30)
16
28
16
22
16
25
16
21
15
Rezultati su prikazani i na sledećem grafikonu (Slika 8.4):
170
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
EPD testiranje
Broj resenih pozicija
30
25
20
Alfa/Beta
null-move R=2
15
null-move R=3
10
5
0
1
2
3
4
Test
Slika 8.4 Rezultati EPD testiranja.
Prosečna dubina koja je postignuta na testiranju prikazana je u sledećoj tabeli (Tabela 8.4):
Tabela 8.4 Uticaj pojedinih tehnika redukcije na prosečnu dubinu proračuna
kod nekih EPD testova.
ALFA-BETA + transpozicione
tabele
ALFA-BETA + R=2 null-move
+ transpozicione tabele
ALFA-BETA + R=3 null-move
+ transpozicione tabele
yazgac.epd
(33)
8.24
bk.epd
(24)
8
bt2450.epd
(30)
9.13
Bt2630.epd
(30)
9.37
10.21
9.875
11.07
11.2
10.64
10.17
11.3
11.5
Bez obzira na najveću prosečnu dubinu koju je postigao R=3 null-move algoritam,
najbolje rezultate za ovu grupu testiranja je postigao algoritam sa R=2 faktorom redukcije.
Istraživanje na najtežem quick.epd skupu od 24 pozicije na 60 sec. Za oba faktora
redukcije R=2 i R=3 daje potpuno isti broj rešenja, 11.
Ovi rezultati potvrđuju da je za taktičke pozicije sa kraćom vremenskom kontrolom
pogodno iskoristiti R=3 faktor redukcije, dok je za složenije pozicije koje imaju strateški
karakter pogodnije iskoristiti R=2. Kao baza za dalja istraživanja, generisani su rezultati na
svim EPD skupovima testova korišćenjem R=2 tehnike. Ukupno provođene svih testova je
trajalo oko 3 sata i 34 min. Rezultati prikazana na tabeli 8.5 predstavljaju ključne podatke na
osnovu kojih se mogu ispitivati i komparirati nove tehnike koje se ugrađuju u program.
171
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Tabela 8.5 Tabela prikazuje ukupne EPD rezultate dobijene testiranjem standardne verzije
programa Axon.
Test
vac.epd
yazgac.epd
bk.epd
bt2450.epd
bt2630.epd
CCC-4.epd
kaufman.epd
kaufman2.epd
lct2.epd
mats.epd
quick.epd
Vremensko
ograničenje (sec)
2
15
30
45
45
60
60
60
60
45
60
Broj rešenih
pozicija
266
25
17
25
19
0
18
8
14
9
11
Broj ukupnih
pozicija u testu
300
33
24
30
30
4
25
25
35
24
26
Procenat uspešnog
rešavanja testova
87 %
76 %
71 %
83 %
63 %
0%
72 %
32 %
40 %
38 %
42 %
Bez obzira na brojna istraživanja i aplikacije obe varijante, konačni zaključci u pogledu
izbora između ove dve tehnike nisi utvrđeni.
8.2 Automatski mečevi protiv drugih kompjutera
Korišćenjem standardnih grafičkih okruženja koji podržavaju UCI protokol moguće je
organizovati automatske mečeve između eksperimentalne verzije programa i nekih
standardnih profesionalnih ili amaterskih programa. Celokupana organizacija mečeva je
potpuno automatska od strane grafičkog okruženja. Na ovaj način, obezbeđuju se potpuno isti
uslovi za oba učesnika u meču tako da su rezultati, naročito ako je odigran veliki broj partija
veoma merodavni. Imajući u vidu sve prednosti koje imaju automatski mečevi za analizu
kompletnog programa, ovaj vid testiranja je u modernim ciklusima razvoja šahovskog
programa postao veoma popularan. Za evaluaciju mečeva razvijeni su paketi u vidu plug-in
programa koji na osnovu PGN generisane datoteke određuju ELO snagu programa. Primer
generisanja ovih automatskih izveštaja prikazan je na sledećim listinzima :
Program
1 Achilles
2 Fruit_21
Program
1 Achilles
2 Shredder 9 UCI
Program
1 Achilles
2 Aristarch 4.50
Elo
: 2560
: 2240
Elo
: 2459
: 2341
Elo
: 2463
: 2337
+
-
111 169
169 111
+
-
93 104
104 93
+
-
120 131
131 120
Games
22
22
Games
40
40
Score
86.4 %
13.6 %
Score
66.2 %
33.8 %
Av.Op.
2240
2560
Av.Op.
2341
2459
Draws
27.3 %
27.3 %
Draws
27.5 %
27.5 %
Games
Score
Av.Op.
Draws
26
26
67.3 %
32.7 %
2337
2463
26.9 %
26.9 %
Primer merenja uticaja neke tehnike na ukupne performanse programa prikazaćemo na
primeru upotrebe metode za mašinsko učenje korišćenjem generatora sintetičke baze podataka
172
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
po algoritmu prikazanom u ranijim poglavljima. Najpre je proveden meč sa standardnom
bazom otvaranja. Listing koji prikazuje ELO rejting je automatski generisan u Areni :
Program
1 Achilles
2 The King 3.33
Elo
: 2454
: 2346
+
-
Games
Score
Av.Op.
Draws
81
59
59
81
53
53
65.1 %
34.9 %
2346
2454
50.9 %
50.9 %
Polazeći od PGN baze partija koje su generisane, korišćenjem OPENX generatora izvršena je
automatska sinteza baze otvaranja koja je upotrebljena za igru protiv istog protivnika. Posle
novog meča rezultati su sledeći :
Program
1 Achilles
2 The King 3.33
Elo
: 2488
: 2312
+
-
80 110
110 80
Games
45
45
Score
73.3 %
26.7 %
Av.Op.
Draws
2312
2488
26.7 %
26.7 %
Procenat uspešnosti je sa 65.1% pobeda povećan na 73.3% uz značajno smanjivanje procenta
remija sa 50.9% na 26.7%. Povećanje rejtinga primenom mašinskog učenja transpozicione
baze otvaranja iznosi : sa +108 poena na +176 poena, dakle +68 ELO poena. Na taj način je
dokazana prednost nove metode sa značajnom statističkom sigurnošću.
8.3 Mečevi protiv šahovskih majstora
Mečevi i turniri na kojima program pod ravnopravnim uslovima igra protiv jakih šahovskih
majstora predstavlja jedno od najznačajnijih metoda testiranja za šahovski program. Na žalost,
događaji ovog tipa su retki, tako da se ova metoda ne može smatrati standardnom metodom
testiranja.
Do sada je program Axon odigrao veliki broj turnira i mečeva, čiji su detalji prikazani u
poglavlju o evalucaiji sistema i postigao veoma zapažene rezultate. Partije su se igrale
većinom po ubrzanom tempu 15 min po igraču. Program je postigao brojne pobede protiv
šahovskih majstora sa FIDE rejtingom. Naročito treba izdvojiti nekoliko pobeda protiv
internacionalnih majstora, od kojih je najjači suparnik, koga je program pobedio, imao rejting
od 2440 ELO poena
Od dosadašnjih partija odigranih na turnirima teško je izvojiti partiju za koju bi se moglo
tvrditi da predstavlja najbolje ostvarenje kompjutera. Međutim, prema mišljenju autora i nekih
eksperata jedna od najlepše odigranih partija sa izrazito strateškim elementima i motivima
bila je pobeda nad internacionalnim majstorom na turniru 2003. Kompjuter je vodio crne
figure. Njen listing prikazan je u nastavku :
173
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
[Site "Nis"]
[Date "08. 02. 03 13:41:05"]
[Round " 15 min per game"]
[White "IM Perunovic Miodrag 2402"]
[Black " Geniss Axon XP , v050., 8. February 2003.
[Result "0:1"]
[ECO
"A05 Reti opening "]
[PlyCount
"78"]
"]
1. Ng1-f3 Ng8-f6 2. d4 d5 3. Bc1-g5 Nb8-c6 4. e3 h6 5. Bg5-h4
g5 6. Bh4-g3 Nf6-e4 7. Bg3-e5 f6 8. Be5-g3 e5 9. d:e5 Ne4:g3
10. h:g3 f:e5 11. Bf1-e2 Bc8-e6 12. Nb1-d2 Bf8-g7 13. c3 Qd8-d6
14. Qd1-c2 O-O-O 15. O-O-O Rh8-f8 16. Rh1-f1 Be6-f5 17. e4 Bf5-h7
18. Be2-d3 Qd6-g6 19. Nf3-e1 d4 20. c4 g4 21. Qc2-a4 Rd8-d6 22. Bd3-e2
Rd6-f6 23. Ne1-d3 h5 24. Kb1 Bg7-h6 25. f3 g:f3 26. Be2:f3 Qg6:g3
27. Nd3-c5 h4 28. Qa4-b5 b6 29. Qb5-a6+ Kd8 30. Nc5-b7+ Kd7 31. Rf1-h1
Bh6:d2 32. Rd1:d2 Rf6:f3 33. g:f3 Rf8:f3 34. Rh1-d1 h3 35. Qa6-b5
Bh7:e4+ 36. Ka1 Rf3-e3 37. c5 h2 38. c:b6 a:b6 39. Qb5-c4 Qg3-e1
0:1
Tok partije je pokazao izuzetno strateško razumevanje pozicije od strane kompjutera. Svaki
potez koji je program odigrao bio je u skladu sa složenim strateškim načelima i inicijativom
koju je program inicirao još od prvih poteza. Posle 26. poteza nastala je pozicija u kojoj crni
ima idealan napadački raspored svih figura i strateški potpuno dobijenu poziciju (Slika 8.5).
Slika 8.5 Pozicija nastala posle 26. poteza. Crni (Axon) ima strateški dobijenu poziciju.
Ova partija je pokazala da šahovski program u realnim okolnostima može da odigra partiju
strateškog tipa protiv najjačih šahista čime se demistifikuje ustaljeno mišljenje da su
kompjuteri u prednosti jedino u čisto taktičkim pozicijama.
174
10
_____________________________________
ZAKLJUČAK
Teorija igara je naučna oblast čije su osnove izložene u radovima velikih matetatičara Pascala i Fermat-a. Ova teorija se razvila u generalnu teoriju koja obuhvata tretiranje ne samo
logičkih igara već i brojnih problema koji su u vezi sa ekonomskim, vojnim i sociološkim
primenama. Teorija igara i njen osnovni minimaks princip pružaju osnovu za razvoj teorije
logičkih igara, odnosno za koncipiranje algoritama i programa koji mogu inteligentno igrati
neku klasičnu logičku igru. Šah, kao jedna od igara po svojoj definiciji može se tretirati
teoretskim i praktičnim principima i metodama koje su iz oblasti teorije igara. Kako se na
kompjuterski šah primenjuju i metode veštačke inteligencije, kroz ovu oblast postignuta je
integracija ove dve oblasti nauke, koja predstavlja osnovu na kojoj je baziran rad autora u
oblasti kompjuterskog šaha.
Teza se sastoji od 10 poglavlja, koja su podeljena na dve velike logičke celine. U uvodnim
poglavljima razmatrane su osnovne teoretske postavke iz teorije igara i veštačke inteligencije.
U nastavku rada prikazane su metode za rad sa bazama podataka koje svoju primenu nalaze u
fazi otvaranja i završnice u šahovskoj partiji. U šestom poglavlju koje se odnosi na strukturu
šahovskog programa razmatrane su sve teoretske tehnike i algoritmi koji su poznati na
sadašnjem nivou znanja u ovoj oblasti. Takođe, na osnovu konkretnih istraživanja, kao
rezultat je prikazan optimalni plan za razvoj šahovskog programa koji na standardnoj PC
platformi prevazilazi snagu šahovskog majstora. Koncipiranje optimalnog plana je značajan
teoretski rezultat jer pruža konkretne osnove za razvoj šahovskog programa majstorske snage.
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Ukratko, osnovni elementi optimalnog šahovskog programa su:
Koristi se minimaks algoritam grube snage (brute-force).
Prvi nivo nadogradnje je PVS verzija ALFA-BETA algoritma.
Drugi nivo je korišćenje R=3 null-move algoritma. U pozicijama sa malim brojem
figura i završnicama potrebno je redukovati faktor R na 2, ili verifikovati liniju bez
korišćenja null-move heuristike.
Koristiti se transpoziciona tabela i history heuristika.
Generatorsku funkciju je potrebno napisati što je moguće optimalnije. Redosled
poteza u njoj određuju hash tabele (tačka 4) a ne heuristike. Generator kvazileganih
poteza je bolja solucija u poređenju sa generatorom legalnih poteza.
Eksperstko znanje se ugrađuje jedino na nivou evaluacione funkcije Potrebno je
predvideti korišćenje ubrzane evaluacije kod slučajeva kada je statičkim metodama
nemoguće prevazići ALFA granicu.
Neophodno je ugraditi kvalitetnu i brzu quiescence funkciju. Na ovom nivou je
potrebno koristiti SEE heurističku tehniku. Najčešće je dovoljno koristiti samo
heuristiku razmene figura (capture) premda neki autori daju prednost i drugim
vidovima heuristika, pre svega šahovima i promocijama.
Poboljšanje dubine u pojedinim interesantnim linijama postiže se korišćenjem
heurističkih pravila ekstenzije.
Za generisanje transpozicionih pozicionih ključeva i realizaciju detekcije ponavljanja
pozicije koristi se Zobrist metoda sa 64-bitnim ključevima.
Potrebno je koristiti transpozicione tabele otvaranja i Nalimov bazu završnica.
U delu o novim pravcima i naprednim tehnikama, koje su rezultat samostalnih istraživanja
autora u ovoj oblasti, razmatran je širok spektar novih tehnika koje su implementirane i
eksperimentalno potvrđene u najnovijim verzijama autorovog programa. Ključne napredne
tehnike, koje su razvijene i analizirane u tezi su:
Princip detekcije ponavljanja pozicije korišćenjem varijantnih nizova,
Princip nulte evaluacione funkcije u aplikacijama za rešavanje matova,
Algoritam za adaptivnu kontrolu dubine (A.D.C.),
Metoda za distribuiranu paralelizaciju šahovskih algoritama korišćenjem lokalne
mreže,
Princip individualizacije figura i integracije generatora poteza i evaluatora,
Definicija transpozicione baza otvaranja sa mogućnošću mašinskog učenja,
ENAX baze završnica.
Na polju praktičnih aplikacija, oslanjajući se na napredne algoritme i nove tehnike čija je
teorija apostrofirana, autor je realizovao programski šahovski sistem Axon, čija najjača
verzija, koristeći jednoprocesorski sistem, igra na nivou internacionalnog majstora u šahu.
Distribuirana paralelna verzija Achilles, koja je testirana na 8 procesora, po ELO snazi dostiže
nivo velemajstora. Sistem Achilles ima mogućnost za automatsku konekciju i testiranje protiv
najboljih svetskih šahovskih mašina na ChessBase serveru. Realizacija sistema i korišćeni
hardver i softver su izuzetno složeni, tako da se može reći da objektivno sistem pripada
samom tehnološkom vrhu u ovoj oblasti.
176
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Budući razvoj sistema će se kretati u dva pravca.
Na nivou jednoprocesorskog sistema, planira se razvoj sledeće 64-bitne verzije programa
Axon III koja će iskoristiti sve prednosti najmodernijih 64-bitnih procesora i operativnih
sistema. Dosta prostora ima na nivou evaluacione funkcije gde se očekuje impementacija
znatno većeg nivoa eksperskog znanja.
Na nivou višeprocesorskih sistema, Achilles će se razvijati u pravcu povećanja broja
procesora do nivoa od 16 procesora, što će zahtevati poboljšanje postojećih distribucionih i
sinhronizacionih tehnika. Sa povećanjem snage osnovnih mašina prelaskom na nove verzija
64-bitnog Axon-a pod Windows-om 64 i sa povećavanjem brzine upotrebom boljih procesora,
sa sadašnjih 1.8Ghz do 2.6Ghz, po proračunu autora, snaga mašine će generalno prevazići
nivo od 2900 ELO poena, a u testovima protiv konkretnih programa i 3000 ELO rejting
poena. Imajući u vidu da je najveći deo posla oko softvera već urađen, problem se svodi na
hardverski deo, koje je znatno lakše rešiti, tako da se autor nada da će u bliskoj budućnosti
doći do realizacije novih, još jačih verzija paralelnog šahovskog sistema Achilles.
177
_____________________________________
LITERATURA
[Adelson-Velskiy, 1988] Adelson-Velskiy, G.M, Arlazarov, V.L. and Donskoy, M.V. Algorithms for
Games. Springer-Verlag, New York, NY. ISBN 3-540-96629-3, 1988.
[Adelson-Velskiy, 1975] Adelson-Velskiy, M, Arlazarov, V.L, and Donskoy, M.V. Some Methods of
Controlling the Tree Search in Chess Programs. Artificial Ingelligence, Vol. 6, No. 4, pp. 361-371.
ISSN 0004-3702, 1975.
[Akl, 1977] Akl, S.G. and Newborn, M.M. The Principal Continuation and the Killer Heuristic. 1977
ACM Annual Conference Proceedings, pp. 466-473. ACM, Seattle, WA, 1977.
[Allis, 1992] Allis, L.V. Ingo Althöfer: On Pathology in Game Tree and Other Recursion Tree
Models. ICCA Journal, Vol. 15, No. 2, p. 80. ISSN 0920-234X, 1992.
[Althöfer, 1989] Althöfer, I. An Incremental Negamax Algorithm. Advances in Computer Chess 5 (ed
D.F. Beal), pp. 31-41. Elsevier, Amsterdam. ISBN 0-444-87159-4, 1989.
[Althöfer, 1991a] Althöfer, I. An Additive Evaluation Function in Chess. ICCA Journal, Vol. 14, No.
3, pp. 137-141. ISSN 0920-234X, 1991.
[Althöfer, 1991b] Althöfer, I. Sören W. Perrey: Mathematische Methoden der Künstlichen
Intelligenz: zur Quiescence-Suche in Spielbäumen. ICCA Journal, Vol. 14, No. 2, p. 84. ISSN 0920234X, 1991.
[Althöfer, 1993a] Althöfer, I. A Parallel Game Tree Search Algorithm with a Linear Speedup.
Journal of Algorithms, Vol. 15, pp. 175-198, 1993.
[Althöfer, 1993b] Althöfer, I. On Telescoping Linear Evaluation Functions. ICCA Journal, Vol. 16,
No. 2, pp. 91-94. ISSN 0920-234X, 1993.
[Althöfer, 1993c] Althöfer, I. Rainer Feldmann: Game Tree Search with Massively Parallel Systems.
ICCA Journal, Vol. 16, No. 3, pp. 147-148. ISSN 0920-234X, 1993.
[Althöfer, 1995] Althöfer, I. M. Buro: Techniques for the Evaluation of Game Positions Using
Examples. ICCA Journal, Vol. 18, No. 1, p. 34. ISSN 0920-234X, 1995.
[Anantharaman, 1997] Anantharaman, T.S. Evaluation Tuning for Computer Chess: Linear
Discriminant Methods. ICCA Journal, Vol. 20, No. 4, pp. 224-242. ISSN 0920-234X, 1997.
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
[Bal, 1986] Bal, H.E, and Renesse, R. van A summary of parallel alpha-BETA search results. ICCA
Journal, Vol. 9, No. 3, pp. 146-149. ISSN 0920-234X, 1986.
[Ballard, 1983] Ballard, B.W. The *-Minimaks Search Procedure for Trees Containing Chance
Nodes. Artificial Intelligence, Vol. 21, pp. 327-350, 1983.
[Barth, 1995a] Barth, W. Combining Knowledge and Search to Yield Infallible Endgame Programs.
A Study of Passed Pawns in the KPKP Endgame. ICCA Journal, Vol. 18, No. 3, pp. 149-159. ISSN
0920-234X, 1995.
[Barth, 1995b] Barth, W. The KPKP Endgame: An Amplification. ICCA Journal, Vol. 18, No. 4, pp.
225-226. ISSN 0920-234X, 1995.
[Barth, 1992] Barth, W. and Barth, S. Validating a Range of Endgame Programs. ICCA Journal, Vol.
15, No. 3, pp. 132-139. ISSN 0920-234X, 1992.
[Baudet, 1978] Baudet, G.M. On the Branching Factor of the Alpha-BETA Pruning Algorithm.
Artificial Intelligence, Vol. 10, pp. 173-199, 1978.
[Baum, 1992] Baum, E.B. On optimal game tree propagation for imperfect players. Proceedings of the
11th National Conference on Artificial Intelligence (AAAI-92), pp. 507-512. AAAI Press, Menlo Park,
CA , 1992.
[Baxter, 1998a] Baxter, J, Tridgell, A, and Weaver, L. Experiments in Parameter Learning using
Temporal Differences. ICCA Journal, Vol. 21, No. 2, pp. 84-99, 1998.
[Baxter, 1998b] Baxter, J, Tridgell, A, and Weaver, L. Experiments in Parameter Learning using
Temporal Differences. ICCA Journal, Vol. 21, No. 2, pp. 84-99, 1998.
[Beal, 1984a] Beal, D.F. Mating Sequences in the Quiescence Search. ICCA Journal, Vol. 7, No. 3,
pp. 133-137. ISSN 0920-234X, 1984.
[Beal, 1984b] Beal, D.F. Mixing Heuristic and Perfect Evaluations: Nested Minimaks. ICCA Journal,
Vol. 7, No. 1, pp. 10-15. ISSN 0920-234X, 1984.
[Beal, 1989] Beal, D.F. Experiments with the Null Move. Advances in Computer Chess 5 (ed. D.F.
Beal), pp. 65-79, Elsevier Science Publishers, Amsterdam, The Netherlands. ISBN 0-444-87159-4,
1989.
[Beal, 1990] Beal, D.F. A Generalized Quiescence Search Algorithm. Artificial Intelligence, Vol. 43,
No. 1, pp. 85-98. ISSN 0004-3702, 1990.
[Beal, 1996a] Beal, D.F. and Smith, M.C. Multiple Probes of Transposition Tables. ICCA Journal,
Vol. 19, No. 4, pp. 227-233. ISSN 0920-234X, 1996.
[Beal, 1996b] Beal, D.F. and Smith, M.C. Multiple Probes of Transposition Tables. ICCA Journal,
Vol. 19, No. 4, pp. 227-233. ISSN 0920-234X, 1996.
[Beal, 1999] Beal, D.F. and Smith, M.C. Learning Piece-Square Values using Temporal Differences.
ICCA Journal, Vol. 22, No. 4, pp. 223-235, 1999.
[Beasley, 1989] Beasley, J.D. The Mathematics of Games, esp. Ch. 5. O.U.P, Oxford. ISBN 0-19286107-7, 1989.
[Bell, 1972] Bell, A.G. Games Playing with Computers. Allen and Unwin, London, 1972.
[Berlekamp, 1996] Berlekamp, E. The Economist’s View of Combinatorial Games. Games of No
Chance: Combinatorial Games at MSRI (ed. R.J. Nowakowski), pp. 365-405. Cambridge University
Press, Cambridge, MA, 1996.
[Berliner, 1974] Berliner, H. A comment on improvement of chess-playing programs. SIGART
Newsletter, 1974.
[Berliner, 1979] Berliner, H.J. The B*-Tree Search Algorithm - A Best-First Proof Procedure. Artificial
Intelligence, Vol. 12, No. 1, pp. 23-40. ISSN 0004-3702, 1979.
[Berliner, 1996] Berliner, H.J. and McConnell, C. B* probability based search. Artificial Intelligence,
Vol. 86, No. 1 pp. 97-156. ISSN 0004-3702, 1996.
[Bhattacharya, 1986] Bhattacharya, S. and Bagchi, A. Making Best Use of Available Memory when
Searching Game Trees. Proceedings of the 5th International Conference on Artificial Intelligence (AAAI86), pp. 163-167. AAAI/MIT Press, Boston, MA, 1986.
[Birmingham, 1977] Birmingham, J.A. and Kent, P. Tree-Searching and Tree-Pruning Techniques.
Advances in Computer Chess 1 (ed. M.R.B. Clarke), pp. 89-97. Edinburgh University Press,
Edinburgh. Reprinted (1988) in Computer Chess Compendium (ed. D.N.L. Levy), pp. 123-128. B.T.
Batsford, London. ISBN 0-85224-292-1, 1977.
179
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
[Björnsson, 2000] Björnsson, Y. and Marsland, T.A. Selective Depth-First Search Methods. Games in
AI Research (eds. H.J. van den Herik and H. IIda), pp. 31-45. Universiteit Maastricht, Maastricht, The
Netherlands. ISBN 90-621-6416-1, 2000.
[Bratko, 1978] Bratko, I, Kopec, D, and Michie, D. Pattern-Based Representation of Chess Endgame
Knowledge. The Computer Journal, Vol. 23, No. 4, pp. 353-359, 1978.
[Breuker, 1994] Breuker, D.M, Uiterwijk, J.W.H.M. and Herik, H.J. van den Replacement Schemes
for Transposition Tables. ICCA Journal, Vol. 17, No. 4, pp. 183-193. ISSN 0920-234X, 1994.
[Brockington, 1997] Brockington, M. and Schaeffer, J. APHID Game-Tree Search. Advances in
Computer Chess 8 (eds. H.J. van den Herik and J.W.H.M. Uiterwijk), pp. 69-91. Universiteit
Maastricht, Maastricht, The Netherlands. ISBN 90-6216-2347, 1997.
[Brockington, 2000] Brockington, M. and Schaeffer, J. APHID: Asynchronous Parallel Game-tree
Search. Journal of Parallel and Distributed Computing, Vol. 60, pp. 247-273, 2000.
[Bruin, 1994] Bruin, A. de, Pijls, W. and Plaat, A. Solution Trees as a Basis for Game-Tree Search.
ICCA Journal, Vol. 17, No. 4, pp. 207-219. ISSN 0920-234X, 1994.
[Buro, 1995] Buro, M. Statistical Feature Combination for the Evaluation of Game Positions. Journal
of Artificial Intelligence Research, Vol. 3, pp. 373-382. ISSN 0004-3702, 1995.
[Buro, 1999] Buro, M. Toward Opening Book Learning. ICCA Journal, Vol. 22, No. 2, pp. 98-102.
ISSN 0920-234X, 1999.
[Buro, 2000] Buro, M. Toward Opening Book Learning. Games in AI Research (eds. H.J. van den
Herik and H. IIda), pp. 47-54. Universiteit Maastricht, Maastricht, The Netherlands. ISBN 90-6216416-1, 2000.
[Campbell, 1983] Campbell, M.S. and Marsland, T.A. A Comparison of Minimaks Tree Search
Algorithms. Artificial Intelligence, Vol. 20, No. 4, pp. 347-367. ISSN 0004-3702, 1983.
[Chen, 2001] Chen, K. A study of decision error in selective game tree search, Information Sciences,
Vol. 135, No.3-4, pp. 177-186. ISSN 0020-0255, 2001.
[Christensen, 1986] Christensen, J. and Korf, R. A Unified Theory of Heuristic Evaluation Functions
and its Application to Learning. Proc. AAAI-86, 1986.
[Coplan, 1998] Coplan, K.P. Synthesis of Chess and Chess-like Endgames by Recursive
Optimisation. ICCA Journal, Vol. 21, No. 3, pp. 169-182, 1998.
[Cracraft, 1984] Cracraft, S.M. Bitmap Move Generation in Chess. ICCA Journal, Vol. 7, No. 3, pp.
146-153. ISSN 0920-234X, 1984.
[Donninger, 1993] Donninger, Chr. Null Move and Deep Search: Selective-Search Heuristics for
Obtuse Chess Programs. ICCA Journal, Vol. 16, No. 3, pp. 137-143. ISSN 0920-234X, 1993.
[Edwards, 1994] Edwards, S.J. Endgame Databases of Optimal Play to Mate,
ftp://chess.onenet.net/pub/chess/TB/ KPK.tbs/tbb/tbw, 1994.
[Edwards, 1996] Edwards, S.J. An Examination of the Endgame KBBKN. ICCA Journal, Vol. 19,
No. 1, pp. 24-32. ISSN 0920-234X, 1996.
[Feldmann, 1989] Feldmann, R, Mysliwietz, P, Monien, B, and Vornberger, O. Distributed
Game-Tree Search. ICCA Journal, Vol. 12, No. 2, pp. 65-73. ISSN 0920-234X, 1989.
[Feldmann, 1991] Feldmann, R, Mysliwietz, P. and Monien, B. A Fully Distributed Chess Program.
Advances in Computer Chess 6 (ed. D.F. Beal), pp. 1-27. Ellis Horwood Ltd, Chichester, England.
ISBN 0-13-006537-4, 1991.
[Feldmann, 1992] Feldmann, R, Mysliwietz, P, and Monien, B. Distributed Game Tree Search on a
Massively Parallel System. Lecture Notes in Computer Science, No. 594, pp. 270-288,
Springer-Verlag, Heidelberg, 1992.
[Ferguson, 1998] Ferguson, C. and Korf, R.E. Distributed Tree Search and its Application to AlphaBETA Pruning. Proceedings of AAAI-88, Vol. I, pp. 128-132. Saint Paul, MN, 1988.
[Finkel, 1982] Finkel, R. and Fishburn, J. Parallelism in Alpha-BETA Search, Artificial Intelligence
89-106, 1982.
[Fray, 1977] Fray, P.W. An introduction to Computer Chess. Chess Skill in Man and Machine, Texts
and monographs in computer science, Springer-Verlag, New York, N.Y, 1977.
[Fray, 1985] Frey, P.W. An Empirical Technique for Developing Evaluation Functions. ICCA
Journal, Vol. 8, No. 1, pp. 17-22. ISSN 0920-234X, 1985.
[Fudenberg, 1995] Fudenberg, D. and Tirole, J. Game Theory. MIT Press, Boston, MA, 1995.
180
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
[Goetsch, 1988] Goetsch, G. and Campbell, M.S. Experimenting with the Null Move Heuristic in
Chess. AAAI Spring Symposium Proceedings, pp. 14-18, 1988.
[Goetsch, 1990] Goetsch, G. and Campbell, M.S. Experiments with the Null-move Heuristic.
Computers, Chess, and Cognition (eds. T.A. Marsland and J. Schaeffer), pp. 159-168, SpringerVerlag, New York, N.Y. ISBN 0-387-97415-6 / 3-540-97415-6, 1990.
[Gosling, 1992] Gosling, B. Chess Computers and Endgame Studies. ICCA Journal, Vol. 15, No. 1,
pp. 19-23. ISSN 0920-234X, 1992.
[Haworth, 1998] Haworth, G.McC. and Velliste, M. Chess Endgames and Neural Networks. ICCA
Journal, Vol. 21, No. 4, pp. 211-227, 1998.
[Heijden, 2001] Heijden, H.M.J.F. van der Endgame Tables and Endgame Study Composition. ICGA
Journal, Vol. 24, No. 2, pp. 88-92. ISSN 1389-6911, 2001.
[Heinz, 1998] Heinz, E.A. Extended Futility Pruning. ICCA Journal, Vol. 21, No. 3, pp. 75-83. ISSN
0920-234X, 1998.
[Heinz, 1999a] Heinz, E.A. Adaptive Null-Move Pruning. ICCA Journal, Vol. 22, No. 3, pp. 123-132,
1999.
[Heinz, 1999b] Heinz, E.A. Endgame Databases and Efficient Index Schemes for Chess. ICCA
Journal, Vol. 22, No. 1, pp. 22-32, 1999.
[Heinz, 1999c] Heinz, E.A. Knowledgeable Encoding and Querying of Endgame Databases. ICCA
Journal, Vol. 22, No. 2, pp. 81-97, 1999.
[Horacek, 1982] Horacek, H. Construction of Planned Move Trees for Chess Pawn Endings. Sigart
Newsletter 80, pp. 163-168, 1982.
[Hünen, 1989] Hünen, R.W.G. Efficient Pattern Recognition in Large Game Trees. Advances in
Computer Chess 5 (ed. D.F. Beal), pp. 313-321. North Holland, Amsterdam. ISBN 0-444-87159-4,
1989.
[Hyatt, 1989] Hyatt, R. , Suter, B. , and Nelson, H. A Parallel Alpha/BETA Tree Searching
Algorithm, Parallel Computing 10 299-308, 1989.
[Hyatt, 1998] Hyatt, R.M. The Dynamic Tree-Splitting Parallel Search Algorithm, ICCA Journal,
Vol. 20, No. 1, pp. 3-19. ISSN 0920-234X, 1998.
[Hyatt, 1999a] Hyatt, R.M. Book Learning - a Methodology to Tune an Opening Book Automatically.
ICCA Journal, Vol. 22, No. 1, pp. 3-12, 1999.
[Hyatt, 1999b] Hyatt, R.M. Rotated Bitmaps, a New Twist on an Old Idea. ICCA Journal, Vol. 22,
No. 4, pp. 213-222, 1999.
[Jones, 1980] Jones, A.J. Game Theory: Mathematical Models of Conflict. Ellis Horwood, West
Sussex, 1980.
[Kaindl, 1982] Kaindl, H. Dynamic Control of the Quiescence Search in Computer Chess.
Cybernetics and Systems Research (ed. R. Trappl), pp. 973-977. North-Holland, Amsterdam, 1982.
[Kaindl, 1989] Kaindl, H. Towards a Theory of Knowledge. Advances in Computer Chess 5 (ed. D.F.
Beal), pp. 159-185. North Holland, Amsterdam. ISBN 0-444-87159-4, 1989.
[Kaindl, 1990] Kaindl, H. Tree Searching Algorithms. Computers, Chess and Cognition (eds. T.A.
Marsland and J. Schaeffer), pp. 133-158. Springer-Verlag, New York, NY. ISBN 0-387-97415-6,
1990.
[Ke, 1993] Ke, Y.-F. and Parng, T.-M. The Guard Heuristic: Legal Move Ordering with Forward
Game-Tree Pruning. ICCA Journal, Vol. 16, No. 2, pp. 76-85. ISSN 0920-234X, 1993.
[Klingbeil, 1988] Klingbeil, N. and Schaeffer, J. Search Strategies for Conspiracy Numbers.
Canadian Artificial Intelligence Conference, pp. 133-139, 1988.
[Knuth, 1975] Knuth, D. E. and Moore, R. W. An Analysis of Alpha-BETA Pruning. Artificial
Intelligence, Vol. 6, No. 4, pp. 293-326. ISSN 0004-3702, 1975.
[Korf, 1985] Korf, R. E. Depth-First Iterative Deepening: An Optimal Admissible Tree Search.
Artificial Intelligence, Vol. 27, No. 1, pp. 97-109. ISSN 0004-3702, 1985.
[Lee, 1988] Lee, K.-F. and Mahajan, S. A Pattern Classification Approach to Evaluation Function
Learning. Artificial Intelligence, Vol. 36, pp. 1-25. ISSN 0004-3702, 1988.
[Levy, 1987] Levy, D.N.L. Improving the Performance of Endgame Databases. ICCA Journal, Vol.
10, No. 4, pp. 191-192. ISSN 0920-234X, 1987.
181
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
[Lorenz, 1995] Lorenz, U, Rottmann, V, Feldmann, R, and Mysliwietz, P. Controlled Conspiracy
Number Search, ICCA Journal, Vol. 18, No. 3, pp. 135-147. ISSN 0920-234X, 1995.
[Marsland, 1982a] Marsland, T. and Campbell, M. Parallel Search of Strongly Ordered Game Trees,
ACM Computing Surveys (4) 533-551, 1982.
[Marsland, 1982b] Marsland, T.A. Relative Performance of the Alpha-BETA Algorithm. ICCA
Newsletter, Vol. 5, No. 2, pp. 21-24, 1982.
[Marsland, 1984] Marsland, T.A. M.A. Bramer (Editor): Computer Game-Playing: Theory and
Practice. ICCA Journal, Vol. 7, No. 2, p. 85. ISSN 0920-234X, 1984.
[Marsland, 1985a] Marsland, T. and Popowich, F. Parallel Game-tree Search, IEEE Transactions on
Pattern Analysis and Machine Intelligence, PAMI-7, 442-452, 1985.
[Marsland, 1985b] Marsland, T.A. Evaluation-Function Factors. ICCA Journal, Vol. 8, No. 2, pp.
47-57. ISSN 0920-234X, 1985.
[Marsland, 1986a] Marsland, T. , Olafsson, M. and Schaeffer, J. Multiprocessor Tree-Search
Experiments, Advances in Computer Chess 4, Pergammon Press 37-51, 1986.
[Marsland, 1986b] Marsland, T.A. A Review of Game-Tree Pruning. ICCA Journal, Vol. 9, No. 1,
pp. 3-19. ISSN 0920-234X, 1986.
[Marsland, 1990] Marsland, T. and Schaeffer, J. Computers, Chess and Cognition, Springer-Verlag,
1990.
[McAllester, 1988] McAllester, D.A. Conspiracy Numbers for Min-Max Search. Artificial
Intelligence, Vol. 35, No. 1, pp. 287-310. ISSN 0004-3702, 1988.
[Meulen, 1989] Meulen, M. van der Weight Assessment in Evaluation Functions. Advances in
Computer Chess 5 (ed. D.F. Beal), pp. 81-89. North-Holland, Amsterdam. ISBN 0 444 87159 4, 1989.
[Meulen, 1990a] Meulen, M. van der Conspiracy-Number Search. ICCA Journal, Vol. 13, No. 1, pp.
3-14. ISSN 0920-234X, 1990.
[Meulen, 1990b] Meulen, M. van der, Allis, L.V. and Herik, H.J. van den (1990). A Comment on
`Conspiracy-Number Search'. ICCA Journal, Vol. 13, No. 2, pp. 74-75. ISSN 0920-234X, 1990.
[Michie, 1981] Michie, D. A Theory of Evaluative Comments in Chess with a Note on Minimaksing.
The Computer Journal, Vol. 24, No. 3, pp. 278-286, 1981.
[Müller, 2001] Müller, M. Partial order bounding: A new approach to evaluate in game tree search,
Artificial Intelligence, Vol. 129, Nos. 1-2, pp. 279-311. ISSN 0004-3702, 2001.
[Muszycka, 1985] Muszycka, A. and Shinghal, R. An Empirical Comparison of Pruning Strategies in
Game Trees. IEEE Transactions, Vol. SMC-15, No. 3, pp. 389-399, 1985.
[Mysliwietz, 1997] Mysliwietz, P.A Metric for Evaluation Functions. Advances in Computer Chess 8
(eds. H.J. van den Herik and J.W.H.M. Uiterwijk), pp. 181-198. Universiteit Maastricht, Maastricht,
The Netherlands. ISBN 90-6216-2347, 1997.
[Nalimov, 1999] Nalimov, E.V, Wirth, C. and Haworth, G.McC. KQQKQQ and the Kasparov-World
Game. ICCA Journal, Vol. 22, No. 4, pp. 195-212. ISSN 0920-234X, 1999.
[Nalimov, 2000] Nalimov, E.V, Haworth, G.McC. and Heinz, E.A. Space-Efficient Indexing of Chess
Endgame Tables. ICGA Journal, Vol. 23, No. 3, pp. 148-162, 2000.
[Nalimov, 2001] Nalimov, E, Haworth, G.McC. and Heinz, E.A. Space-efficient Indexing of Endgame
Tables for Chess. Advances in Computer Games 9, (eds. H. J. van den Herik and B. Monien), pp. 93113. IKAT, Universiteit Maastricht, Maastricht, The Netherlands. ISBN 90 6216 5761 / 90 6216 5664,
2001.
[Nau, 1980] Nau, D.S. Pathology on Game Trees: A Summary of Results. Proceedings of the First
ACM National Conference on Artificial Intelligence, pp. 102-104. Stanford, CA, 1980.
[Neumann, 1944] Neumann, J. von and Morgenstern, O. Theory of Games and Economic Behavior.
Second Edition, 1947. Princeton University Press, Princeton, N.Y. ISBN 0-691-04183-0, 1944.
[Owen, 1982] Owen, G. Game Theory. Academic Press, New York. ISBN 0-12-531150-8, 1982.
[Palay, 1982] Palay, A.J. The B* Tree Search Algorithm - New Results. Artificial Intelligence, Vol.
19, No. 2, pp. 145-163, 1982.
[Pearl, 1980] Pearl, J. Asymptotic Properties of Minimaks Trees and Game-Searching Procedures.
Artificial Intelligence, Vol. 14, No. 2, pp. 113-138. ISSN 0004-3702, 1980.
[Petković, 1997] Petković, M. Mathematics and Chess, Dover Publications, Mineola, New York,
ISBN 0-486-29432-3, 1997.
182
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
[Plaat, 1997] Plaat, A. MDF(f) A Minmax Algorithm faster the NegaScout, Vrije Universiteit,
Mathematics
and
Computer
Science,
Amsterdam
The
Netherlands
http://theory.lcs.mit.edu/~plaat/mtdf.html , 1997.
[Plenkner, 1995] Plenkner, S. A Null-Move Technique Impervious to Zugzwang. ICCA Journal, Vol.
18, No. 2, pp. 82-84. ISSN 0920-234X, 1995.
[Reinefeld, 1983] Reinefeld, A. An Improvement to the Scout Tree-Search Algorithm. ICCA Journal,
Vol. 6, No. 4, pp. 4-14. ISSN 0920-234X, 1983.
[Reinefeld, 1994] Reinefeld, A. A Minimaks Algorithm Faster than Alpha-BETA. Advances in
Computer Chess 7 (eds. H.J. van den Herik, I.S. Herschberg and J.W.H.M. Uiterwijk), pp. 237-250.
University of Limburg, Maastricht, The Netherlands. ISBN 9-0621-6101-4, 1994.
[Rivest, 1988] Rivest, R.L. Game Tree Searching by Min/Max Approximation. Artificial Intelligence,
Vol. 34, No. 1, pp. 77-96. ISSN 0004-3702, 1988.
[Roizen, 1983] Roizen, I. and Pearl, J. A Minimaks Algorithm Better than Alpha-BETA? Yes and No.
Artificial Intelligence, Vol. 21, pp. 199-230. ISSN 0004-3702, 1983.
[Romein, 2002] Romein, J. W, Bal, H. E, Schaeffer, J, and Plaat, A. A Performance Analysis of
Transposition-Table-Driven Scheduling in Distributed Search. IEEE Transactions on Parallel and
Distributed Systems, Vol. 13, No. 5, pp. 447–459, 2002.
[Romein, 2002] Romein, J. W, Bal, H. E, Schaeffer, J, and Plaat, A. A Performance Analysis of
Transposition-Table-Driven Scheduling in Distributed Search. IEEE Transactions on Parallel and
Distributed Systems, Vol. 13, No. 5, pp. 447–459, 2002.
[Schaeffer, 1983] Schaeffer, J. The History Heuristic. ICCA Journal, Vol. 6, No. 3, pp. 16-19. ISSN
0920-234X, 1983.
[Schaeffer, 1989] Schaeffer, J. Conspiracy Numbers. Advances in Computer Chess 5 (ed. D.F. Beal),
pp. 199-217. Elsevier Science Publishers, Amsterdam, The Netherlands. ISBN 0-444-87159-4. Also
published (1990) in Artificial Intelligence, Vol. 43, No. 1, pp. 67-84. ISSN 0004-3702, 1989.
[Schaeffer, 1989] Schaeffer, J. The History Heuristic and Alpha-BETA Search Enhancements in
Practice. IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. 11, No. 11, pp. 1203–
1212. ISSN 0162-8828, 1989.
[Schaeffer, 1990] Schaeffer, J. Conspiracy Numbers. Artificial Intelligence, Vol. 43, No. 1, pp. 67-84.
ISSN 0004-3702, 1990.
[Schaeffer, 1996] Schaeffer, J. and Plaat, A. New Advances in Alpha-BETA Searching. Proceedings
of the 1996 ACM Computer Science Conference, pp. 124-130. ACM Press, New York, N.Y, 1996.
[Schaeffer, 2001] Schaeffer, J, Hlynka M, and Jussila, V. Temporal Difference Learning Applied to a
High-Performance Game-Playing Program. Proceedings International Joint Conference on Artificial
Intelligence, pp. 529-534, 2001.
[Schrüfer, 1989] Schrüfer, G. A Strategic Quiescence Search. ICCA Journal, Vol. 12, No. 1, pp. 3-9.
ISSN 0920-234X, 1989.
[Simon, 1992] Simon, H.A. and Schaeffer, J. The Game of Chess. Handbook of Game Theory with
Economic applications (eds. T. Aumann and K. Hart). North Holland, Amsterdam, The Netherlands.
ISSN 0169-7218, 1992.
[Slate, 1987] Slate, D.J. A Chess Program that uses its Transposition Table to Learn from Experience.
ICCA Journal, Vol. 10, No. 2, pp. 59-71. ISSN 0920-234X, 1987.
[Spracklen, 1983] Spracklen, K. Tutorial: Representation of an Opening Tree. ICCA Newsletter, Vol.
6, No. 1, pp. 6-8, 1983.
[Stockman, 1979] Stockman, G. C. A Minimaks Algorithm Better than Alpha-BETA? Artificial
Intelligence, Vol. 12, No. 2, pp. 179-196. ISSN 0004-3702, 1979.
[Tesauro, 1992] Tesauro, G. Practical Issues in Temporal Difference Learning. Machine Learning,
Vol. 8, pp. 257-277. ISSN 0885-6125, 1992.
[Thompson, 1986] Thompson, K. Retrograde Analysis of Certain Endgames. ICCA Journal, Vol. 9, No.
3, pp. 131-139. ISSN 0920-234X, 1986.
[Thompson, 1991] Thompson, K. Chess Endgames Vol. 1. ICCA Journal, Vol. 14, No. 1, p. 22. ISSN
0920-234X, 1991.
183
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
[Thompson, 1996] Thompson, K. 6-Piece Endgames. ICCA Journal, Vol. 19, No. 4, pp. 215-226.
ISSN 0920-234X, 1996.
[Tunstall-Pedoe, 1991] Tunstall-Pedoe, W. Genetic Algorithms Optimizing Evaluation Functions.
ICCA Journal, Vol. 14, No. 3, pp. 119-128. ISSN 0920-234X, 1991.
[Vučković, 2001a] Vučković, V. “Decision Trees and Search Strategies in Chess Problem Solving
Applications”, Proceedings of a Workshop on Computational Intelligence Theory and Applications,
Niš, 27. February 2001, pg. 141-159. (ISBN 86-80135-36-4), 2001.
[Vučković, 2001b] Vučković, V. “The Basic Elements of the Chess Program Implementation”,
Proceedings of a Workshop on Computational Intelligence Theory and Applications, Niš, 20-21. June
2001, pg. 17-23. (ISBN 86-80135-41-0), 2001.
[Vučković, 2002a] Vučković, V. “The Expert Knowlaedge Implementation Techniques in Geniss
Axon XP Chess Application”, Proceedings od papers of the 16th International Conference “Systems
for Automation of Engineering and Research” (SAER-2002) 20-22 September 2002 - St. Konstantin
(Varna), BULGARIA, pg. 217-221, 2002.
[Vučković, 2002b] Vučković, V. “The Efficiency of the ALFA-BETA Pruning Implementation in
Geniss Axon XP Chess Program”, Proceedings of the Workshop of the Computational Intelligence
and Information Technology of the XXXVII International Scientific Conference on Information,
Communication and Energy Systems and Technologies ICEST 2002, Niš, 1-4.10.2002, Volume 1, pg.
729-732. (ISBN 86-80135-69-0), 2002.
[Vučković, 2002c] Vučković, V. “The Significance of the Low-Level Heuristics in Chess Searching
Algorithms”, Proceedings of the Workshop of the Computational Intelligence and Information
Technology of the XXXVII International Scientific Conference on Information, Communication and
Energy Systems and Technologies ICEST 2002, Niš, 1-4.10.2002, Volume 1, pg. 733-736. (ISBN 8680135-69-0), 2002.
[Vučković, 2003a] Vučković, V. “Memory Based Recursive ALFA-BETA Searching Algorithm”,
Proceedings of the Workshop of the Computational Intelligence and Information Technology, Niš,
13.10.2003, pg. 27-30. (ISBN 86-80135-78-X), 2003.
[Vučković, 2003b] Vučković, V. “The Realization of the Advanced Hash System in Geniss Axon XP
Chess Application”, Proceedings of the VI International Conference on Telecommunications in
Modern Satellite, Cable and Broadcasting Services TELSIKS 2003, Niš, 1-3. October 2003, Volume 2,
pg. 815-818. (ISBN 86-80135-77-1), 2003.
[Vučković, 2004a] Vučković, V. "Realization of the Chess Mate Solver Application", Yugoslav
Journal of Operations Research (YUJOR), Volume 14, Number 2, pg. 273- 288. Belgrade, ISSN
0354-0243, 2004.
[Vučković, 2004b] Vučković, V. “Optimalno rešenje problema ponavljanja pozicija u stablu
odlučivanja metodom varijantnih nizova”, Zbornik radova sa XXXI Simpozijuma o operacionim
istraživanjima SYM-OP-IS 2004, Iriški Venac, 14-16.9.2004, pg. 209-212. (ISBN 86-7352-123-8),
2004.
[Vučković, 2005a] Vučković, V. “The Realization of the Distributed Computer Chess System”,
Proceedings of the Workshop of the Computational Intelligence and Information Technology of the XL
International Scientific Conference on Information, Communication and Energy Systems and
Technologies ICEST 2005, Niš, 29.6-1.7.2005, Volume 2, pg. 550-553. (ISBN 86-85195-26-8), 2005.
[Vučković, 2005b] Vučković, V. “The Parallelization of the ALFA-BETA Search Algorithm using
Two-Processor Distributed System”, Zbornik radova sa XXXII Simpozijuma o operacionim
istrazivanjima SYM-OP-IS 2005, Vrnjačka Banja, 27-30.9.2005, pg. 267-270. (ISBN 86-403-0685-0),
2005.
[Vučković, 2005c] Vučković, V. “The Realization of the Parallel Computer Chess Application”,
Proceedings of the VII International Conference on Telecommunications in Modern Satellite, Cable
and Broadcasting Services TELSIKS 2005, Niš, 28-30. September 2005, Volume 2, pg. 601-604.
(ISBN 86-80135-77-1), 2005.
[Wilkins, 1982] Wilkins, D.E. Using Knowledge to Control Tree Searching. Artificial Intelligence,
Vol. 18, No. 1, pp. 1-51. ISSN 0004-3702, 1982.
[Zobrist, 1990] Zobrist, A.L. A New Hashing Method with Applications for Game Playing. ICCA
Journal, Vol. 13, No. 2, pp. 69-73. ISSN 0920-234X, 1990.
184
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
DODACI
Prve tri pobede na ChessBase serveru koje se igrane na dan priključenja sistema
Achilles na server, 12.5.2006. Protivnički programi su koristili PC računar sa
AMD dualcore procesorom, 2x2.4Ghz.
[Event "Friendly Game, 7m + 3s"]
[Site "Engine Room"]
[Date "2006.05.12"]
[Round "?"]
[White "AlterEgo, Achilles 8x1.8Ghz"]
[Black "Mans, Zappa 1.1"]
[Result "1-0"]
[ECO "B51"]
[WhiteElo "2472"]
[BlackElo "2792"]
[Annotator "Vladan,Vuckovic"]
[PlyCount "215"]
[EventDate "2006.05.12"]
[TimeControl "420+3"]
1. e4 {[%emt 0:00:00]} c5 {[%emt 0:00:00]} 2. Nf3 {[%emt 0:00:00]} Nc6 {
[%emt 0:00:00]} 3. Bb5 {[%emt 0:00:00]} d6 {[%emt 0:00:00]} 4. O-O {
[%emt 0:00:00]} Bd7 {[%emt 0:00:00]} 5. Re1 {[%emt 0:00:00]} Nf6 {
[%emt 0:00:00]} 6. c3 {[%emt 0:00:00]} a6 {[%emt 0:00:00]} 7. Bf1 {
[%emt 0:00:00]} Bg4 {[%emt 0:00:00]} 8. d3 {[%emt 0:00:00]} e6 {[%emt 0:00:00]}
9. Nbd2 {[%emt 0:00:00]} Be7 {[%emt 0:00:00]} 10. h3 {[%emt 0:00:00]} Bh5 {
[%emt 0:00:00]} 11. g4 {[%emt 0:00:10]} Bg6 {[%eval 10,12] [%emt 0:00:00]} 12.
Nh4 {[%emt 0:00:09]} Nd7 {[%eval 10,12] [%emt 0:00:00]} 13. Nxg6 {
[%emt 0:00:09]} hxg6 {[%eval 10,12] [%emt 0:00:00]} 14. Nf3 {
[%eval 10,13] [%emt 0:00:09]} Nde5 {[%eval -8,12] [%emt 0:00:22]} 15. Nxe5 {
[%eval 10,14] [%emt 0:00:10]} dxe5 {[%eval -28,13] [%emt 0:00:16]} 16. Be3 {
[%eval 10,15] [%emt 0:00:08]} f6 {[%eval -31,12] [%emt 0:00:08]} 17. a3 {
[%eval 20,14] [%emt 0:00:14]} Kf7 {[%eval -25,13] [%emt 0:00:00]} 18. b4 {
[%eval 20,12] [%emt 0:00:14]} Qf8 {[%eval -13,12] [%emt 0:00:01]} 19. Qf3 {
[%eval 40,11] [%emt 0:00:08]} Rd8 {[%eval -35,13] [%emt 0:00:16]} 20. Ra2 {
[%eval 30,13] [%emt 0:00:13]} Bd6 {[%eval -35,13] [%emt 0:00:16]} 21. Rb2 {
[%eval 40,13] [%emt 0:00:13]} b5 {[%eval -33,13] [%emt 0:00:02]} 22. Bg2 {
[%eval 40,12] [%emt 0:00:13]} Be7 {[%eval -32,13] [%emt 0:00:11]} 23. Rd1 {
[%eval 30,12] [%emt 0:00:10]} Bd6 {[%eval -29,12] [%emt 0:00:11]} 24. Rc2 {
[%eval 30,15] [%emt 0:00:36]} Be7 {[%eval -26,12] [%emt 0:00:11]} 25. Ra2 {
[%eval 40,12] [%emt 0:00:11]} Rc8 {[%eval -28,12] [%emt 0:00:11]} 26. Re1 {
[%eval 30,12] [%emt 0:00:11]} Bd6 {[%eval -27,12] [%emt 0:00:11]} 27. Rb1 {
[%eval 40,12] [%emt 0:00:06]} Rd8 {[%eval -25,11] [%emt 0:00:10]} 28. Bf1 {
[%eval 40,12] [%emt 0:00:10]} Rb8 {[%eval -25,12] [%emt 0:00:10]} 29. Rab2 {
[%eval 40,11] [%emt 0:00:07]} Be7 {[%eval -25,12] [%emt 0:00:10]} 30. Be2 {
[%eval 50,12] [%emt 0:00:11]} Bd6 {[%eval -25,13] [%emt 0:00:10]} 31. Bd1 {
[%eval 60,13] [%emt 0:00:09]} Be7 {[%eval -19,11] [%emt 0:00:10]} 32. Bb3 {
[%eval 70,10] [%emt 0:00:05]} Rd8 {[%eval -11,12] [%emt 0:00:04]} 33. Bc2 {
[%eval 60,11] [%emt 0:00:06]} Rd7 {[%eval -31,11] [%emt 0:00:10]} 34. Rd1 {
[%eval 60,11] [%emt 0:00:09]} Rd8 {[%eval -27,11] [%emt 0:00:10]} 35. Kg2 {
[%eval 70,12] [%emt 0:00:09]} Bd6 {[%eval -17,11] [%emt 0:00:13]} 36. Bb3 {
[%eval 60,13] [%emt 0:00:09]} Qe7 {[%eval 4,11] [%emt 0:00:00]} 37. Ra2 {
[%eval 50,10] [%emt 0:00:05]} Rh7 {[%eval -27,11] [%emt 0:00:09]} 38. Raa1 {
[%eval 70,10] [%emt 0:00:08]} Rdh8 {[%eval -21,11] [%emt 0:00:09]} 39. Rh1 {
[%eval 60,11] [%emt 0:00:06]} Qf8 {[%eval -13,11] [%emt 0:00:02]} 40. Rh2 {
[%eval 70,11] [%emt 0:00:09]} Qc8 {[%eval -24,11] [%emt 0:00:09]} 41. Rc1 {
[%eval 70,11] [%emt 0:00:08]} cxb4 {[%eval -56,13] [%emt 0:00:09]} 42. axb4 {
[%eval 40,13] [%emt 0:00:04]} a5 {[%eval -48,13] [%emt 0:00:05]} 43. bxa5 {
185
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
[%eval 20,13] [%emt 0:00:04]} Nxa5 {[%eval -30,12] [%emt 0:00:04]} 44. Bd1 {
[%eval 30,13] [%emt 0:00:04]} Nb7 {[%eval -59,11] [%emt 0:00:09]} 45. Bg5 {
[%eval 40,11] [%emt 0:00:08]} Nc5 {[%eval -44,10] [%emt 0:00:10]} 46. Ra1 {
[%eval 30,13] [%emt 0:00:03]} Na4 {[%eval -69,11] [%emt 0:00:09]} 47. c4 {
[%eval 20,10] [%emt 0:00:05]} Nc3 {[%eval -60,12] [%emt 0:00:03]} 48. Bb3 {
[%eval 10,11] [%emt 0:00:04]} Bc5 {[%eval -69,12] [%emt 0:00:08]} 49. Rhh1 {
[%eval 10,13] [%emt 0:00:07]} Rd8 {[%eval -97,11] [%emt 0:00:08]} 50. h4 {
[%eval -10,13] [%emt 0:00:08]} b4 {[%eval -100,11] [%emt 0:00:08]} 51. h5 {
[%eval -10,13] [%emt 0:00:08]} gxh5 {[%eval -77,11] [%emt 0:00:00]} 52. gxh5 {
[%eval -20,11] [%emt 0:00:05]} Ke8 {[%eval -58,10] [%emt 0:00:05]} 53. Bd2 {
[%eval 0,11] [%emt 0:00:04]} Qb7 {[%eval -42,10] [%emt 0:00:04]} 54. Ra5 {
[%eval 0,11] [%emt 0:00:07]} Bb6 {[%eval -51,10] [%emt 0:00:08]} 55. Raa1 {
[%eval 0,14] [%emt 0:00:03]} Bc5 {[%eval -42,10] [%emt 0:00:04]} 56. Ra5 {
[%eval 0,12] [%emt 0:00:07]} Bb6 {[%eval -32,11] [%emt 0:00:01]} 57. Raa1 {
[%eval 0,11] [%emt 0:00:06]} Ke7 {[%eval -22,10] [%emt 0:00:01]} 58. c5 {
[%eval 10,11] [%emt 0:00:07]} Bxc5 {[%eval 7,11] [%emt 0:00:08]} 59. Bxe6 {
[%eval 40,12] [%emt 0:00:07]} Rhh8 {[%eval 19,10] [%emt 0:00:01]} 60. Qg4 {
[%eval 130,9] [%emt 0:00:05]} Qc6 {[%eval 152,11] [%emt 0:00:05]} 61. Bc4 {
[%eval 150,10] [%emt 0:00:03]} Rdg8 {[%eval 319,11] [%emt 0:00:08]} 62. h6 {
[%eval 230,12] [%emt 0:00:04]} Qc8 {[%eval 329,11] [%emt 0:00:08]} 63. Qxc8 {
[%eval 300,14] [%emt 0:00:03]} Rxc8 {[%eval 406,14] [%emt 0:00:04]} 64. hxg7 {
[%eval 350,13] [%emt 0:00:03]} Rhg8 {[%eval 478,13] [%emt 0:00:04]} 65. Rh7 {
[%eval 320,14] [%emt 0:00:03]} Bd4 {[%eval 559,13] [%emt 0:00:04]} 66. Bh6 {
[%eval 490,14] [%emt 0:00:07]} Nd5 {[%eval 658,13] [%emt 0:00:01]} 67. Ra4 {
[%eval 470,13] [%emt 0:00:06]} Nf4+ {[%eval 643,13] [%emt 0:00:01]} 68. Bxf4 {
[%eval 460,14] [%emt 0:00:04]} Rxc4 {[%eval 637,15] [%emt 0:00:04]} 69. Ra8 {
[%eval 490,16] [%emt 0:00:06]} Kf7 {[%eval 624,14] [%emt 0:00:01]} 70. Rf8+ {
[%eval 450,15] [%emt 0:00:04]} Kg6 {[%eval 664,15] [%emt 0:00:12]} 71. Rxg8 {
[%eval 530,19] [%emt 0:00:03]} Kxh7 {[%eval 749,16] [%emt 0:00:04]} 72. Rd8 {
[%eval 560,20] [%emt 0:00:04]} Kxg7 {[%eval 773,15] [%emt 0:00:03]} 73. dxc4 {
[%eval 590,20] [%emt 0:00:04]} b3 {[%eval 827,15] [%emt 0:00:05]} 74. Be3 {
[%eval 630,18] [%emt 0:00:03]} b2 {[%eval 863,14] [%emt 0:00:04]} 75. Rb8 {
[%eval 690,11] [%emt 0:00:04]} Kg6 {[%eval 1186,15] [%emt 0:00:17]} 76. Bxd4 {
[%eval 800,12] [%emt 0:00:04]} exd4 {[%eval 1186,13] [%emt 0:00:03]} 77. Rxb2 {
[%eval 970,11] [%emt 0:00:04]} Kf7 {[%eval 1202,12] [%emt 0:00:03]} 78. Rd2 {
[%eval 1500,15] [%emt 0:00:06]} Ke6 {[%eval 2124,12] [%emt 0:00:07]} 79. Rxd4 {
[%eval 1640,18] [%emt 0:00:03]} Ke5 {[%eval 32747,13] [%emt 0:00:09]} 80. Rd1 {
[%eval 1620,23] [%emt 0:00:06]} Kxe4 {[%eval 2290,10] [%emt 0:00:07]} 81. c5 {
[%eval 680,17] [%emt 0:00:03]} Kf5 {[%eval 32760,13] [%emt 0:00:07]} 82. c6 {
[%eval 32755,9] [%emt 0:00:02]} Kg5 {[%eval 32761,11] [%emt 0:00:05]} 83. c7 {
[%eval 32755,7] [%emt 0:00:00]} Kg6 {[%eval 32762,10] [%emt 0:00:06]} 84. c8=Q
{[%eval 32755,5] [%emt 0:00:00]} Kf7 {[%eval 32763,9] [%emt 0:00:06]} 85. Qf8+
{[%eval 32757,3] [%emt 0:00:00]} Kxf8 {[%eval 32756,63] [%emt 0:00:01]} 86. Kf3
{[%emt 0:00:00]} Kf7 {[%eval 32757,3] [%emt 0:00:00]} 87. Kg4 {[%emt 0:00:00]}
Kg6 {[%eval 32758,3] [%emt 0:00:00]} 88. Rd6 {[%emt 0:00:00]} Kf7 {
[%eval 32759,3] [%emt 0:00:00]} 89. Rxf6+ {[%emt 0:00:00]} Kxf6 {
[%eval 32748,1] [%emt 0:00:00]} 90. Kf4 {[%emt 0:00:00]} Ke6 {
[%eval 32749,1] [%emt 0:00:00]} 91. Kg5 {[%emt 0:00:00]} Kf7 {
[%eval 32750,1] [%emt 0:00:00]} 92. f3 {[%emt 0:00:00]} Kg7 {
[%eval 32751,1] [%emt 0:00:00]} 93. f4 {[%emt 0:00:00]} Kf7 {
[%eval 32752,1] [%emt 0:00:00]} 94. Kf5 {[%emt 0:00:00]} Kg8 {
[%eval 32753,1] [%emt 0:00:00]} 95. Kf6 {[%emt 0:00:00]} Kf8 {
[%eval 32754,1] [%emt 0:00:00]} 96. f5 {[%emt 0:00:00]} Ke8 {
[%eval 32755,1] [%emt 0:00:00]} 97. Kg7 {[%emt 0:00:00]} Kd7 {
[%eval 32756,1] [%emt 0:00:00]} 98. f6 {[%emt 0:00:00]} Kc6 {
[%eval 32757,1] [%emt 0:00:00]} 99. f7 {[%emt 0:00:00]} Kd5 {
[%eval 32758,1] [%emt 0:00:00]} 100. f8=Q {[%emt 0:00:00]} Kd4 {
[%eval 32759,1] [%emt 0:00:00]} 101. Qb4+ {[%emt 0:00:00]} Kd3 {
[%eval 32760,1] [%emt 0:00:00]} 102. Kf6 {[%emt 0:00:00]} Ke2 {
[%eval 32761,1] [%emt 0:00:00]} 103. Ke5 {[%emt 0:00:00]} Kd3 {
[%eval 32762,1] [%emt 0:00:00]} 104. Kf4 {[%emt 0:00:00]} Ke2 {
[%eval 32763,1] [%emt 0:00:00]} 105. Qc4+ {[%emt 0:00:00]} Ke1 {
[%eval 32764,1] [%emt 0:00:00]} 106. Ke3 {[%emt 0:00:00]} Kd1 {
[%eval 32765,1] [%emt 0:00:00]} 107. Qc5 {[%emt 0:00:00]} Ke1 {
[%eval 32766,1] [%emt 0:00:00]} 108. Qc1# {[%eval -32767,1] [%emt 0:00:00]} 1-0
186
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
[Event "Friendly Game, 7m + 3s"]
[Site "Engine Room"]
[Date "2006.05.12"]
[Round "?"]
[White "AlterEgo, Achilles 8x1.8Ghz"]
[Black "Mans, Deep Fritz 8"]
[Result "1-0"]
[ECO "B65"]
[WhiteElo "2472"]
[BlackElo "2792"]
[Annotator "Vladan,Vuckovic"]
[PlyCount "209"]
[EventDate "2006.05.12"]
[TimeControl "420+3"]
1. e4 {[%emt 0:00:00]} c5 {[%emt 0:00:00]} 2. Nf3 {[%emt 0:00:00]} d6 {
[%emt 0:00:00]} 3. d4 {[%emt 0:00:00]} cxd4 {[%emt 0:00:00]} 4. Nxd4 {
[%emt 0:00:00]} Nf6 {[%emt 0:00:00]} 5. Nc3 {[%emt 0:00:00]} Nc6 {
[%emt 0:00:00]} 6. Bg5 {[%emt 0:00:00]} e6 {[%emt 0:00:00]} 7. Qd2 {
[%emt 0:00:00]} Be7 {[%emt 0:00:00]} 8. O-O-O {[%emt 0:00:00]} O-O {
[%emt 0:00:00]} 9. f4 {[%emt 0:00:00]} Nxd4 {[%emt 0:00:00]} 10. Qxd4 {
[%emt 0:00:00]} Qa5 {[%emt 0:00:00]} 11. e5 {[%emt 0:00:00]} dxe5 {
[%emt 0:00:00]} 12. Qxe5 {[%emt 0:00:00]} Qxe5 {[%emt 0:00:00]} 13. fxe5 {
[%emt 0:00:09]} Nd5 {[%eval 30,15] [%emt 0:00:00]} 14. Bxe7 {[%emt 0:00:09]}
Nxe7 {[%eval 40,15] [%emt 0:00:00]} 15. Bc4 {[%eval 30,15] [%emt 0:00:09]} a6 {
[%eval 75,14] [%emt 0:00:14]} 16. Rhe1 {[%eval 30,14] [%emt 0:00:15]} b5 {
[%eval 58,15] [%emt 0:00:11]} 17. Be2 {[%eval 30,16] [%emt 0:00:09]} Ng6 {
[%eval 53,15] [%emt 0:00:33]} 18. Bf3 {[%eval 20,14] [%emt 0:00:10]} Ra7 {
[%eval 42,14] [%emt 0:00:19]} 19. Bc6 {[%eval 20,15] [%emt 0:00:14]} f6 {
[%eval 25,14] [%emt 0:00:21]} 20. exf6 {[%eval 30,12] [%emt 0:00:09]} gxf6 {
[%eval 20,14] [%emt 0:00:17]} 21. Rd6 {[%eval 20,14] [%emt 0:00:19]} Ne5 {
[%eval -9,14] [%emt 0:00:27]} 22. Red1 {[%eval 10,14] [%emt 0:00:18]} Kf7 {
[%eval -26,13] [%emt 0:00:19]} 23. g3 {[%eval 10,15] [%emt 0:00:20]} f5 {
[%eval -38,13] [%emt 0:00:19]} 24. Kb1 {[%eval 0,14] [%emt 0:00:19]} Rc7 {
[%eval -78,13] [%emt 0:00:15]} 25. Bg2 {[%eval 0,14] [%emt 0:00:08]} Nc4 {
[%eval -86,14] [%emt 0:00:14]} 26. Rc6 {[%eval -10,15] [%emt 0:00:08]} Rxc6 {
[%eval -92,14] [%emt 0:00:12]} 27. Bxc6 {[%eval -10,14] [%emt 0:00:10]} Ke7 {
[%eval -90,14] [%emt 0:00:16]} 28. Kc1 {[%eval -20,15] [%emt 0:00:31]} Rf6 {
[%eval -92,14] [%emt 0:00:00]} 29. b3 {[%eval -20,17] [%emt 0:00:17]} Ne5 {
[%eval -97,15] [%emt 0:00:25]} 30. Bg2 {[%eval -20,17] [%emt 0:00:06]} Rh6 {
[%eval -82,14] [%emt 0:00:09]} 31. h4 {[%eval -20,17] [%emt 0:00:10]} Rg6 {
[%eval -96,14] [%emt 0:00:21]} 32. Ne2 {[%eval -30,17] [%emt 0:00:06]} Nd7 {
[%eval -100,13] [%emt 0:00:06]} 33. Rd3 {[%eval -20,16] [%emt 0:00:25]} e5 {
[%eval -91,13] [%emt 0:00:09]} 34. Rc3 {[%eval -30,15] [%emt 0:00:13]} Rg8 {
[%eval -77,14] [%emt 0:00:21]} 35. Bd5 {[%eval -30,16] [%emt 0:00:13]} Re8 {
[%eval -101,13] [%emt 0:00:20]} 36. Bc6 {[%eval -10,15] [%emt 0:00:24]} Rf8 {
[%eval -101,14] [%emt 0:00:22]} 37. a4 {[%eval 0,15] [%emt 0:00:08]} b4 {
[%eval -88,14] [%emt 0:00:00]} 38. Rc4 {[%eval 0,14] [%emt 0:00:09]} a5 {
[%eval -102,14] [%emt 0:00:06]} 39. Bb5 {[%eval -10,17] [%emt 0:00:24]} Kd8 {
[%eval -76,15] [%emt 0:00:00]} 40. c3 {[%eval -20,15] [%emt 0:00:09]} bxc3 {
[%eval -74,14] [%emt 0:00:05]} 41. Rxc3 {[%eval -10,16] [%emt 0:00:03]} Rf7 {
[%eval -82,14] [%emt 0:00:07]} 42. Kb2 {[%eval -10,13] [%emt 0:00:06]} Bb7 {
[%eval -86,13] [%emt 0:00:10]} 43. Ka3 {[%eval -10,15] [%emt 0:00:07]} Rg7 {
[%eval -66,13] [%emt 0:00:12]} 44. Re3 {[%eval 10,17] [%emt 0:00:06]} Re7 {
[%eval -43,14] [%emt 0:00:02]} 45. b4 {[%eval 20,13] [%emt 0:00:09]} axb4+ {
[%eval -34,15] [%emt 0:00:18]} 46. Kxb4 {[%eval 20,16] [%emt 0:00:04]} Nf6 {
[%eval -32,14] [%emt 0:00:12]} 47. Nc3 {[%eval 10,16] [%emt 0:00:11]} Ng4 {
[%eval -17,13] [%emt 0:00:01]} 48. Re1 {[%eval 40,13] [%emt 0:00:11]} Bg2 {
[%eval -9,12] [%emt 0:00:13]} 49. a5 {[%eval 50,12] [%emt 0:00:08]} Rg7 {
[%eval 0,11] [%emt 0:00:00]} 50. a6 {[%eval 50,13] [%emt 0:00:09]} Kc7 {
[%eval 52,12] [%emt 0:00:07]} 51. Ka5 {[%eval 70,13] [%emt 0:00:07]} Kb8 {
[%eval 49,11] [%emt 0:00:03]} 52. Bd3 {[%eval 90,13] [%emt 0:00:07]} Rf7 {
[%eval 149,12] [%emt 0:00:02]} 53. Nb5 {[%eval 150,13] [%emt 0:00:09]} h5 {
[%eval 198,12] [%emt 0:00:01]} 54. Be2 {[%eval 140,9] [%emt 0:00:04]} Nf6 {
[%eval 194,12] [%emt 0:00:07]} 55. Bc4 {[%eval 140,14] [%emt 0:00:03]} Re7 {
[%eval 182,13] [%emt 0:00:14]} 56. a7+ {[%eval 190,16] [%emt 0:00:04]} Kb7 {
[%eval 220,13] [%emt 0:00:01]} 57. Rc1 {[%eval 220,14] [%emt 0:00:06]} Bc6 {
187
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
[%eval
291,14] [%emt 0:00:07]} 58. Nd6+ {[%eval 300,16] [%emt 0:00:02]} Ka8 {
291,14] [%emt 0:00:04]} 59. Ba6 {[%eval 280,14] [%emt 0:00:03]} Be8 {
397,14] [%emt 0:00:04]} 60. Nc8 {[%eval 330,16] [%emt 0:00:04]} Rf7 {
463,15] [%emt 0:00:04]} 61. Rb1 {[%eval 440,18] [%emt 0:00:04]} Rxa7 {
515,16] [%emt 0:00:04]} 62. Nxa7 {[%eval 490,17] [%emt 0:00:04]} Kxa7 {
539,16] [%emt 0:00:05]} 63. Rb7+ {[%eval 480,19] [%emt 0:00:03]} Ka8 {
558,15] [%emt 0:00:00]} 64. Re7 {[%eval 500,19] [%emt 0:00:05]} Kb8 {
580,16] [%emt 0:00:01]} 65. Re6 {[%eval 250,10] [%emt 0:00:04]} Ne4 {
602,15] [%emt 0:00:02]} 66. Rxe8+ {[%eval 510,16] [%emt 0:00:03]} Kc7 {
602,16] [%emt 0:00:06]} 67. Rxe5 {[%eval 520,20] [%emt 0:00:02]} Nxg3 {
648,16] [%emt 0:00:08]} 68. Re3 {[%eval 560,19] [%emt 0:00:06]} f4 {
678,16] [%emt 0:00:00]} 69. Rd3 {[%eval 580,19] [%emt 0:00:06]} Nf5 {
700,15] [%emt 0:00:05]} 70. Bb5 {[%eval 580,17] [%emt 0:00:02]} Nd6 {
837,16] [%emt 0:00:11]} 71. Rf3 {[%eval 610,20] [%emt 0:00:03]} Nb7+ {
718,15] [%emt 0:00:05]} 72. Kb4 {[%eval 610,19] [%emt 0:00:03]} Kd6 {
727,16] [%emt 0:00:05]} 73. Rxf4 {[%eval 630,18] [%emt 0:00:05]} Ke5 {
760,16] [%emt 0:00:08]} 74. Rf8 {[%eval 640,19] [%emt 0:00:05]} Nd6 {
798,16] [%emt 0:00:11]} 75. Rh8 {[%eval 650,19] [%emt 0:00:08]} Nf5 {
800,14] [%emt 0:00:00]} 76. Rxh5 {[%eval 650,16] [%emt 0:00:06]} Kf6 {
944,15] [%emt 0:00:00]} 77. Bd7 {[%eval 680,16] [%emt 0:00:08]} Ne7 {
964,14] [%emt 0:00:05]} 78. Kc5 {[%eval 670,17] [%emt 0:00:06]} Ng8 {
1198,14] [%emt 0:00:01]} 79. Rf5+ {[%eval 750,16] [%emt 0:00:05]} Ke7 {
32733,13] [%emt 0:00:01]} 80. h5 {[%eval 710,17] [%emt 0:00:04]} Nh6 {
32740,14] [%emt 0:00:06]} 81. Rf1 {[%eval 1190,9] [%emt 0:00:03]} Kd8 {
32745,12] [%emt 0:00:01]} 82. Rf6 {[%emt 0:00:03]} Ng8 {
550,18] [%emt 0:00:00]} 83. Kd6 {[%emt 0:00:00]} Nxf6 {
32746,4] [%emt 0:00:00]} 84. h6 {[%emt 0:00:00]} Ne4+ {
32746,3] [%emt 0:00:00]} 85. Ke6 {[%emt 0:00:00]} Ng5+ {
32747,3] [%emt 0:00:00]} 86. Kf6 {[%emt 0:00:00]} Ne4+ {
32748,3] [%emt 0:00:00]} 87. Kf5 {[%emt 0:00:00]} Ke7 {
32749,3] [%emt 0:00:00]} 88. h7 {[%emt 0:00:00]} Nd6+ {
32750,3] [%emt 0:00:00]} 89. Kg6 {[%emt 0:00:00]} Kxd7 {
32751,3] [%emt 0:00:00]} 90. h8=Q {[%emt 0:00:00]} Kc6 {
32752,1] [%emt 0:00:00]} 91. Kf6 {[%emt 0:00:00]} Kc5 {
32753,1] [%emt 0:00:00]} 92. Qh5+ {[%emt 0:00:00]} Kc4 {
32754,1] [%emt 0:00:00]} 93. Qe2+ {[%emt 0:00:00]} Kc5 {
32755,1] [%emt 0:00:00]} 94. Qe5+ {[%emt 0:00:00]} Kc6 {
32756,1] [%emt 0:00:00]} 95. Ke6 {[%emt 0:00:00]} Nb5 {
32757,1] [%emt 0:00:00]} 96. Qd5+ {[%emt 0:00:00]} Kb6 {
32758,1] [%emt 0:00:00]} 97. Ke5 {[%emt 0:00:00]} Nc7 {
32759,1] [%emt 0:00:00]} 98. Qd6+ {[%emt 0:00:00]} Kb7 {
32760,1] [%emt 0:00:00]} 99. Qc5 {[%emt 0:00:00]} Na6 {
32761,1] [%emt 0:00:00]} 100. Qb5+ {[%emt 0:00:00]} Ka7 {
32762,1] [%emt 0:00:00]} 101. Kd6 {[%emt 0:00:00]} Nb8 {
32763,1] [%emt 0:00:00]} 102. Kc7 {[%emt 0:00:00]} Na6+ {
32764,1] [%emt 0:00:00]} 103. Kd7 {[%emt 0:00:00]} Nc7 {
32765,1] [%emt 0:00:00]} 104. Kxc7 {[%emt 0:00:00]} Ka8 {
32766,1] [%emt 0:00:00]} 105. Qa6# {[%eval -32767,1] [%emt 0:00:00]} 1-0
[Event "Friendly Game, 7m + 3s"]
[Site "Engine Room"]
[Date "2006.05.12"]
[Round "?"]
[White "AlterEgo, Achilles 8x1.8Ghz"]
[Black "Mans, Deep Shredder 9.1 U"]
[Result "1-0"]
[ECO "B90"]
[WhiteElo "2472"]
[BlackElo "2792"]
[Annotator "Vladan,Vuckovic"]
[PlyCount "121"]
[EventDate "2006.05.12"]
[TimeControl "420+3"]
1. e4 {[%emt 0:00:00]} c5 {[%emt 0:00:00]} 2. Nf3 {[%emt 0:00:00]} d6 {
[%emt 0:00:00]} 3. d4 {[%emt 0:00:00]} cxd4 {[%emt 0:00:00]} 4. Nxd4 {
[%emt 0:00:00]} Nf6 {[%emt 0:00:00]} 5. Nc3 {[%emt 0:00:00]} a6 {[%emt 0:00:00]
188
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
} 6. Be3 {[%emt 0:00:00]} e5 {[%emt 0:00:00]} 7. Nb3 {[%emt 0:00:00]} Be7 {
[%emt 0:00:00]} 8. f3 {[%emt 0:00:00]} O-O {[%emt 0:00:00]} 9. Qd2 {
[%emt 0:00:00]} Be6 {[%emt 0:00:00]} 10. O-O-O {[%emt 0:00:00]} Nbd7 {
[%emt 0:00:00]} 11. g4 {[%emt 0:00:38]} Qc7 {[%eval 20,15] [%emt 0:00:00]} 12.
g5 {[%emt 0:00:08]} Nh5 {[%eval 30,12] [%emt 0:00:00]} 13. Kb1 {[%emt 0:00:20]}
b5 {[%eval 30,13] [%emt 0:00:00]} 14. Nd5 {[%emt 0:00:10]} Bxd5 {
[%eval 20,13] [%emt 0:00:00]} 15. exd5 {[%emt 0:00:10]} Nb6 {
[%eval 10,13] [%emt 0:00:00]} 16. Rg1 {[%eval 10,13] [%emt 0:00:13]} Rac8 {
[%eval -4,15] [%emt 0:00:11]} 17. Na5 {[%eval 0,14] [%emt 0:00:13]} Nxd5 {
[%eval 1,16] [%emt 0:00:09]} 18. Qxd5 {[%eval 10,14] [%emt 0:00:06]} Qxa5 {
[%eval 0,17] [%emt 0:00:23]} 19. c3 {[%eval 10,14] [%emt 0:00:15]} Qc7 {
[%eval -12,15] [%emt 0:00:19]} 20. Rg4 {[%eval 10,15] [%emt 0:00:04]} Rb8 {
[%eval -3,15] [%emt 0:00:39]} 21. c4 {[%eval 0,14] [%emt 0:00:08]} bxc4 {
[%eval -28,14] [%emt 0:00:31]} 22. Bxc4 {[%eval 10,15] [%emt 0:00:04]} Qc8 {
[%eval -9,14] [%emt 0:00:21]} 23. Rd3 {[%eval 20,11] [%emt 0:00:10]} a5 {
[%eval -9,15] [%emt 0:00:31]} 24. Ra3 {[%eval 20,14] [%emt 0:00:07]} Rb4 {
[%eval -11,15] [%emt 0:00:42]} 25. b3 {[%eval 30,15] [%emt 0:00:04]} Bd8 {
[%eval -6,14] [%emt 0:00:24]} 26. Qxd6 {[%eval 40,14] [%emt 0:00:16]} Bc7 {
[%eval 8,15] [%emt 0:00:00]} 27. Qc6 {[%eval 50,14] [%emt 0:00:16]} Nf4 {
[%eval -8,14] [%emt 0:00:16]} 28. Bc5 {[%eval 20,14] [%emt 0:00:25]} Qd8 {
[%eval -7,16] [%emt 0:00:00]} 29. Kc2 {[%eval 20,13] [%emt 0:00:10]} Rb6 {
[%eval -9,15] [%emt 0:00:19]} 30. Qe4 {[%eval 20,15] [%emt 0:00:06]} Bd6 {
[%eval -20,14] [%emt 0:00:23]} 31. Rxa5 {[%eval 60,15] [%emt 0:00:06]} Bxc5 {
[%eval 53,14] [%emt 0:00:20]} 32. Rxc5 {[%eval 80,14] [%emt 0:00:05]} Qd7 {
[%eval 61,14] [%emt 0:00:14]} 33. Qxe5 {[%eval 150,12] [%emt 0:00:11]} Ne6 {
[%eval 65,14] [%emt 0:00:00]} 34. Rd5 {[%eval 150,12] [%emt 0:00:08]} Qa7 {
[%eval 75,14] [%emt 0:00:03]} 35. Kb1 {[%eval 160,12] [%emt 0:00:35]} Rc6 {
[%eval 96,15] [%emt 0:00:00]} 36. f4 {[%eval 170,11] [%emt 0:00:09]} Ra8 {
[%eval 120,13] [%emt 0:00:10]} 37. Rg2 {[%eval 180,13] [%emt 0:00:18]} Nf8 {
[%eval 166,13] [%emt 0:00:19]} 38. f5 {[%eval 210,11] [%emt 0:00:13]} Rac8 {
[%eval 218,14] [%emt 0:00:07]} 39. Qe4 {[%eval 220,12] [%emt 0:00:15]} Qb6 {
[%eval 205,13] [%emt 0:00:11]} 40. Rb5 {[%eval 220,12] [%emt 0:00:16]} Qd8 {
[%eval 229,14] [%emt 0:00:00]} 41. Rb7 {[%eval 250,11] [%emt 0:00:08]} Qd1+ {
[%eval 281,13] [%emt 0:00:10]} 42. Kb2 {[%eval 0,1] [%emt 0:00:00]} Rd6 {
[%eval 285,13] [%emt 0:00:09]} 43. Rc2 {[%eval 270,10] [%emt 0:00:07]} Rd2 {
[%eval 379,14] [%emt 0:00:25]} 44. a4 {[%eval 310,14] [%emt 0:00:05]} Kh8 {
[%eval 459,14] [%emt 0:00:24]} 45. Rxf7 {[%eval 370,12] [%emt 0:00:09]} Rcd8 {
[%eval 441,13] [%emt 0:00:00]} 46. Bd3 {[%eval 530,13] [%emt 0:00:20]} Kg8 {
[%eval 1009,13] [%emt 0:00:26]} 47. f6 {[%eval 620,13] [%emt 0:00:09]} Rxc2+ {
[%eval 1033,14] [%emt 0:00:03]} 48. Bxc2 {[%eval 660,15] [%emt 0:00:10]} Qd4+ {
[%eval 1050,16] [%emt 0:00:00]} 49. Qxd4 {[%eval 850,17] [%emt 0:00:09]} Rxd4 {
[%eval 1175,20] [%emt 0:00:09]} 50. Rxg7+ {[%eval 950,18] [%emt 0:00:06]} Kh8 {
[%eval 1250,19] [%emt 0:00:00]} 51. b4 {[%eval 1220,18] [%emt 0:00:15]} Rd8 {
[%eval 1261,15] [%emt 0:00:23]} 52. a5 {[%eval 1310,18] [%emt 0:00:06]} Ra8 {
[%eval 1527,15] [%emt 0:00:05]} 53. a6 {[%eval 2000,18] [%emt 0:00:15]} Rxa6 {
[%eval 2282,18] [%emt 0:00:23]} 54. Bb3 {[%eval 2290,19] [%emt 0:00:06]} Re6 {
[%eval 2282,17] [%emt 0:00:00]} 55. Re7 {[%eval 2380,17] [%emt 0:00:14]} h6 {
[%eval 3975,16] [%emt 0:00:05]} 56. Bxe6 {[%eval 1920,20] [%emt 0:00:06]} hxg5
{[%eval 32757,15] [%emt 0:00:02]} 57. Bf5 {[%eval 32762,8] [%emt 0:00:02]} g4 {
[%eval 32762,16] [%emt 0:00:05]} 58. Re8 {[%eval 32764,6] [%emt 0:00:00]} Kg8 {
[%eval 32756,14] [%emt 0:00:03]} 59. Bg6 {[%eval 32765,4] [%emt 0:00:00]} g3 {
[%eval 32765,17] [%emt 0:00:04]} 60. hxg3 {[%eval 32766,2] [%emt 0:00:00]} Kh8
{[%eval 32766,17] [%emt 0:00:00]} 61. Rxf8# {[%eval -32767,1] [%emt 0:00:00]}
1-0
189
Prilog teoriji i praksi naprednih šahovskih algoritama
___________________________________________________________________________
Međunarodni sertifikat za program Axon-Benchmark.
Međunarodni kopirajt © za program Axon.
_____________________________________
190
Download

Ukoliko želite možete pogledati celu doktorsku disertaciju