Przykład

Statistello

Przykładowe zastosowanie HL++ – wykorzystanie do przygotowania programu grającego w Othello (gra znana również pod nazwą Reversi). Zasady gry są bardzo proste. Plansza 8×8 i dwukolorowe krążki w kolorze czarnym i białym. Na początku każdy z graczy ma dwa krążki na środku planszy.

Ilustracja 1. Pozycja początkowa w grze

Każdy ruch zmienia kolor krążków przeciwnika, które znajdują się pomiędzy naszymi krążkami a dołożonym dyskiem. Wygrywa ten, kto ma więcej własnych dysków, gdy cała plansza jest zapełniona.

Strategie graczy skupiają się na tym, aby nie pozwolić przeciwnikowi na zajęcie narożników. Dysk w rogu jest ważny, ponieważ jego kolor nie może być zmieniony. Gracz, który jako pierwszy zajmie róg, zazwyczaj wygrywa.

Ilustracja 2. Przykładowa pozycja po sześciu ruchach

W przypadku programu Statistello, ocena pozycji jest bardziej złożona. Pod uwagę branych jest 10 różnych cech pozycji, takich jak mobilność, zwartość, trwałość i parzystość (możliwość dodania dysków w ostatniej chwili). Oceniane są również wzorce, czyli rozmieszczenie dysków wokół narożników i ścian. Sposób oceny określił sam program, rozgrywając wiele partii sam ze sobą, zaczynając jedynie od podstawowych zasad. (Podobną metodę zastosowano w projekcie Google „Alpha zero”, gdy przygotowywano programy grające w go i szachy). Zebrane w ten sposób dane posłużyły do oszacowania parametrów modeli regresji oceniających sytuację na planszy. Program ma 7 „osobowości”, które różnią się stylem gry. Od najprostszej „zachłannej”, która stara się zdobyć jak najwięcej krążków w danym momencie, nie dbając o to, co będzie dalej, do „mistrzowskiej”, która gra optymalnie, aby uzyskać największą przewagę na koniec gry. Za każdą „osobowością” kryje się 60 modeli, które są aktywowane w różnych fazach gry.

Ilustracja 3. Pozycja końcowa – czarne wygrały

Program nie tylko ocenia aktualną sytuację, ale również przewiduje, co się stanie kilka ruchów do przodu. Zdolność przewidywania jest określana przez parametr „Poziom trudności”. Poziom 1 to przewidywanie 2 ruchów do przodu, a każdy następny poziom to kolejne 2 ruchy do przodu. Poziom 6 to przewidywanie 12 ruchów do przodu. Na wysokim poziomie program gra bardzo dobrze i jest trudnym przeciwnikiem nawet dla profesjonalnych graczy. Do przewidywania ruchów wykorzystywane są specjalne algorytmy działające na strukturze drzewa (alfa-beta i MTDf).

Modelowanie dziedziny silnika decyzyjnego

Obiekt 'table’ reprezentuje planszę do gry. W celu zmniejszenia zużycia pamięci i zwiększenia szybkości działania nie jest stosowana zwykła tablica 8×8 (64 liczby), lecz cała tablica jest przechowywana w postaci tylko 2 liczb, a operacje są wykonywane na pojedynczych bitach pamięci. 'Table’ udostępnia podstawowe funkcje, natomiast inne funkcje, których nie da się zaimplementować za pomocą operacji bitowych, znajdują się w obiekcie wyższego poziomu zwanym 'board’.

Obiekt 'move’ przechowuje informacje o pojedynczym ruchu (gdzie został położony krążek). Zbiór możliwych ruchów jest zebrany w obiekcie 'move_list’. Wraz z obiektem 'board’ obiekty 'move’ i 'move_list’ tworzą strukturę drzewa ruchów, niezbędną do przewidywania dalszych ruchów.

Główny obiekt 'othello’ steruje całą grą pomiędzy człowiekiem a programem. Pozwala on na definiowanie parametrów gry (np. kolor gracza, poziom trudności, rodzaj „osobowości” programu) oraz na prowadzenie gry (np. rozpoczęcie nowej gry, wywołanie ruchu gracza, wywołanie ruchu komputera). W obiekcie 'othello’ zaimplementowane są zmienne oceniające pozycję na planszy, kompleksowe funkcje oceniające (tzn. modele regresji na podstawie zmiennych) oraz algorytmy przeszukujące drzewo kolejnych ruchów w celu znalezienia optymalnego wariantu gry i najlepszego ruchu. Obiekt zawiera również funkcje służące do samouczenia i estymacji parametrów modeli regresyjnych, generowania baz danych otwarć oraz uruchamiania turniejów porównujących siłę różnych modeli.

Obiekt 'list’ jest obiektem pomocniczym, przechowującym współrzędne komórek, wykorzystywane przez zmienną objaśniającą 'parity’ do znajdowania na planszy spójnych obszarów jednego koloru.

Obiekt 'game’ przechowuje grę (wszystkie ruchy po kolei), pozwala na poruszanie się po niej oraz umożliwia operowanie na plikach gry (pliki z rozszerzeniem 'gam’).

Instalator programu Statistello: