Pytanie:
Czy silnik szachowy powinien być świadomy roszady po przeciwnej stronie?
Tauist
2020-08-11 07:48:11 UTC
view on stackexchange narkive permalink

Często słyszę szachowych ekspertów i artykuły szachowe mówią, że kiedy na szachownicy dochodzi do roszady po przeciwnej stronie, ważne jest, aby jak najszybciej zaatakować wroga. Aż do momentu, w którym rezygnacja z kilku pionków lub figury może być uzasadniona.

Innymi słowy, wygląda na to, że roszada przeciwnych stron zmienia dynamikę gry. Nie jestem pewien, jak duża jest ta zmiana. Oto moje pytanie:

Czy roszada po przeciwnej stronie jest na tyle istotna, że ​​silnik szachowy powinien myśleć o takich pozycjach inaczej niż normalnie?

Na przykład silnik szachowy mógłby obniżyć znaczenie materiału i podnieść znaczenie bezpieczeństwa króla w jego ocenie, gdy występuje przeciwna roszada.

Z pewnością nie jest to rozstrzygające, ale wyszukałem w kodzie sztokfisza terminy „zamek”, „castl”, „przeciwieństwo” i „opp” i nie znalazłem nic związanego z roszadą.
Filozofia podejść opartych na sieciach neuronowych, takich jak Leela, polega na tym, że silnik nie powinien mieć żadnych z góry przyjętych pojęć, ale prawdopodobnie uczyłby się tego rodzaju heurystyk poprzez doświadczenie.
Cztery odpowiedzi:
#1
+35
Allure
2020-08-11 09:12:29 UTC
view on stackexchange narkive permalink

Jestem prawie pewien, że Stockfish nie ma wyraźnego kodu obsługującego roszadę po przeciwnej stronie. Ma to:

  • Jakiś rodzaj „groźby” dla pionków wroga atakujących naszego króla. Im bliżej się zbliżają, tym groźniejszy jest Sztokfisz.
  • Jakiś rodzaj „tarczy pionka” dla przyjaznych pionków przed naszym królem. Im mniej jest, tym groźniejsza jest pozycja Sztokfisza.

W związku z tym pojawia się coś w rodzaju balansowania: jeśli roszujemy po tej samej stronie, moglibyśmy przesunąć nasze pionki przeciwko ich króla (otrzymując „premię za zagrożenie”), ale zmniejszyłoby to naszą tarczę pionka (a tym samym utratę „premii za tarczę pionka”). Odwrotność nie dotyczy roszady po przeciwnej stronie, co w związku z tym zachęca silnik do pchania pionków przeciwko królowi wroga.

Oczywiście szczegóły są bardziej skomplikowane, ale o to chodzi.

„Im bliżej się zbliżają, tym bardziej niebezpieczni są Sztokfiszowie”. To ma sens, prawda? Pionek na swojej pozycji startowej jest zwykle dużo mniej niebezpieczny niż pionek na środku szachownicy.
@Mast tak, tak. Właśnie dlatego mówimy, że Sztokfisz łączy w sobie ludzką wiedzę.
#2
+16
Inertial Ignorance
2020-08-11 08:05:14 UTC
view on stackexchange narkive permalink

Ciekawe pytanie. Myślę, że zależy to od tego, ile oddolnej inteligencji ma silnik. Na przykład, AlphaZero nie otrzymał żadnej wyraźnej heurystyki, ale był w stanie wywnioskować wiele strategii, grając samemu miliony razy i ucząc się w ten sposób.

Silnik z wyraźną heurystyką może również wykazywać dodatkowe strategie, których nie zrobiłeś program do niego. Jako przykład niezwiązany z szachami zaprogramowałem silnik Connect Four z szeregiem heurystyk. Korzystając z nich i swojego algorytmu wyszukiwania, miał tendencję do faworyzowania zlepiania się elementów w środku, gdy nadarzyła się taka możliwość. Chociaż możesz argumentować, że silnik niekoniecznie „rozumie” to oddolne zachowanie, które tutaj robi (czy program naprawdę rozumie cokolwiek robi?), Nadal gra, więc pod każdym względem ceni zbijanie się elementów w środku .

Moim zdaniem, jeśli silnik szachowy jest w stanie wywnioskować jakąś heurystyczną A (lub zachowywać się tak, jakby rozumiał tę heurystykę, nawet jeśli jest to tylko oddolne zachowanie), mając zestaw jawnych heurystyk X, wówczas pytanie sprowadza się do tego, czy można opisać A lepiej, niż silnik zrozumiałby to samodzielnie. Jeśli tworzysz swój własny silnik szachowy, myślę, że najlepiej będzie sformułować wyraźną heurystykę dla roszady po przeciwnej stronie. Jednak w przypadku najlepszych silników nie jestem pewien, czy to robią, z omówionych powodów. Może być trudno zrozumieć zwiększone znaczenie bezpieczeństwa króla bez obliczania daleko do przodu i oglądania burz pionów, więc rozsądne jest myślenie, że te silniki miałyby coś do powiedzenia na temat roszady po przeciwnej stronie.

