 *      achov program pro Unix a jin OS
 *      ==================================
 * 	Prvn pln funkn verze 0.2.00

Autor: Martin Maok, student druhho ronku MFF UK 
Datum: Tue Jul 27 15:40:37 MEST 1999

Co program um?

Experimentln achov program (engine) je stavn pedevm na stedn hru. Algoritmus se sna v prbhu hry zskat materiln pevahu, obsadit strategick sted achovnice a eventuln matit (pop. remzovat). M naimplementovnu jednoduchou variabiln knihovnu zahjen. Program komunikuje pes standardn vstup a vstup. Jeho komunikan protokol umouje spojen s existujcm grafickm prostedm XBOARD (resp. WINBOARD) - viz dle. Inteligence programu (zrove rychlost) je voliteln pes hloubku plnho prohledvn alfa-beta procedurou a nastavenm hloubky dohledvn do tichch pozic. Ob hodnoty lze nastavit v konfiguranm souboru a libovoln mnit v prbhu hry. Rozehran partie lze uloit a pozdji opt nast. Lze tak vytvoit njakou vchoz pozici textovm editorem do souboru a programem ji nast obdobn jako rozehranou partii. Program je slab ve srovnn s existujcmi (GPL a OpenSource) vynikajcmi programy (napklad Crafty a GNUchess). Program je psn v ANSI C a a na detaily je maximln penositeln mezi rznmi operanmi systmy. Jeho pednost je jednoduchost a mal nronost na harddisk a operan pam.

Co program neum?

Program ignoruje asovou kontrolu, pokud je poteba, je nutn si ji regulovat hloubkou prohledvn. Program na posledn dce (osmm a prvnm) pce promuje v automaticky v dmu (promna v jinou figuru nen implementovna - zvolen datov struktury a komunikan protokol XBOARD by zpsobil problmy napklad pi ukldn pozic a rozehranch parti, navc je to pomrn nedleit). Program je slab v koncovkch, doporuuje se zvit hloubku prohledvn a zruit dohledvn do tichch pozic (v koncovce je zbyten a neinn). Nen implementovno pravidlo o remze po XY tazch bez bran, mimo jin z dvodu existence potaem neovench dlouhch (pes 100 tah) vyhrvajcch koncovek a nedleitosti pravidla (pokud ji padest tah j ani pota nic nebral, prohlsm nerozhodn vsledek a potae se nemusm na nic ptt). Tak pravidlo o remze pi trojnsobnm zopakovn stejn pozice nen naimplementovno - bylo by asov nron a velmi zpomaluje engine (pi dosavadn implementaci bez pouit transpozinch tabulek), pravidlo je zdka vyuito a inteligence programu by byla podstatn snena. Navc me bt detekovno `extern` - napklad programem XBOARD a me bt rozhodnuto o vsledku partie.

Rychlost programu

Na AMD486/DX5-133MHz - Linux 2.2.10:
Rychlost programu je dky vlastnostem alfa-beta procedury siln zvisl na konkrtn pozici, potu monch tah a rozdlem kvality jednotlivch tah. Pokud existuje njak velmi kvalitn tah a vtina ostatnch tah je slabch, vpoet spje velmi rychle ke konci (30-40 sekund v hloubce 6). Naopak v zapeklitch situacch, kdy tah, kter vypad slibn pi hloubce prohledvn 5 a me bt velmi slabm pi hloubce 6, potom hloubka 6 me pota zamstnat i na nkolik mlo minut. Hloubka 4 je obvykle propotena bhem nkolika mlo sekund. Takov zlat stedn cesta je zhruba <3,-3> (hloubka prohledvn 3, hloubka dohledvn do tichch pozic -3), na vkonnjch potach <4,-4> nebo <6,0> a <6,-2> pro nronj hru. V koncovce je vhodnj podstatn zvit hloubku prohledvn a zruit dohledvn do tichch pozic (sply 0).

Nroky na hardware

Pro samotn pouit programu achy vm posta asi 200kB volnho msta na disku a mn ne 500kB operan pamti, procesor dle vlastn chuti a penenky.

Pouit a funkce programu

Po sputn se program pokus nast konfiguran soubor ./sachy.cfg, kter obsahuje 2 cel sla - prvn je hloubka prohledvn alfa-beta procedurou (mus bt vt nebo rovno 1), druh je hloubka dohledvn do tichch pozic (men nebo rovno 0). Pokud tento soubor neexistuje, program vyd varovnou hlku a nastav implicitn hodnoty (nastaven pi kompilaci). Pot se program pokus nast knihovnu zahjen ze souboru ./sachy.bk (formt souboru je dle), pokud neexistuje, program vyd varovnou hlku a pokrauje bez knihovny zahjen.
Potom se objev pkazov dka a program oekv pkazy. Na zatku je implicitn nastaven pota jako ern, tedy po zadn tahu blho se spust pemlec algoritmus a pot program provede svj tah a opt oekv pkazy. Tah je zde povaovn za jeden z pkaz.

Mon pkazy

new	-	program nastav vchoz (poten) pozici na achovnici a
		oekv pkazy. Pota je nastaven na ernho, hloubka
		prohledvn se nemn. (nen poteba na zatku)
