 *      Šachový program pro Unix a jiné OS
 *      ==================================
 * 	První plně funkční verze 0.2.00

Autor: Martin Mačok, student druhého ročníku MFF UK 
Datum: Tue Jul 27 15:40:37 MEST 1999

Co program umí?

Experimentální šachový program (engine) je stavěn především na střední hru. Algoritmus se snaží v průběhu hry získat materiální převahu, obsadit strategický střed šachovnice a eventuálně matit (popř. remízovat). Má naimplementovánu jednoduchou variabilní knihovnu zahájení. Program komunikuje přes standardní vstup a výstup. Jeho komunikační protokol umožňuje spojení s existujícím grafickým prostředím XBOARD (resp. WINBOARD) - viz dále. Inteligence programu (zároveň rychlost) je volitelná přes hloubku úplného prohledávání alfa-beta procedurou a nastavením hloubky dohledávání do tichých pozic. Obě hodnoty lze nastavit v konfiguračním souboru a libovolně měnit v průběhu hry. Rozehraná partie lze uložit a později opět načíst. Lze také vytvořit nějakou výchozí pozici textovým editorem do souboru a programem ji načíst obdobně jako rozehranou partii. Program je slabý ve srovnání s existujícími (GPL a OpenSource) vynikajícími programy (například Crafty a GNUchess). Program je psán v ANSI C a až na detaily je maximálně přenositelný mezi různými operačními systémy. Jeho předností je jednoduchost a malá náročnost na harddisk a operační paměť.

Co program neumí?

Program ignoruje časovou kontrolu, pokud je potřeba, je nutné si ji regulovat hloubkou prohledávání. Program na poslední řádce (osmém a prvním) pěšce proměňuje v automaticky v dámu (proměna v jinou figuru není implementována - zvolené datové struktury a komunikační protokol XBOARD by způsobil problémy například při ukládání pozic a rozehraných partií, navíc je to poměrně nedůležité). Program je slabý v koncovkách, doporučuje se zvýšit hloubku prohledávání a zrušit dohledávání do tichých pozic (v koncovce je zbytečné a neúčinné). Není implementováno pravidlo o remíze po XY tazích bez braní, mimo jiné z důvodu existence počítačem neověřených dlouhých (přes 100 tahů) vyhrávajících koncovek a nedůležitosti pravidla (pokud již padesát tahů já ani počítač nic nebral, prohlásím nerozhodný výsledek a počítače se nemusím na nic ptát). Také pravidlo o remíze při trojnásobném zopakování stejné pozice není naimplementováno - bylo by časově náročné a velmi zpomaluje engine (při dosavadní implementaci bez použití transpozičních tabulek), pravidlo je zřídka využito a inteligence programu by byla podstatně snížena. Navíc může být detekováno `externě` - například programem XBOARD a může být rozhodnuto o výsledku partie.

Rychlost programu

Na AMD486/DX5-133MHz - Linux 2.2.10:
Rychlost programu je díky vlastnostem alfa-beta procedury silně závislá na konkrétní pozici, počtu možných tahů a rozdílem kvality jednotlivých tahů. Pokud existuje nějaký velmi kvalitní tah a většina ostatních tahů je slabých, výpočet spěje velmi rychle ke konci (30-40 sekund v hloubce 6). Naopak v zapeklitých situacích, kdy tah, který vypadá slibně při hloubce prohledávání 5 a může být velmi slabým při hloubce 6, potom hloubka 6 může počítač zaměstnat i na několik málo minut. Hloubka 4 je obvykle propočtena během několika málo sekund. Taková zlatá střední cesta je zhruba <3,-3> (hloubka prohledávání 3, hloubka dohledávání do tichých pozic -3), na výkonnějších počítačích <4,-4> nebo <6,0> a <6,-2> pro náročnější hru. V koncovce je výhodnější podstatně zvýšit hloubku prohledávání a zrušit dohledávání do tichých pozic (sply 0).

Nároky na hardware

Pro samotné použití programu šachy vám postačí asi 200kB volného místa na disku a méně než 500kB operační paměti, procesor dle vlastní chuti a peněženky.

Použití a funkce programu

Po spuštění se program pokusí načíst konfigurační soubor ./sachy.cfg, který obsahuje 2 celá čísla - první je hloubka prohledávání alfa-beta procedurou (musí být větší nebo rovno 1), druhé je hloubka dohledávání do tichých pozic (menší nebo rovno 0). Pokud tento soubor neexistuje, program vydá varovnou hlášku a nastaví implicitní hodnoty (nastavené při kompilaci). Poté se program pokusí načíst knihovnu zahájení ze souboru ./sachy.bk (formát souboru je dále), pokud neexistuje, program vydá varovnou hlášku a pokračuje bez knihovny zahájení.
Potom se objeví příkazová řádka a program očekává příkazy. Na začátku je implicitně nastaven počítač jako černý, tedy po zadání tahu bílého se spustí přemýšlecí algoritmus a poté program provede svůj tah a opět očekává příkazy. Tah je zde považován za jeden z příkazů.

Možné příkazy

new	-	program nastaví výchozí (počáteční) pozici na šachovnici a
		očekává příkazy. Počítač je nastaven na černého, hloubka
		prohledávání se nemění. (není potřeba na začátku)
e2e4	-	tahy se zadávají výlučně touto notací (b1c3, e1g1 atd.).
force	-	program bude tahy pouze akceptovat, nebude přemýšlet.
		(navíc se přestane pro tuto hru přestane používat knihovna
		 zahájení - až do příkazu new).
white	-	v aktuální pozici nastaví bílého jako hráče na tahu a
		počítač je nastaven na černého.
black	-	obdobně, ale naopak. Na tahu je černý, počítač hraje za bílého.
undo	-	vezme zpět poslední provedený tah (půltah).
remove	-	vezme zpět poslední dva tahy (myšleno dva půltahy).
tisk	-	vytiskne aktuální pozici na šachovnici (obvykle není tento
		příkaz potřeba).
test	-	provede jednoduchý benchmark (pouze orientační, neodráží
		přesně rychlost přemýšlení).
hist	-	vytiskne historii tahů.
list	-	vytiskne všechny přípustné tahy v aktuální pozici.
hint	-	spustí přemýšlecí algoritmus a spočte nejlepší tah.
go	-	počítač se stane hráčem aktuálně na tahu, zamyslí se a provede
		tah. (používá se například po příkazu force ...)
ply N	-	nastaví hloubku prohledávání alfa-beta procedury. (N>=1).
sply N	-	nastaví hloubku dohledávání do tichých pozic. (N<=0).
save FILE -	uloží aktuální hru do souboru FILE.
open FILE -	načte uloženou hru/pozici ze souboru FILE.
quit	-	program skončí.

Formát souboru s uloženou partií (resp. pozicí)
	
Soubor vzniká při použití příkazu "save" během hry nebo jej lze vytvořit přímo libovolným textovým editorem. Soubor obsahuje na první řádce počet provedených tahů a na zbývajících řadkách dvojice číslo tah, tedy například:
2
1 e2e4
2 e7e5
Jednou vlastností těchto souborů je to, že program při načítání těchto tahů nekontroluje korektnost tahů, lze tedy takto vyrobit libovolnou pozici `přirozeným` pohybem figur na šachovnici (například tahy e2g7 apod.).

Formát knihovny zahájení (soubor sachy.bk)

Jedná se o textový soubor, který na každém řádku obsahuje jedno zahájení, nebo jednu jeho variantu. Řádek musí končit mezerou a znakem # (hash), jednotlivé tahy jsou psané v obvyklé "e2e4" notaci, neobsahují žádná čísla tahů. Tedy soubor může vypadat například takto:
e2e4 e7e6 d2d4 d7d5 g1f3 #
e2e4 e7e5 g1f3 b8c6 #
Při načítání knihovny zahájení program nekontroluje její korektnost, ale postaví z něj strom hry, jehož maximální počet vrcholů a maximální stupeň vrcholů je dán konstantami při kompilaci.
	
Použití programu XBOARD

S programem sachy lze komunikovat prostřednictvím grafického rozhraní XBOARD a WINBOARD, program jsem testoval pouze s XBOARD (verze 4.0.0 - za ostatní zvláště starší verze neručím), protože M$ Windows na svém počítači instalované nemám, ale podle dostupné dokumentace by měl fungovat i s WINBOARD (viz PROTOCOL.HTM). Spuštění grafického rozhraní společně s XBOARD pod X Windows se docílí následujícími příkazy:
cd <nekde/sachy_directory>
xboard -xclock -queen -fcp ./sachy
Doporučuji k letmému nastudování manuálovou stránku XBOARD (například parametr -size, pokud používáte jiné rozlišení než 800x600 a chcete příslušně velkou/malou šachovnici). Při použití XBOARD program samozřejmě načítá sachy.cfg a sachy.bk, pokud je v aktuálním adresáři nalezne. Pro sledování informací, které si XBOARD a program vyměňuje přes roury použijte parametr xboard -debug.
Z menu programu XBOARD lze bez problémů a s obvyklým významem používat následující položky:
File/Reset Game (zavolá new)
File/Load Game ...
File/Save Game ... (obojí se netýká příkazů load a save interních programu šachy, tentokrát se o vše stará program XBOARD a ukládá ve standardu PGN)
Mode/Machine White
Mode/Machine Black
Mode/Edit Game (odpovídá příkazu force)
Step/Move Now
Step/Rectract Move
Help/Hint
 ... a samozřejmě ostatní příkazy, které se již netýkají bezprostředně použitého šachového engine, ale pouze vzhledu a chování XBOARD.

Licence
 
Program i zdrojový kód lze libovolně a bezplatně používat, šířit a modifikovat. 

Zdroje a související URL

Autor: Martin Mačok, 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/

Poděkování

Poděkování patří autorům GNU CC, autorům editoru Vi Improved, debuggeru GDB, jeho grafické nadstavby Data Display Debuggeru a především autorům a vývojářům Linuxu a ostatních OpenSource projektů.
