Chociaż analiza bayesowska obejmuje znacznie więcej, algorytm Naive Bayes, dobrze znany z filtrów spamowych, opiera się na jednym bardzo podstawowym założeniu: wszystkie zmienne są zasadniczo niezależne od siebie. Na przykład, w filtrowaniu spamu każde słowo jest zwykle traktowane jako zmienna, więc oznacza to założenie, że jeśli wiadomość zawiera słowo "viagra", wiedza ta wpływa na prawdopodobieństwo, że będzie zawierała również słowo "medycyna" (lub "foo"). "lub" spam "lub cokolwiek innego). Ciekawe jest to, że założenie to jest oczywiście fałszywe, jeśli chodzi o język naturalny, ale wciąż udaje mu się uzyskać rozsądne wyniki.
Jednym ze sposobów, w jaki ludzie czasami omijają założenia dotyczące niezależności, jest definiowanie zmiennych, które są technicznie kombinacjami rzeczy (np. Wyszukiwanie tokena "kup viagrę"). To może zadziałać, jeśli znasz konkretne przypadki, ale ogólnie rzecz biorąc, w środowisku gry oznacza to, że nie możesz na ogół niczego zapamiętać. Tak więc za każdym razem, gdy musisz się ruszać, wykonywać akcję, itd., Całkowicie niezależnie od wszystkiego, co dotychczas robiłeś. Powiedziałbym, że nawet w przypadku najprostszych gier jest to bardzo nieefektywny sposób nauki gry.
Proponuję zamiast tego skorzystać z funkcji q-learning. Większość przykładów znajdziesz zazwyczaj w zwykłych grach (jak nauka nawigacji po mapie przy jednoczesnym unikaniu murów, pułapek, potworów itp.). Uczenie się wzmacniające jest rodzajem uczenia się bez nadzoru, które sprawdza się bardzo dobrze w sytuacjach, które mogą być modelowane jako agenci współdziałające ze środowiskiem, takim jak gra (lub roboty). Robi to, próbując dowiedzieć się, jakie jest optymalne działanie w każdym stanie w środowisku (gdzie każdy stan może zawierać tyle zmiennych, ile potrzeba, znacznie więcej niż tylko "gdzie jestem"). Sztuczka polega więc na utrzymywaniu stanu, który pomaga botowi w podejmowaniu właściwych decyzji bez posiadania wyraźnego punktu w "przestrzeni" państwa dla każdej możliwej kombinacji poprzednich działań.
Mówiąc w bardziej konkretny sposób, gdybyś zbudował bota szachowego, prawdopodobnie miałbyś problemy, gdybyś próbował stworzyć strategię decyzyjną, która podejmowała decyzje w oparciu o wszystkie wcześniejsze ruchy od zestawu wszystkich możliwych kombinacji szachów. ruchy rosną bardzo szybko. Nawet prostszy model, w którym każdy element jest na planszy, wciąż jest bardzo dużą przestrzenią stanów, więc musisz znaleźć sposób na uproszczenie tego, co śledzisz. Zauważ jednak, że możesz śledzić stan, aby Twój bot nie tylko próbował wrzucać go do ściany na raz.
Wikipedii article jest dość żargon ciężki, ale ten tutorial ma o wiele lepszą pracę przekładając koncepcje na rzeczywistych przykładów.
Jeden połów polega na tym, że musisz mieć możliwość zdefiniowania nagród jako pozytywnego "wzmocnienia". Trzeba umieć definiować stany, do których próbuje dotrzeć bot, w przeciwnym razie będzie to trwać wiecznie.
Brzmi świetnie. W jakim języku? – Trevoke
Robi to w Pythonie, korzystając z powiązań Python NetHack. – danieltalsky
Korekta: napisał wiązania Pythona. – danieltalsky