Jaki jest stan techniki w komputerowym wyszukiwaniu drzewa szachowego?

Nie interesują mnie małe optymalizacje dające kilka procent prędkości. Interesuje mnie najważniejsza heurystyka w poszukiwaniach alfa-beta. I najważniejsze elementy funkcji oceny.

Szczególnie interesują mnie algorytmy, które mają największy stosunek (improvement/code_size). (Nie (Poprawa/złożoność)).

Dzięki.

PS Heurystyka Killer move to doskonały przykład-łatwy do wdrożenia i potężny. Baza danych heurystyki jest zbyt skomplikowane.

Author: RoadWarrior, 2009-02-07

8 answers

Nie wiem, czy już o tym wiesz, ale zajrzyj do Chess Programming Wiki - jest to świetny zasób, który obejmuje prawie każdy aspekt współczesnej si szachowej. W szczególności, dotyczące Twojego pytania, zobacz sekcje wyszukiwania i oceny (w tematach zasad) na stronie głównej. Możesz również odkryć kilka ciekawych technik stosowanych w niektórych programach wymienionych tutaj . Jeśli na twoje pytania nadal nie ma odpowiedzi, zdecydowanie polecam zapytać w Forum programistyczne , na którym prawdopodobnie znajdzie się o wiele więcej specjalistów, którzy odpowiedzą. (Nie to, że niekoniecznie dostaniesz tu dobre odpowiedzi, tylko to, że jest to raczej bardziej prawdopodobne na forach ekspertów dotyczących konkretnych tematów).

 13
Author: Noldorin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-07 12:54:14

MTD (f) lub jeden z wariantów MTD jest dużym ulepszeniem w stosunku do Standardowej alfa-beta , pod warunkiem, że nie masz naprawdę drobnych szczegółów w swojej funkcji oceny i zakładając, że używasz zabójczej heurystyki . Przydatna jest również heurystyka historii .

Najwyżej oceniany program szachowy Rybka najwyraźniej porzucił MDT(f) na rzecz PVS z zerowym oknem aspiracji na węzłach innych niż PV.

Extended daremne przycinanie, które obejmuje zarówno zwykłe daremne przycinanie, jak i głębokie maszynki do golenia, jest teoretycznie niewłaściwe, ale niezwykle skuteczne w praktyce.

Iteracyjne pogłębienie jest kolejną użyteczną techniką. I wymieniłem tutaj wiele dobrych linków do programowania szachów.

 4
Author: RoadWarrior,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:19:32

Chociaż wiele optymalizacji opartych na heurystyce (mam na myśli sposoby zwiększenia głębokości drzewa bez faktycznego przeszukiwania) omawianych w literaturze programowania szachowego, myślę, że większość z nich jest rzadko używana. Powodem jest to, że są to dobre wzmacniacze wydajności w teorii, ale nie w praktyce.

Czasami te heurystyki mogą zwrócić zły (znaczy nie najlepszy) ruch też.

Ludzie, z którymi rozmawiałem, zawsze zalecają optymalizację wyszukiwania alfa-beta i wdrożenie iteracyjne zagłębiając się w kod zamiast próbować dodać inne heurystyki.

Głównym powodem jest to, że komputery zwiększają moc obliczeniową, a badania [jak sądzę potrzeba cytowania] wykazały, że programy, które wykorzystują swój pełny czas procesora, aby zmusić drzewo Alfa-beta do maksymalnej głębokości, zawsze wyprzedzały programy, które dzieliły swój czas między pewne poziomy alfa-beta, a następnie niektóre heurystyki.

Mimo zastosowania heurystyki do wydłużenia głębokości drzewa może spowodować więcej szkody niż pożytku, ther jest wiele boostery wydajności można dodać do algorytmu wyszukiwania alfa-beta.

Jestem pewien, że jesteś świadomy, że aby alfa-beta działała dokładnie tak, jak ma działać, powinieneś mieć mechanizm sortowania ruchu (iteratywne pogłębienie). Iteracyjne pogłębienie może dać około 10% zwiększenia wydajności.

Dodanie głównej odmiany techniki searc h do alpha beta może dać dodatkowe 10% doładowania.

Spróbuj MTD(f ) również algorytm. Może również zwiększyć wydajność silnika.

 2
Author: Niyaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-07 16:09:42

Jeden heurystyczny, który nie został wymieniony, to Null move .

Ed Schröder ma również świetną stronę wyjaśniającą kilka sztuczek, których użył w swoim silniku Rebel, i jak wiele ulepszeń przyczyniło się do szybkości/wydajności: Inside Rebel

 1
Author: Imran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-10 01:18:41

Użycie tabeli transpozycyjnej z zobrist hash

Potrzeba bardzo mało kodu do zaimplementowania [jeden XOR przy każdym ruchu lub unmove, i instrukcja if przed rekurencją w drzewie gry], a korzyści są całkiem dobre, zwłaszcza jeśli używasz już iteracyjnego pogłębienia i jest to dość poprawialne (użyj większej tabeli, mniejszej tabeli, strategii zastępczych itp.)]}

 1
Author: FryGuy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-11 00:31:12

Zabójcze ruchy są dobrym przykładem małego rozmiaru kodu i znacznej poprawy w porządkowaniu ruchów.

 0
Author: Łukasz Lew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-07 16:20:36

Większość algorytmów sztucznej inteligencji gier planszowych opiera się na http://en.wikipedia.org/wiki/Minmax MinMax. Celem jest zminimalizowanie ich opcji przy jednoczesnej maksymalizacji opcji. Chociaż w przypadku szachów jest to bardzo duży i kosztowny problem runtime. Aby to zmniejszyć, możesz połączyć minmax z bazą danych wcześniej rozegranych gier. Każda gra, która ma podobną pozycję na planszy i ma ustalony wzór, w jaki sposób ten układ został wygrany dla Twojego koloru, może być używana tak daleko, jak "analizowanie", gdzie się przenieść następny.

Jestem trochę zdezorientowany co masz na myśli przez improvement / code_size. Czy naprawdę masz na myśli poprawę / analizę runtime (big O(n) vs. o (n))? Jeśli tak jest, porozmawiaj z IBM i big blue lub zespołem Microsoft Parallels. Na PDC rozmawiałem z facetem (którego nazwisko Mi umyka), który demonstrował Mahjonga używając 8 rdzeni na przeciwnika i zdobył pierwsze miejsce w konkursie projektowania algorytmów gry (którego nazwisko również umyka mnie).

Nie wydaje mi się, żeby były jakieś "konserwowe" algorytmy tam zawsze wygrać szachy i zrobić to bardzo szybko. Sposób, w jaki musiałbyś to zrobić, to mieć każdą możliwą wcześniej zagraną grę zindeksowaną w bardzo dużej bazie danych opartej na Słowniku i wstępnie buforowaną analizę każdej gry. Byłby to algorytm bardzo compex i byłby bardzo słabym problemem poprawy / złożoności moim zdaniem.

 0
Author: jwendl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-07 17:51:47

Mogę być nieco poza tematem, ale "state of the art" programy szachowe używają MPI, takich jak Deep Blue dla ogromnej równoległej mocy.

Wystarczy wziąć pod uwagę niż równoległe przetwarzanie odgrywa wielką rolę we współczesnych szachach

 0
Author: Eric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-10 01:28:41