e2e4	-	tahy se zadvaj vlun touto notac (b1c3, e1g1 atd.).
force	-	program bude tahy pouze akceptovat, nebude pemlet.
		(navc se pestane pro tuto hru pestane pouvat knihovna
		 zahjen - a do pkazu new).
white	-	v aktuln pozici nastav blho jako hre na tahu a
		pota je nastaven na ernho.
black	-	obdobn, ale naopak. Na tahu je ern, pota hraje za blho.
undo	-	vezme zpt posledn proveden tah (pltah).
remove	-	vezme zpt posledn dva tahy (myleno dva pltahy).
tisk	-	vytiskne aktuln pozici na achovnici (obvykle nen tento
		pkaz poteba).
test	-	provede jednoduch benchmark (pouze orientan, neodr
		pesn rychlost pemlen).
hist	-	vytiskne historii tah.
list	-	vytiskne vechny ppustn tahy v aktuln pozici.
hint	-	spust pemlec algoritmus a spote nejlep tah.
go	-	pota se stane hrem aktuln na tahu, zamysl se a provede
		tah. (pouv se napklad po pkazu force ...)
ply N	-	nastav hloubku prohledvn alfa-beta procedury. (N>=1).
sply N	-	nastav hloubku dohledvn do tichch pozic. (N<=0).
save FILE -	ulo aktuln hru do souboru FILE.
open FILE -	nate uloenou hru/pozici ze souboru FILE.
quit	-	program skon.

Formt souboru s uloenou parti (resp. pozic)
	
Soubor vznik pi pouit pkazu "save" bhem hry nebo jej lze vytvoit pmo libovolnm textovm editorem. Soubor obsahuje na prvn dce poet provedench tah a na zbvajcch adkch dvojice slo tah, tedy napklad:
2
1 e2e4
2 e7e5
Jednou vlastnost tchto soubor je to, e program pi natn tchto tah nekontroluje korektnost tah, lze tedy takto vyrobit libovolnou pozici `pirozenm` pohybem figur na achovnici (napklad tahy e2g7 apod.).

Formt knihovny zahjen (soubor sachy.bk)

Jedn se o textov soubor, kter na kadm dku obsahuje jedno zahjen, nebo jednu jeho variantu. dek mus konit mezerou a znakem # (hash), jednotliv tahy jsou psan v obvykl "e2e4" notaci, neobsahuj dn sla tah. Tedy soubor me vypadat napklad takto:
e2e4 e7e6 d2d4 d7d5 g1f3 #
e2e4 e7e5 g1f3 b8c6 #
Pi natn knihovny zahjen program nekontroluje jej korektnost, ale postav z nj strom hry, jeho maximln poet vrchol a maximln stupe vrchol je dn konstantami pi kompilaci.
	
Pouit programu XBOARD

S programem sachy lze komunikovat prostednictvm grafickho rozhran XBOARD a WINBOARD, program jsem testoval pouze s XBOARD (verze 4.0.0 - za ostatn zvlt star verze nerum), protoe M$ Windows na svm potai instalovan nemm, ale podle dostupn dokumentace by ml fungovat i s WINBOARD (viz PROTOCOL.HTM). Sputn grafickho rozhran spolen s XBOARD pod X Windows se docl nsledujcmi pkazy:
cd <nekde/sachy_directory>
xboard -xclock -queen -fcp ./sachy
Doporuuji k letmmu nastudovn manulovou strnku XBOARD (napklad parametr -size, pokud pouvte jin rozlien ne 800x600 a chcete pslun velkou/malou achovnici). Pi pouit XBOARD program samozejm nat sachy.cfg a sachy.bk, pokud je v aktulnm adresi nalezne. Pro sledovn informac, kter si XBOARD a program vymuje pes roury pouijte parametr xboard -debug.
Z menu programu XBOARD lze bez problm a s obvyklm vznamem pouvat nsledujc poloky:
File/Reset Game (zavol new)
File/Load Game ...
File/Save Game ... (oboj se netk pkaz load a save internch programu achy, tentokrt se o ve star program XBOARD a ukld ve standardu PGN)
Mode/Machine White
Mode/Machine Black
Mode/Edit Game (odpovd pkazu force)
Step/Move Now
Step/Rectract Move
Help/Hint
 ... a samozejm ostatn pkazy, kter se ji netkaj bezprostedn pouitho achovho engine, ale pouze vzhledu a chovn XBOARD.

Licence
 
Program i zdrojov kd lze libovoln a bezplatn pouvat, it a modifikovat. 

Zdroje a souvisejc URL

Autor: Martin Maok, mailto:martin.macok@st.mff.cuni.cz
WWW/download: http://kocour.ms.mff.cuni.cz/~macok/

XBOARD: http://www.research.digital.com/SRC/personal/Tim_Mann/xboard/
GNUchess: ftp://prep.ai.mit.edu/pub/gnu/gnuchess*
Crafty chess engine: ftp://ftp.cis.uab.edu/hyatt/
DarkThought: http://wwwipd.ira.uka.de/Tichy/DarkThought/

Podkovn

Podkovn pat autorm GNU CC, autorm editoru Vi Improved, debuggeru GDB, jeho grafick nadstavby Data Display Debuggeru a pedevm autorm a vvojm Linuxu a ostatnch OpenSource projekt.