Twój silnik connect four nie wygląda tak, jakby wywnioskował jakąkolwiek heurystykę. Wygląda na to, że po prostu często obliczał najlepszy ruch, aby znajdować się w pobliżu środka, z którego * następnie * wywnioskowałeś ideę heurystyki, której Twój program w rzeczywistości nie używał.
@user2357112supportsMonica Cóż, program komputerowy musi przestrzegać swojego kodu i nic więcej nie robić. Więc nie może napisać dodatkowego kodu dla dodatkowej heurystyki, ale może zachowywać się tak, jakby miała tę heurystykę. W tym momencie możesz debatować, czy silnik „rozumie” to dodatkowe zachowanie, które wykazuje, i sprowadza się do tego, co w ogóle oznacza zrozumienie. Dla większej przejrzystości zredagowałem drugi akapit.
AFAIK, twój silnik connect four nie wykorzystuje żadnej heurystyki. Stockfish lub podobne silniki mają w programie zakodowane na stałe strategie, nie tylko „zachowują się tak, jakby miały taką heurystykę”. Z drugiej strony, Twój program nie został celowo przeniesiony do centrum. To tylko ty zakończyłeś jego ruchy.
@HighlyRadioactive Mam na stałe zakodowane strategie / heurystyki dla niektórych aspektów Connect Four, ale nie szczególnie dla zbijania elementów w środku. Było to tylko dla analogii do hipotetycznego silnika szachowego, który nie ma wyraźnej heurystyki dla roszady przeciwnej strony (zamiast tego miałby wiele innych heurystyk), ale zachowuje się tak, jakby miał.
Zbrylanie elementów w środku nie jest heurystyką, tylko * zachowaniem *. PO pyta „czy roszada przeciwna powinna być heurystyką”.
@HighlyRadioactive Chodzi o to, że jeśli chcesz, aby coś było zachowaniem (na przykład roszadą po przeciwnej stronie), niekoniecznie musi to być heurystyka.
@InertialIgnorance _ "Moim zdaniem, jeśli silnik szachowy jest w stanie wywnioskować jakąś heurystyczną A, mając zestaw jawnych heurystyk X" _ Przepraszam, ale wyłaniające się zachowanie po prostu nie jest tym samym, co 'wnioskowanie heurystyki'. To, co opisujesz (wnioskując heurystykę), jest czymś znacznie bardziej zaawansowanym, co przypominałoby silnik logiczny lub ogólną sztuczną inteligencję, lub część silnika, który przeprowadza jawną eksplorację danych z poprzednich gier w ramach przygotowań do przyszłych gier. Jednak nie o tym tutaj mowa.
@orlp Słuszna uwaga, zredagowałem to zdanie.
Czy przez „oddolne” masz na myśli „wschodzące”?
AilihfttovCMT Tak.
#3
+7
Tiercelet
2020-08-13 20:13:04 UTC
view on stackexchange narkive permalink

Chciałbym wyraźnie wskazać punkt, na który wskazywały istniejące odpowiedzi.

Pochodzę z AI, a nie z szachów. Typowe podejście do problemów w takich grach polega na traktowaniu gry jako procesu Markowa: systemu, w którym przyszłe stany są (być może probabilistycznie) określane wyłącznie przez stan bieżący, bez potrzeby „pamięć” tego, jak doszło do obecnego stanu. Wszystko, co trzeba wiedzieć, jest reprezentowane w obserwowanym stanie szachownicy.

W tym kontekście silnik szachowy nie musiałby być świadomy żadnej historii. Może gracze po prostu losowo układali pionki na planszy, dopóki nie osiągnęli obecnego stanu planszy: silnik nie wie lub nie dba o to, czy został włączony w trakcie gry, czy cokolwiek innego, nie polega na zapamiętywaniu czyichkolwiek przeszłych ruchów. To ma sens: załóżmy, że twój silnik zwrócił szczególną uwagę na fakt, że nastąpiła roszada po przeciwnej stronie. Jak długo to powinno mieć znaczenie? Czy powinniśmy uczyć się osobnych ocen dla „figury są tutaj, a OSC wydarzyło się [1, 2, 5 ...] tur temu”?

