Rozumiem, że nie chce Wam się zajmować programem, który działa tak wolno. Ale dokonałem pewnego odkrycia, które znacznie przyspieszy dorbana. To delikatna kwestia, ale pozwolę sobie na takie porównanie - odkryłem coś w rodzaju "religii" dla moich inteligentnych agentów.
Dzisiaj zrobiłem release nowego Svaroga (wersja 0.0.4), która potrafi z normalnej specyfikacji zrobić specyfikację zawierającą "prekalkulowaną wiedzę" w formie reguł, W praktyce piszemy najpierw specyfikację, a potem zapuszczamy komputer na kilka dni żeby ją przeanalizował. W rezultacie mamy zbiór reguł postaci:
<stan_widoczny> x <belief> -> <optymalna_akcja>
Ten pierwszy zbiór jest niewielki, w przypadku dorbana zawiera 120 elementów. Drugi (zbiór beliefów) jest niestety ciągły i, zależnie od ilości możliwych stanów dla danego stanu widocznego jest n-wymiarową hiperkulą. Wpadłem na pomysł, żeby go zdyskretyzować. Na przykład dla trzech stanów i parametru, który nazywam granularity (ziarnistość) o wartości 2 mamy następujące punkty w tej hiperkuli:
(0,0,1)
(0,1,0)
(0,1,1)
(1,0,0)
(1,0,1)
(1,1,0)
(1,1,1)
Właściwie to jest hiperkostka (hypercube), akurat tutaj trójwymiarowa. Po normalizacji (bo beliefy są rozkładami) otrzymujemy:
(0.0,0.0,1.0)
(0.0,1.0,0.0)
(0.0,0.5,0.5)
(1.0,0.0,0.0)
(0.5,0.0,0.5)
(0.5,0.5,0.0)
(0.33,0.33,0.33)
Czyli w tym wypadku wystarczy siedem reguł, żeby pokryć całą trójwymiarową kostkę dla danego stanu widocznego.
Niestety zdarza się, że ilość możliwych stanów jest tak duża, że nawet dyskretyzacja nie pomaga. Wówczas Svarog zaznacza, że dany stan widoczny jest zbyt złożony (too complex). Wtedy żadnych reguł nie generuje, ale to nic nie szkodzi.
Nazywam to "religią" bo moje reguły zawierają tylko informację o optymalnej akcji, bez żadnego uzasadnienia, ale obliczoną dla dużej głębokości drzewa gry (właśnie teraz mój komputer liczy tą prekalkulowaną wiedzę dla głębokości drzewa gry 4). Jeżeli sobie ściągniecie nowego Svaroga - https://github.com/pawelbiernacki/svarog wówczas w katalogu examples znajdziecie plik example6_precalculated.svarog. On zawiera właśnie taką prekalkulowaną wiedzę, niestety tylko dla głębokości 1.
Po dyskretyzacji zbioru beliefów mamy pewną ilość reguł z n-wymiarowymi punktami reprezentującymi beliefy. Łatwo więc w trakcie planowania użyć kartezjańskiej miary dystansu od prawdziwego beliefu, na przykład dla trójki (0.25,0.25,0.5) najbliższy będzie punkt (0.33,0.33,0.33).
Taka specyfikacja z prekalkulowaną wiedzą jest wprawdzie spora, example6_precalculated.svarog zawiera 2144863 bajtów czyli trochę ponad dwa mega, ale dobra wiadomość jest taka, że już nie urośnie (po zwiększeniu głębokości drzewa gry, czyli "inteligencji"). Czyli dla dowolnej specyfikacji Svaroga możemy kazać komputerowi prekalkulować wiedzę (wygenerować nową specyfikację z tymi regułami) i choćby to trwało miesiąc - za to w czasie wykonania svarog (a więc i dorban) będzie śmigał.
Przepraszam, że piszę w sumie sam do siebie. Chciałem tylko powiedzieć, że kiedy skończę obliczenia udostępnię dorbana 0.0.1, który będzie dużo szybszy. Wtedy będziemy mogli skupić się na sensie całego eksperymentu.