LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Šachové myšlení (11) - Ohodnocovací funkce

Cílem ohodnocovací funkce je jednoduchým způsobem odhadnout pozici, do jaké míry je lepší pro bílého nebo pro černého. Odhad nemusí být dokonalý, ale musí být hodně rychlý.

6.1.2010 10:00 | Jan Němec | Články autora | přečteno 8615×

Jak již víme, šachový program provádí propočet do nějaké hloubky (která je pro různé varianty rozdílná) a koncové pozice odhaduje jednoduchou ohodnocovací funkcí. Ve funkci je zadrátovaná cena figur a poziční cit programu. Ačkoli číselně vyjádřeno rozhodující složkou funkce je materiál, není možné zanedbávat ani poziční složku neboť program obvykle nedopočítá důležité varianty až do matu nebo k rozhodující ztrátě materiálu.

Materiální složka

Nejjednodušší a nejdůležitější je pochopitelně sečíst materiál. Pokud má bílý pěšec cenu 1, bude cena jezdce a střelce přibližně 3, věže 5 a dámy 9. Přesné hodnoty se mohou v jednotlivých programech lišit, například hodnota střelce bývá někdy nepatrně vyšší než hodnota jezdce a podobně. Šachový program s ohodnocovací funkcí degenerovanou na prostý součet materiálu se bude pochopitelně chovat divně. Cesta i od velmi zjevné poziční chyby k vynucené ztrátě materiálu nebo k matu bývá velmi dlouhá, mnohem delší než hloubka propočtu dnešních programů, takže se součtem materiálu si nevystačíme.

Poziční složka

Poziční složka bývá číselně velmi malá, jen zřídka kdy v reálných pozicích z partie přesáhne v absolutní hodnotě cenu pěšce. Zpravidla se počítá průchodem šachovnice a oceněním jednotlivých kamenů. Výsledná cena je pak součet ohodnocení jednotlivých kamenů.

Řadu pozičních faktorů můžeme ocenit statickou tabulkou pro jednotlivá políčka. Například pěšci e2 v základním postavení udělíme postih a po vývinu na e4 bonus, přičemž tento postih a bonus nezávisí na ostatních pozičních faktorech. Poziční složka poskládaná z podobných bonusů a postihů jistě nebude dokonalá, ale zato bude velmi rychlá. V následujícím textu ukážu příklady těchto tabulek ze svého šachového programu s šachovnicí 12x10 (stovky na okrajích jsou prostě jen nevyužité hodnoty) a cenou jednoho pěšce 50. Všechny uvedené tabulky jsou z pohledu bílého, černé kameny oceníme symetricky. Kladné číslo znamená bonus a záporné postih. Hodnoty uvádím jen jako příklady a rozhodně je nelze brát jako nějaké dogma. Právě naopak, ve skutečně kvalitním programu by bylo třeba nějakou pokročilou statistickou metodou hodnoty doladit.

Pěšec

Pro pěšce existuje celá řada heuristik. Ohodnotit můžeme již samotný fakt, že pěšec stojí na nějakém políčku.

/* Pěšec */
{  100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
   100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
   /*     a    b    c    d    e    f    g    h */
   100,   0,   0,   0,   0,   0,   0,   0,   0, 100, /* 1 */
   100,   0,   0,  -1,  -8,  -8,   0,   0,   0, 100, /* 2 */
   100,   1,   1,   1,   4,   4,   0,   1,   1, 100, /* 3 */
   100,   1,   1,   6,   8,   8,   6,   1,   1, 100, /* 4 */
   100,   4,   4,   6,  10,  10,   3,   4,   4, 100, /* 5 */
   100,  10,  10,  10,  15,  15,  10,  10,  10, 100, /* 6 */
   100,  20,  20,  20,  20,  20,  20,  20,  20, 100, /* 7 */
   100,   0,   0,   0,   0,   0,   0,   0,   0 }     /* 8 */

Všimněte si, že je třeba především vyvinout centrální pěšce, na křídlech mohou pěšci zůstat v základním postavení. Pokud se nějakému pěšci podaří postoupit na čtvrtou řadu, bude jej ocenění popohánět dál směrem do dámy. Tabulka se týká zahájení a střední hry, v koncovce by již mohly být jednotlivé sloupce téměř stejné, neboť dominantní úlohou pěšce v koncovce již není boj o prostor a o centrum, zatlačování soupeřových figur a ochrana vlastního krále, atd. atd..., ale docela obyčejný úprk do dámy.

Kromě samotného políčka pěšce musíme ještě ocenit, pokud je volný (tj. žádný soupeřův pěšec mu nebrání v cestě do dámy), krytý jiným pěšcem nebo vedle jiného pěšce téže barvy. Posledně jmenované ocenění je důležité, jinak se bude program snažit vytvořit šikmý pěšcový řetězec - tak jako můj pětiletý syn poté, co pochopil, že se pěšci mohou navzájem krýt. Pěšec může nasbírat i řadu postihů. Špatný je dvoj- a trojpěšec, izolovaný pěšec a dále pěšec opožděný. Přesná definice opožděnosti se může lišit, ale například při pěšcové struktuře bílý: e3, d4 a černý d5 a f5 je bílý pěšec e3 opožděný, neboť nemůže pokračovat dopředu, není krytý pěšcem a soupeř na něj může tlačit po sloupci e. V královské koncovce bez figur bychom měli pomocí známého pravidla čtverce ocenit uteklé pěšce.

Jezdec

Jezdec stojí dobře v centru, naopak v rohu se mu obvykle vůbec nedaří.

/* Jezdec */
{  100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
   100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
   /*     a    b    c    d    e    f    g    h */
   100, -10,  -4,  -3,  -2,  -2,  -3,  -4, -10, 100, /* 1 */
   100,  -5,  -5,  -3,   0,   0,  -3,  -5,  -5, 100, /* 2 */
   100,  -3,   0,   3,   5,   5,   3,   0,  -3, 100, /* 3 */
   100,  -2,   5,   5,   7,   7,   5,   5,  -2, 100, /* 4 */
   100,   0,   5,   6,   8,   8,   6,   5,   0, 100, /* 5 */
   100,   5,   6,   7,   8,   8,   7,   6,   5, 100, /* 6 */
   100,   0,   5,   6,   8,   8,   6,   5,   0, 100, /* 7 */
   100, -10,  -5,  -2,   0,   0,  -2,  -5, -10 }     /* 8 */

Smysl může mít i bonus pro dobře umístěného jezdce krytého pěšcem.

Střelec

Pro střelce už nemusí být ohodnocení tabulkou tak jednoznačné, přesto se o ně můžeme pokusit:

{  100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
   100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
   /*     a    b    c    d    e    f    g    h */
   100,  -5,  -4,  -3,  -2,  -2,  -3,  -4,  -5, 100, /* 1 */
   100,  -5,   6,  -2,   5,   5,  -2,   6,  -5, 100, /* 2 */
   100,   0,   0,   1,   5,   5,   1,   0,   0, 100, /* 3 */
   100,   0,   2,   5,   5,   5,   5,   5,   0, 100, /* 4 */
   100,   0,   5,   6,   8,   8,   6,   5,   0, 100, /* 5 */
   100,   0,   0,   0,   0,   0,   0,   0,   0, 100, /* 6 */
   100,   0,   0,   0,   0,   0,   0,   0,   0, 100, /* 7 */
   100,  -5,   0,   0,   0,   0,   0,   0,  -5 }     /* 8 */

Dobrý střelec by měl mít barvu soupeřových pěšců, aby je mohl napadat. Za každého soupeřova pěšce na poli stejné barvy, jako je pole střelce, tedy můžeme přičíst malý bonus a malý postih za každého pěšce na poli barvy opačné. Výhodou bývá dvojice střelců, tedy 2 střelci jsou o něco cennější než 2 krát cena jednoho. Střelci se daří v otevřených pozicích a podobně jako u jezdce má smysl bonus za dobře umístěného střelce krytého vlastním pěšcem. Bonus bychom měli dát i za vazbu pomocí střelce.

Věž

U věže už statická ohodnocovací tabulka ani nemá smysl. Věž patří na volný nebo polovolný (obsazený soupeřovým pěšcem) sloupec, má tlačit na opožděné nebo prostě jen nekryté pěšce. Obě věže by se měly navzájem krýt. Velmi silnou zbraní bývá tzv. harmonika, tedy zdvojené věže na sedmé řadě respektive druhé řadě v případě černého.

Dáma

Pro dámu je obtížné definovat jakoukoli jednoduchou ohodnocovací heuristiku. Všechny učebnice pro začátečníky uvádějí tragické důsledky předčasného vývinu dámy, soupeř prostě dámu s tempy napadá pomocí běžných vývinových tahů. Ovšem jde spíš o ztrátu času, nedá se obecně říci, že by dáma v zahájení třeba na a4 nebo d4 stála hůř než na d1 a případné napadání dámy vývinovými tahy soupeře snadno odhalí propočet. Stačí tedy program nemotivovat k vývinu dámy a program bude preferovat vývin pěšců a lehkých figur.

Král

V zahájení a střední hře je důležitá bezpečnost krále. Jde jednak o umístění

