Nie wiem, jak dokładnie zrobiło to 20Q, ale jest mnóstwo informacji na temat implementacji gry złożonej z 20 pytań .
Istnieje wiele sposobów rozwiązania tego problemu, ale opiszę jeden ze sposobów. Te gry mogą implementować drzewo decyzyjne . W przypadku gry elektronicznej, takiej jak 20Q, drzewo to byłoby wstępnie obliczone i dość łatwe do przejścia. Istnieją metody korzystania z drzew decyzyjnych uczenia się, w których gra może przyjmować nowe obiekty na końcu pytań, jeśli nie jest w stanie odgadnąć, o co pyta użytkownik.
Kiedy pytania są serią odpowiedzi tak lub nie, powstaje drzewo binarne. Każdy węzeł jest pytaniem, a liście są odpowiedziami. Gdy odpowiedzi na pytania są nieznane lub nie są pewne, węzły potomne można łączyć, a ich pytania zadawać szeregowo, aby dodatkowo wyeliminować możliwe odpowiedzi.
Zasadniczo jest to proces:
- Zacznij od pełnej listy obiektów. Wszystkie mogą rozpocząć się z jednakowym prawdopodobieństwem lub można je posortować według prawdopodobieństwa, że obiekt zostanie wybrany podczas testowania.
- Zacznij od pierwszego pytania w drzewie decyzyjnym. Wciśnij w kolejkę pytań.
- Zadaj pytanie na górze kolejki.
- Odpowiedź procesu:
- Tak / Brak odpowiedzi usuwa / dodaje z góry określoną wartość prawdopodobieństwa dla każdej odpowiedzi na podstawie pytania.
- Odpowiedź „Być może” usuwa / dodaje ułamek z góry określonej liczby „tak”.
- „Unknow” nie zmienia prawdopodobieństw
- Odpowiedź „Nieznany” lub „Być może” wypycha pytania z kolejnych węzłów do kolejki pytań. Odpowiedź „Tak” lub „Nie” dodaje tylko jeden odpowiedni węzeł tak / nie do kolejki pytań.
- Przejdź do kroku 3, aż liczba pytań lub prawdopodobieństwa pojedynczej odpowiedzi nie przekroczy ustalonego progu „pewności”.
- Podaj najbardziej prawdopodobną odpowiedź.
Generowanie drzewa jest prawdopodobnie tematem innego pytania. Ale w zasadzie to wybór pytań, które dzielą odpowiedzi tak bardzo, jak to możliwe. Umieść pytania, które dzielą pytania w jednakowy sposób na początku, aby jak najwięcej pytań można było szybko usunąć.
Poszukałem „kodu 20q” i znalazłem to: http://mosaic.cnfolio.com/B142LCW2008A197
Ta wersja jest tylko dla zwierząt, ale faktyczne 20 pytań prawdopodobnie ma podobny algorytm.
Oto krótki przegląd kodu, który podłączyłem:
Istnieje kilka różnych odpowiedzi zakodowanych na stałe w programie. Następnie przypisuje się im kilka atrybutów PRAWDA lub FAŁSZ:
Jak widać pszczoła nie jest ssakiem, ale lata, itp.
Dla każdej grupy istnieje tablica:
Kiedy zadawane jest każde pytanie:
Program analizuje definicję odpowiedniej kategorii i śledzi, które zwierzę jest najprawdopodobniej tym, o którym myślisz, na podstawie wartości PRAWDA lub FAŁSZ oraz wprowadzonej odpowiedzi Tak lub Nie na pytanie.
Odbywa się to w:
źródło
To nie jest ogromne drzewo decyzyjne ani wiązka zakodowanych instrukcji if / else. Robin Burgener, wynalazca, całkowicie udokumentował swój algorytm w swoim zgłoszeniu patentowym z 2005 roku. To genialnie proste.
źródło