* Š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
Obsah
Co program umí?, ... a co neumí?,
Rychlost programu, Nároky na hardware
, Návod k použití, Příkazy,
Formáty souborů, XBOARD,
Dodatky
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,
martin.macok@st.mff.cuni.cz
WWW/download:
kocour.ms.mff.cuni.cz/~macok/
XBOARD: www.research.digital.com
GNUchess: download gnuchess*
Crafty chess engine:
download
DarkThought:
homepage
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ů.