Ludzie grający ludzkimi przeciwnikami mogą rozwinąć model psychologii przeciwnika: może ty może powiedzieć, że uwaga przeciwnika jest skupiona na określonej części planszy lub przewidzieć, co planuje na podstawie ich wcześniejszych ruchów, ich tempa, zdecydowania, z jakim radzi sobie z figurami. Komputer by to rozważył, wymagałoby dodania o wiele za dużo dodatkowej niepewności i przypuszczeń do problemu, który już jest naprawdę trudny tylko z kombinatoryki stanu tablicy - zakładając, że można nawet znaleźć sposób na przekazanie tych czynników komputerowi. A uczenie się na nich oznaczałoby nauczenie się złych danych o pozycji na planszy - ponieważ komputer musiałby oddzielić wyuczony model psychologii swojego (indywidualnego) przeciwnika od wyuczonej oceny tego, jak dobra jest określona pozycja na tablicy. .

Zamiast tego komputer gra jak jeden z tych szachowych mistrzów, który gra z 15 różnymi przeciwnikami naraz: ignorując historię gry i wykonując ruchy w oparciu o to, gdzie jest teraz.

Domyślam się, że szachowi eksperci, do których nawiązujesz, podają heurystykę oceny stanu szachownicy. Teraz można sobie wyobrazić silnik, który patrzy na stany planszy i klasyfikuje je według różnych właściwości: „Wystąpiło OSC”, „[ja / mój przeciwnik] kontroluje [s] środek planszy” itd., A następnie przewiduje ruchy na podstawie tych właściwości jako cechy (aby zmniejszyć przytłaczającą złożoność kombinatoryczną stanów planszy, & przechwytuje niektóre z ich naturalnych symetrii). Masz teraz dwa problemy z nauką: po pierwsze, jak zidentyfikować stan tablicy, który spełnia daną heurystykę; a po drugie, jak używać tego zestawu heurystyk do określenia sposobu gry. To mogło być interesujące dwadzieścia lat temu, ale wygląda na to, że obecny stan wiedzy już minął (chociaż w pewnym sensie dzieje się to w pewnym sensie w silnikach szachowych opartych na sieci neuronowej; ale jak to jest typowe dla sieci neuronowe, my, ludzie, nie rozpoznajemy niczego spójnego w funkcjach, których uczy się w środkowych warstwach sieci).

TL; DR dla wszystkich odpowiedzi: własność Markowa.
@MateenUlhaq tak. Miałem jednak nadzieję, że uda mi się również nieco wyjaśnić, co to jest i jakie jest jego uzasadnienie.
#4
+5
Acccumulation
2020-08-12 11:18:56 UTC
view on stackexchange narkive permalink

Czy roszada po przeciwnej stronie jest na tyle istotna, że ​​silnik szachowy powinien myśleć o takich pozycjach inaczej niż normalnie?

Nie jestem pewien, czy twoje pytanie ma sens. Oczywiście silnik szachowy powinien uwzględniać stan gry. Roszada po przeciwnej stronie jest częścią stanu gry. Więc oczywiście powinno to wpłynąć na ocenę. Ale co to znaczy „myśleć o takich pozycjach inaczej niż normalnie?” Na przykład, silnik wykonuje „ogólną” ocenę, która nie uwzględnia roszady po przeciwnej stronie, a następnie „dodaje” czynnik uwzględniający roszadę po przeciwnej stronie? Co by to oznaczało? To, że była roszada po przeciwnej stronie, jest częścią tego stanowiska. Co by to oznaczało, gdybyśmy ocenili pozycję, gdyby nie fakt, że doszło do roszady po przeciwnej stronie? Myślę, że jeśli twoja podstawowa analiza dotyczy tylko wytrzymałości materiału, a nie pozycji, to dodanie roszady po przeciwnej stronie może być przydatne, ale każdy silnik wystarczająco zaawansowany, aby w ogóle konkurować, już będzie głęboko pozycjonowany.

Podałem przykład obniżenia ciężaru materiału i zwiększenia ciężaru bezpieczeństwa króla jako zmiany, która może być dokonana, gdy nastąpi roszada po przeciwnej stronie. Podobnie do tego, jak silniki używają różnych ocen dla gier końcowych i gier środkowych, pomyślałem, że warto byłoby mieć inną ocenę dla pozycji roszady po przeciwnej stronie, ponieważ słyszałem, że zmienia to dynamikę gry. Jak jednak dowiedziałem się z tego postu, jest to niepotrzebne, ponieważ mogą to wyjaśnić inne heurystyki. Jak zauważył użytkownik Allure, zagrożenie i tarcza pionka.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...