/* Král */
{  100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
   100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
   /*     a    b    c    d    e    f    g    h */
   100,  10,  15,  13,  -5,   0,  -5,  17,  12, 100, /* 1 */
   100,  -5,  -5, -10, -15, -15, -10,  -5,  -5, 100, /* 2*/
   100, -15, -15, -18, -20, -20, -18, -15, -15, 100, /* 3*/
   100, -30, -30, -30, -30, -30, -30, -30, -30, 100, /* 4*/
   100, -30, -30, -30, -30, -30, -30, -30, -30, 100, /* 5*/
   100, -30, -30, -30, -30, -30, -30, -30, -30, 100, /* 6*/
   100, -30, -30, -30, -30, -30, -30, -30, -30, 100, /* 7*/
   100, -30, -30, -30, -30, -30, -30, -30, -30},     /* 8*/

zachované právo rošády (pozor na umělou rošádu a zapomenutou věž zapomenutou v rohu!), pěšcový kryt krále, počet napadených polí v okolí a podobně. V koncovce se role krále radikálně mění, stává se z něj aktivně bojující figura, která musí opustit úkryt a bojovat o střed.

   /* Král v koncovce */
{  100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
   100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
   /*     a    b    c    d    e    f    g    h */
   100, -20, -15, -12, -10, -10, -12, -15, -20, 100, /* 1 */
   100, -15, -12,  -7,   0,   0,  -7, -12, -15, 100, /* 2*/
   100, -12,  -7,   1,   5,   5,   1,  -7, -12, 100, /* 3*/
   100, -10,   0,   5,  10,  10,   5,   0, -10, 100, /* 4*/
   100, -10,   0,   5,  10,  10,   5,   0, -10, 100, /* 5*/
   100, -12,  -7,   1,   5,   5,   1,  -7, -12, 100, /* 6*/
   100, -15, -12,  -7,   0,   0,  -7, -12, -15, 100, /* 7*/
   100, -20, -15, -12, -10, -10, -12, -15, -20},     /* 8*/

V matící koncovce se pak král silnější strany snaží přiblížit soupeřovu králi. Specifická je koncovka krále, jezdce a střelce proti samotnému králi. Mat lze sice nastavit kdekoli při okraji šachovnice, ale proti rozumné obraně je možné jej vynutit pouze v rohu barvy střelce. Při bělopolném střelci tedy tlačíme krále do rohu s bílým políčkem a naopak.

   /* Král tlačený do bíleho rohu */
{
   100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
   100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
   /*     a    b    c    d    e    f    g    h */
   100, -10,  -8,  -6,  -4,  -2,   0,   1,   2, 100, /* 1 */
   100,  -8,  -6,  -3,  -1,   2,   2,   3,   1, 100, /* 2*/
   100,  -6,  -3,   0,   2,   3,   5,   1,   0, 100, /* 3*/
   100,  -4,  -1,   2,   9,  11,   3,   0,  -2, 100, /* 4*/
   100,  -2,   0,   3,  11,   9,   2,  -1,  -4, 100, /* 5*/
   100,   0,   1,   5,   3,   2,   0,  -3,  -6, 100, /* 6*/
   100,   1,   3,   1,   0,  -1,  -3,  -6,  -8, 100, /* 7*/
   100,   2,   1,   0,  -2,  -4,  -6,  -8, -10 }     /* 8*/

Ohodnocovací funkce napsaná pomocí statických tabulek je velmi rychlá, ale má jednu vážnou slabinu. Tabulky jsou napsány obecně, mohou tedy být docela dobré pro běžnou pozici, ale stačí několik netypických tahů a správné ohodnocení políček například pro jezdce může být úplně jiné. Řešením je místo samotného pole oceňovat pohyblivost figur, oceňovat pole, která figury napadají a podobně. To vše je ovšem za cenu vyšší časové náročnosti.

Doporučené techniky

Alfa-beta prořezání

Pokud mám o figuru méně, nemá cenu posuzovat poziční jemnosti, jako třeba opožděné pěšce. V programu založeném na alfa-beta metodě předáme ohodnocovací funkci parametry alfa a beta a jakmile bude zřejmé, že výsledek nebude v intervalu (alfa, beta), ukončíme výpočet a vrátíme příslušnou mezní hodnotu. Výsledek ohodnocovací funkce můžeme odhadnout, jako materiální složka + poziční složka z rodiče ve stromu propočtu +- malé epsilon. Vhodná doba pro test a případné ukončení je hned na začátku po prostém sečtení materiálu nebo i později před jakýmkoli složitějším výpočtem.

Inkrementální výpočet

Řadu faktorů můžeme počítat inkrementálně. V kořeni propočtu provedeme nějakou analýzu pozice a vypočteme plnohodnotnou ohodnocovací funkci nebo nějakou její složku. S každým tahem od kořene dále v propočtu pak jen dopočítáme změnu této složky. Nejjednodušší je to v případě materiální složky. Na začátku prostě sečteme materiál for cyklem přes políčka šachovnice. Při tahu v propočtu pak jen přičteme změnu materiálu v důsledku tohoto tahu. Obvykle to bude 0, jen braní a proměny pěšce mají změnu nenulovou. V listech propočtu si už můžeme for cyklus přes políčka ušetřit. Na podobném principu funguje i inkrementální výpočet poziční složky. Při tahu Jg1-f3 přičteme hodnotu jezdce na f3 a odečteme tu z g1. Inkrementální výpočet poziční složky se obvykle kombinuje s nastavením tabulek (například právě poziční hodnota jezdce na jednotlivých polích) ohodnocovací funkce v kořeni propočtu podle aktuální pozice. Není to ideální, neboť charakter pozice se na cestě od kořene do listu může změnit, ale pořád je to přesnější než globální statické ohodnocovací tabulky. Nevýhodou uvedeného řešení je závislost ohodnocovací funkce na výchozí pozici propočtu. Konkrétním nepříjemným důsledkem je třeba nutnost vyprázdnit hašovací tabulky po každém tahu v partii (změna kořene).

Hašování pěšcové struktury

Časově náročné je ohodnocení struktury pěšců. Nalezení všech dvojpěšců, slabých pěšců a podobně je přeci jen o dost náročnější než prostý průchod for cyklem přes šachovnici, který používáme u jednodušších pozičních faktorů. Naštěstí se pěšcová struktura mění v průběhu propočtu jen málo a v řadě pozic z propočtu se dokola opakuje jen několik rozložení pěšců. Pěšcovou strukturu tedy můžeme hašovat. Postupovat lze přesně stejně jako v případě hašování výsledků propočtů podstromů. Tedy dvě inkrementálně počítané hašovací funkce F a G, jedna pro umístění do tabulky, druhá pro kontrolu. Jedinou změnou je, že funkce obě závisí pouze na rozložení pěšců a ukládáme cenu pěšcové struktury.

Několik rad

  • Nesnažte se o dokonalou ohodnocovací funkci, funkce musí být rychlá heuristika, nemá nahrazovat propočet
  • Nepřeceňujte poziční složku, nejdůležitější je materiál. Pokud váš program požírá otrávené pěšce, zatímco soupeř chystá matový útok, nemusí to být jen chyba ohodnocovací funkce.
  • Pozor na neutralitu pozičních bonusů a postihů. Pokud například u střelce budou převažovat bonusy nad postihy, výpočet poziční složky pak do jisté míry supluje výpočet materiálu se všemi negativními důsledky.
  • Pozor na související faktory, neoceňujte jednu věc dvakrát, pokaždé jiným způsobem.
  • Napište si automatické testování nebo dokonce dolaďování pozičních faktorů.
  • Pokud to s programováním šachů myslíte vážně, prohlédněte si ohodnocovací funkci nějakého silného open source programu.

Pokračování příště

V příštím dílu si napíšeme knihovnu zahájení.

Verze pro tisk

pridej.cz

 

DISKUZE

Komentář 12.1.2010 23:14 Karl von Neklbaur




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

14.11.2017 16:56 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tradičně první čtvrtek před třetím pátkem v měsíci: 16. listopadu od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.11.2017 11:06 /Redakce Linuxsoft.cz
PR: 4. ročník odborné IT konference na téma Datová centra pro business proběhne již ve čtvrtek 23. listopadu 2017 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00. Konference o návrhu, budování, správě a efektivním využívání datových center nabídne odpovědi na aktuální a často řešené otázky, např Jaké jsou aktuální trendy v oblasti datových center a jak je využít pro vlastní prospěch? Jak zajistit pro firmu či jinou organizaci odpovídající služby datových center? Podle jakých kritérií vybrat dodavatele služeb? Jak volit součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně spravovat datové centrum? Jak eliminovat možná rizika? apod.
Přidat komentář

13.9.2017 8:00 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tentokrát netradičně v pondělí: 18. září od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

3.9.2017 20:45 /Redakce Linuxsoft.cz
PR: Dne 21. září 2017 proběhne v Praze konference "Mobilní řešení pro business". Hlavní tématy konference budou: nejnovější trendy v oblasti mobilních řešení pro firmy, efektivní využití mobilních zařízení, bezpečnostní rizika a řešení pro jejich omezení, správa mobilních zařízení ve firmách a další.
Přidat komentář

15.5.2017 23:50 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

1.5.2017 20:31 /Pavel `Goldenfish' Kysilka
PR: 25.5.2017 proběhne v Praze konference na téma Firemní informační systémy. Hlavními tématy jsou: Informační systémy s vlastní inteligencí, efektivní práce s dokumenty, mobilní přístup k datům nebo využívání cloudu.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

15.12.2017 15:11 / Petit
freehold nj

15.12.2017 15:06 / Petit
nj freehold

5.12.2017 11:50 / Thomas
kitchen renovations

18.9.2017 14:37 / Rojas
high security vault

15.9.2017 7:33 / Wilson
new zealand childcare jobs

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2017) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze