Co wiedzą programy szachowe? (część 1)

źródło: John Cage, Chess Pieces, ca. 1944

Wstęp

Jakiś czas temu podczas dyskusji na Facebooku obiecałem opowiedzieć o funkcjach oceniających programów szachowych – o tym, co wiedzą, czego nie wiedzą i co z tego wynika dla gracza, który korzysta z silnika do analizy. Obawiam się, że taka opowieść musi mieć kilka części. W pierwszej omówię najogólniejsze kryteria, jakie stosuje program, w dalszych będę bardziej szczegółowy.

Przede wszystkim trzeba wiedzieć, że funkcja oceniająca programu szachowego ma za zadanie zwrócić jedną liczbę, określającą ile jest warta dana pozycja. W porównaniu z tym, co robi człowiek, jest to podejście skrajnie uproszczone. Silnik szachowy nie umie myśleć na zasadzie „w tej chwili stoję trochę pasywnie, ale jeśli nic złego się nie stanie, to ruszę pionami na skrzydle hetmańskim” albo „z tak złą strukturą pionów mogę wygrać tylko bezpośrednim atakiem”. Silnik szachowy porównuje liczby. Jest dla niego obojętne, czy dostaje premię za atak na króla przeciwnika, za strukturę pionów czy za lepszą końcówkę. Liczy się suma. Tutaj opowiem, skąd się ona mniej więcej bierze. Wiem o tym z doświadczenia, jako autor programu Rodent, dostępnego pod adresem http://www.pkoziol.cal24.pl/rodent/rodent.htm

Figura na polu

Najprostszy element funkcji oceniającej programu to tzw. piece/square tables – tablice pokazujące, ile jest warta figura na danym polu. Zawierają one najbardziej podstawową wiedzę szachową: że lekkie figury więcej są warte bliżej środka szachownicy, że król początkowo powinien kierować się na skrzydło, a w końcówce do centrum itp. Wartości w tych tablicach odzwierciedlają priorytety: premia za centralizację skoczka jest nieco większa niż w przypadku gońca, hetman nie dostaje żadnego bonusu albo np. 10 razy mniejszy. Największe różnice między programami występują w przypadku skoczków i pionów. Jedne silniki premiują marsz do przodu, inne niekoniecznie.

Program szachowy ma zwykle dwa zestawy takich tablic – do gry środkowej i do końcówki. I tu zaczyna się robić ciekawie. Dawno, dawno temu końcówka zaczynała się dla silników nagle, po wymianie określonej liczby figur. Powodowało to skokową zmianę wartości pozycji króla i bardzo chaotyczną ocenę pozycji w okolicy tego przejścia. Z czasem programiści odkryli, że da się tego bałaganu uniknąć poprzez stopniową zmianę fazy gry i wyciąganie średniej ważonej między dwoma zestawami tablic. Przykładowo w początkowej pozycji korzystamy tylko z wartości dla gry środkowej. Po wymianie pary skoczków proporcja wynosi (według parametrów używanych przez klasyczny program Fruit 2.1):

(22 * wartość dla gry środkowej + 2 * wartość dla końcówki) / 24

Jeśli natomiast wymienione są i skoczki, i hetmany, wówczas Fruit mieszałby wartości już w proporcji 14 do 10. Dzięki tej prostej sztuczce znika punkt przejścia, w którym program zachowuje się jak potłuczony.

Co tu może pójść źle? Generalnie tablice projektowane są tak, żeby dawały sensowny wynik w możliwie dużej liczbie pozycji. Istnieje zatem szansa, że będą one nieprzydatne, a nawet szkodliwe, przy nietypowym układzie figur. Za sprawą tablic premiujących ruch do przodu program może nie doceniać np. jeża czy obrony Pirca – ale i tak ustawi się przeciw nim „zdrowo”. W grze z tego raczej nie skorzystamy, ale warto o tym pamiętać w analizie.

Aktywność figur

Człowiek ocenia aktywność figur intuicyjnie, program musi ją sobie policzyć. Konkretnie – liczy on, na ile pól dana figura może sobie pójść, i na tej podstawie przyznaje premię lub karę. Znowu wartości dla lekkich figur są nieco wyższe, znowu różnicuje się między grą środkową a końcówką (w końcówce rośnie rola aktywności wież i hetmana). Niektóre programy nie dają premii za atakowanie figurami pól bronionych przez piony przeciwnika. Inne różnicują punktację w ten sposób, że różnica między gońcami kontrolującymi 2 i 4 pola jest większa niż między takimi, które by kontrolowały 9 i 11 pól. To wszystko z grubsza naśladuje ludzką intuicję.

Ciekawe jest za to, jak bardzo ten parametr jest ważny. O klasycznym programie Fruit 2.1 już w roku 2006 mówiło się, że „ocenia głównie mobilność figur”. Prawda jest taka, że Fruit miał rzeczywiście stosunkowo niewiele parametrów funkcji oceniającej, były one za to bardzo dobrze dobrane (zrobiłem kilka eksperymentów i wynik poprawek wartości był zwykle dość mizerny). Jedynie w kwestii ataku na króla zdarzało mu się leżeć i kwiczeć. To już jednak historia – w ciągu ostatnich parunastu lat dokonał się naprawdę znacząc postęp, jeżeli chodzi o ocenianie perspektyw ataku.

Atak na króla

Współczesne programy generalnie lubią i potrafią atakować. Często ocena tego elementu gry jest dokonywana przez bardzo rozbudowaną i najdłużej testowaną część programu.

Zwykle robi się to w sposób, który można porównać do zbierania żetonów: program dostaje np. dwa żetony za każde pole w pobliżu króla przeciwnika atakowane przez jego lekką figurę, trzy za taki sam atak wieżą, cztery – za hetmanem… Potem zagląda do specjalnej tabeli, aby sprawdzić, na ile punktów może wymienić te żetony. Tabela jest przy tym skonstruowana tak sprytnie, że na początku zysk za każdy kolejny żeton jest niewielki, potem rośnie szybko, a potem znowu powoli.

Największa zaleta „metody żetonów” jest taka, że można je przyznawać za bardzo różne rzeczy, nie tylko za ataki na 9 czy 12 pól w pobliżu króla (te, na które może się ruszyć + jeszcze trzy w stronę pozycji przeciwnika). Można premiować możliwość dania szacha, dziury w osłonie pionowej wrogiego króla, ilość biorących w ataku figur… W każdym dobrym programie na pewno te wszystkie czynniki zostały sprawdzone, a ich wartości przetestowane do bólu.

Co tu może pójść źle? Program może nie docenić powoli przygotowywanego ataku, który nie zaczyna się od podchodzenia figurami pod jego króla, otwierania linii i grożenia szachami. Powiedzmy, takiego jak w obronie królewsko indyjskiej, gdzie czarne długo przestawiają figury, a potem nagle grają g5-g4. Jednak po pierwsze rozumienie takich pozycji przez silniki poprawia się coraz bardziej, a po drugie nie zawsze łatwo jest do nich doprowadzić.

Analizując z komputerem, warto też pamiętać o jednym zabawnym zjawisku: z ludzkiego punktu widzenia wartości przyznawane przez program za atak są zwykle śmiesznie wysokie. Przykładowo, Stockfish, mogąc zaszachować czarnego króla gońcem na b5 i dodatkowo hetmanem na a4, potrafi przyznać białym bonus w wysokości 0,8 piona. Człowiek wie, że za chwilę zrobi roszadę, i to „zagrożenie” zniknie, więc się nim nie przejmuje. Jednak miliony testowych partii wykazały, że takie śmieszne wartości sprawdzają się lepiej.

To osobliwe zjawisko wynika z tego, że funkcja oceny pozycji nie działa w próżni, ale w powiązaniu z przeszukiwaniem drzewa gry. Funkcja oceniająca nie służy ocenie pozycji na początku wariantu („w korzeniu”), ale na jego końcu, albo, jak mówią programiści, „w liściu”. Takich liści mogą być dziesiątki milionów, a im dłuższy wariant, tym więcej decyzji. Jeżeli więc przeciwnik nie był w stanie wejść na ścieżkę, która likwiduje te „śmieszne” premie, to znaczy, że nie są one „śmieszne”.

Analizując pozycję z komputerem, warto więc pozwolić mu zejść odpowiednio głęboko. Wtedy te wszystkie „śmieszne” wartości nie będą nam przeszkadzać.

(koniec części 1)

O PawelKoziol 3 artykuły
Człowiek o dziwnych zainteresowaniach - poeta, krytyk, historyk literatury, programista i grafik. Autor programu szachowego Rodent, zajmującego ok. 50 miejsca na światowych listach rankingowych (http://www.pkoziol.cal24.pl/rodent/rodent.htm). Sam gra z siłą 1921 Elo.

1 Komentarz

  1. Bardzo interesujące i obrazujące z grubsza co i jak stoi za sztuczna inteligencja 😉 A trafiłem tu przypadkiem po lekturze oszustw za pomocą siników szachowych dziś.

    Pozdrawiam

Dodaj komentarz

Twój adres email nie zostanie opublikowany.


*