Pytanie:
Dlaczego Sztokfisz Lichess nie sugeruje ofiary biskupa?
Aloizio Macedo
2020-06-02 23:06:47 UTC
view on stackexchange narkive permalink

W grze online doszedłem do następującej pozycji po tym, jak przeciwnik zostawił hetmana wiszącego.

  [FEN "r1b2r2 / pp1p1ppk / 2n1p3 / 6B1 / 2P5 / 5N2 / PQ3PPP / R4RK1 w - - 0 16 "]  

W grze grałem 16. Gf6 z myślą, że jeśli zaakceptuje ofiarę, moja hetman może przyjść do odsłoniętego króla z pomysłami i możliwością krycia zamiany wieży na skoczka i prawdopodobnie powinienem być w stanie dotrzeć z wieżami, podnosząc je wcześniej, niż jego pomniejsze figury są w stanie znacznie pomóc. Jeśli przeciwnik odmówi, mój goniec wciąż jest na dobrej drodze i mam możliwość wysadzenia królewskiego boku z dużą przewagą.

Spojrzałem na partię lichess 'Stockfisha, aby sprawdzić, czy to był błąd a główne linie, które sugeruje mi lichess 'Stockfish, to 16. Be3, 16. Hc2 +, 16. Sd2, 16. c5 i 16. Qa3, pierwsza linia ma ocenę +12.8. Gf6 nie jest sugerowane, ale po zagraniu ma ocenę +18.0, więc zastanawiałem się, dlaczego nie sugeruje Gf6 w pierwszej kolejności. Domyślam się, że być może Stockfish nie rozważa ruchów ofiarnych bez wymuszonej przewagi, jeśli gracz ma dużą przewagę, co wydaje się rozsądne, ale to tylko przypuszczenie.

Przeprowadzenie analizy na chess.com z Silnik Komodo sugeruje Bf6 jako najlepszy ruch, z oceną +11,6, więc jeszcze bardziej zaciekawiło mnie, dlaczego Stockfish nawet tego nie rozważa.

Podejrzewam, że silniki przeszły znacznie mniej szkolenia na pozycjach, które wyraźnie wygrywają po jednej stronie, ponieważ jest tam mniejsze zainteresowanie.
Oceny silnika powyżej +10 są zawsze rozmyte. Nie interpretuj w nich zbyt wiele (popularne strony szachowe, które oferują analizę gry, również nie robią - nie dostaniesz ruchu, który spadnie z +20 do „tylko” +10 zostanie oznaczony jako „błąd”).
Sztokfisz znajdzie go na głębokości 35, musisz poczekać około 15 minut na Androidzie, aby go zdobyć. Ale tak, komodo znajduje go na mniejszej głębokości
Trzy odpowiedzi:
#1
+26
Inertial Ignorance
2020-06-03 01:40:33 UTC
view on stackexchange narkive permalink

Dobre pytanie. Pozwoliłem Stockfishowi 11 zastanowić się nad pozycją i nawet w okolicach 25-26 głębokości nie sugerował on Bf6. Ale tak jak w twoim przypadku, po wykonaniu ruchu na planszy, Stockfish nagle zdaje sobie sprawę, że to najlepszy ruch. Chociaż dziwne jest również to, że po Gf6 gxf6 Hxf6 potrzeba więcej czasu niż sztokfisz na głębokość co najmniej 27, aby zdać sobie sprawę, że jest mate w 9 ruchach / 18 warstwach (zamiast oceny, która jest „tylko” powyżej +20).

Jednym z możliwych wyjaśnień tego wszystkiego jest przycinanie silników. Jeśli silnik poświęca tyle samo czasu na badanie każdego ruchu w swoich obliczeniach, będzie bardzo powolny (średnio jest około 30 ruchów w danej pozycji, więc złożoność wyszukiwania wszystkiego jest rzędu 30 ^ głębokości) . Dlatego spędzą więcej czasu na myśleniu o ruchach, które wyglądają bardziej obiecująco i przestaną marnować jak najwięcej zasobów na ruchy, które wyglądają wyraźnie gorzej.

Na opublikowanej przez Ciebie pozycji jest wiele ruchów, które dają przynajmniej Ocena +12. W międzyczasie Gf6 upuszcza gońca i być może wystarczy kilka ruchów dalej, aby przytłaczająca rekompensata dla białych stała się oczywista. Jest już dostępnych wiele ruchów +12 z pozycji startowej, więc silnik może zdecydować, że nie będzie tracił czasu na zagłębianie się w gałąź Bf6, zatrzymując się w momencie, zanim zorientuje się, jak dobry jest.

Ale potem kiedy faktycznie grasz w Bf6 na szachownicy, silnik nie ma nic innego do oglądania. Jest „zmuszony” do zbadania gałęzi Bf6, a potem szybko zdaje sobie sprawę, że jest bardzo dobra (chociaż w przypadku Stockfisha zajmuje trochę czasu, zanim zdaje sobie sprawę, że jest to wymuszony partner, prawdopodobnie z powodu tego samego problemu z przycinaniem).

Uwaga że wszystko powyższe jest tylko moim własnym rozumieniem rzeczy i mogą w grę wchodzić inne czynniki. Gdybym miał zgadywać, dlaczego Komodo zasugerował ci Bf6, ale nie Sztokfisz, to dlatego, że sztokfisz przycina bardziej agresywnie, aby być niezwykle szybkim w wyszukiwaniu.

To ma sens. Jeśli znajdziesz odmianę, która daje +12 na twoją korzyść, możesz przestać patrzeć na inne linie.
@Issel, przypuszczam, że jest to względne. Nie chodzi tylko o to, że niektóre linie mają +12 (inne linie mogą być lepsze), ale niektóre linie są znacznie lepsze niż początkowo wydaje się to alternatywne.
Tak, sam sztokfisz w końcu się tam dostanie, ale wymagałoby to dużo czasu i niezbędnej głębokości. Nie wiem, czy Lichess to obsługuje.
Tak, to rzeczywiście jest problem z porządkowaniem ruchów i szukaniem najpierw "najbardziej obiecujących" ruchów. Również znalezienie takich linii jest tym, co szachiści robią podczas przygotowań do otwarcia. Głównym powodem jest to, że silnik tego nie sugeruje.
#2
+7
Allure
2020-06-03 09:37:29 UTC
view on stackexchange narkive permalink

Wszystko jest kwestią przycinania. Jeśli nie znasz tej koncepcji, jest to kluczowa część tego, jak wyszukiwarki wyszukują tak głęboko z określonej pozycji. Oparte są na heurystyce, np. wyszukiwarka będzie szukać ruchów, które dają hetmanowi za żadną materialną rekompensatę. To pozwala mu skupić się na głównych ruchach w pozycji i szukać głębiej.

Dobre przycinanie przyczynia się w ogromnym stopniu do siły silnika, ale możliwe jest, że przycinanie również odcina najlepszy ruch, jeśli kompensacja jest zbyt głęboka (bardziej techniczny termin to „poza horyzontem poszukiwań”). To właśnie widzisz. Heurystyka dla tej pozycji mówi Stockfishowi, aby skupił się na innych ruchach. *

W każdym razie, jeśli pozwolisz Stockfishowi przeanalizować głębiej, zauważy, że Bf6 jest najlepszym ruchem. Na głębokości 38 sugeruje Bf6 (+37,0), Be3 (+14,5) i Rad1 (+14,3).

* Nie jestem pewien, czy Stockfish ma kod „jeśli wszystko wygrywa, szukaj X mniej” . To jest możliwe. W końcu łatki Stockfish są testowane z poprzednimi wersjami tego samego programu i jeśli wszystko wygrywa, to łatka, która przesuwa Bf6 w górę, nie jest tak naprawdę ulepszeniem - dają ten sam wynik.

Słuszna uwaga na temat tego, że znalezienie najbardziej optymalnego ruchu na wyraźnie wygrywającej pozycji nie będzie miało większego znaczenia w testach.
#3
+6
user21820
2020-06-03 14:43:15 UTC
view on stackexchange narkive permalink

Aby rozwinąć, co oznacza przycinanie heurystyczne dla wyszukiwania negamax alfa-beta, z którego korzysta wiele programów szachowych, zazwyczaj funkcja oceny ma jakiś parametr głębokości i okno alfa-beta. To, co robi, to testowanie każdego możliwego ruchu jeden po drugim, wywołując siebie na wynikowej pozycji ze zmniejszonym parametrem głębokości i przekazanym odpowiednim oknem alfa-beta. Eval (d, α, β) przeszukuje głębokość d i zwraca wartość bieżącej pozycji obcięta do przedziału [α, β]. Na początku nazywamy eval (D, −∞, ∞), gdzie D to maksymalna głębokość. Zauważ, że okno alfa-beta zależy od wyników oceny wcześniej wypróbowanych ruchów w następujący sposób.

Najpierw ustawiamy m: = α przed przetestowaniem jakiegokolwiek ruchu. Podczas testowania każdego kolejnego ruchu nazwalibyśmy t: = −eval (d ', - β, −m), a następnie ustawilibyśmy m: = max (m, t). Jeśli m≥β to możemy natychmiast zwrócić β. Na koniec wracamy m. Powodem wywołania „eval (d ', - β, −m)” jest to, że jeśli wynikowa pozycja ma prawdziwą wartość u poza [−β, −m], to miałaby równoważny wpływ na prawdziwą wartość v bieżącej pozycji jako obcięta wartość. (Jeśli u< − β, to −eval (d ', - β, −m) daje β, więc zwracamy β, które jest poprawne, ponieważ v> β. Jeśli u> −m, to −eval (d', - β, −m) daje m, więc nie wpływa na m, co jest poprawne, ponieważ ten ruch doprowadził do prawdziwej wartości −u<m.) Tutaj d 'jest ustalane przez heurystykę (np. Przeszukiwanie spoczynku może ustawić d': = d − 1 dla normalnego porusza się, ale d ': = d − 1/2 do czekania id': = d do bić).

Aby zrozumieć, w jaki sposób pomaga przycinanie heurystyczne, należy najpierw zrozumieć, w jaki sposób pomaga alfa-beta. Kiedy kolejność ruchów jest optymalna (zawsze najpierw testuje optymalny ruch), wtedy alfa-beta eliminuje wszystkie inne ruchy na każdym naprzemiennym poziomie rekurencji w większości przypadków. Aby intuicyjnie zobaczyć, dlaczego, rozważ pierwszy krok. Aby znaleźć optymalny pierwszy ruch X, naprawdę musimy sprawdzić wszystkie możliwe pierwsze ruchy. Ale po przetestowaniu najpierw optymalnego, m zostanie ustawione na tę wartość i wywołasz eval (, - ∞, −m) dla każdego innego testowanego pierwszego ruchu X '. Ale ponieważ najpierw testujemy optymalną odpowiedź przeciwnika od Y do X ', przekonamy się, że daje to wartość co najmniej −m (ponieważ X' nie jest lepsze niż X), a zatem natychmiast zwraca (odrzucając wszystkie inne odpowiedzi przeciwnika, ponieważ pierwsza już potwierdza, że ​​X 'nie jest lepsze niż X). Dzieje się tak w całym drzewie wyszukiwania, więc współczynnik rozgałęzienia jest mniej więcej zmniejszany do 1 na każdym innym poziomie w drzewie wyszukiwania. To skutecznie podwaja głębokość wyszukiwania możliwą przy tych samych zasobach.

Matematycznie nie da się zrobić czegoś lepszego niż wyszukiwanie alfa-beta, jeśli chcemy udowodnić, że ruch jest optymalny. Jednak w wielu grach, takich jak szachy, możemy średnio radzić sobie lepiej, stosując heurystyczne przycinanie. Zamiast testować wszystkie ruchy wymagane przez wyszukiwanie alfa-beta, odrzucamy wiele ruchów! Heurystyka wpływa na ten proces. Na przykład, jeśli d> 4 to moglibyśmy dla każdego możliwego ruchu X wykonać X, a następnie ustawić t [X]: = −eval (4, −β, −α), a następnie cofnąć X. Po tym t [X] reprezentuje a Ocena głębokości-4 tych ruchów skrócona do [α, β]. Możemy wtedy zdecydować się na odrzucenie dowolnego ruchu X, jeśli t [X] + 3≤m; Nieformalnie, jeśli ruch X powoduje ocenę w głębi 4, która jest co najmniej o „gońca” gorszą niż obecnie najlepsza, zakładamy, że jest na tyle słaba, że ​​ignorowanie jej nie wpłynie na wynik oceny.

Przycinanie heurystyczne (poza alfa-beta) może zatem zmniejszyć efektywny współczynnik rozgałęzień (nie tylko na każdym innym poziomie). Dlatego jest dziś używany w wielu nowoczesnych programach szachowych. Przykładowa heurystyka, którą podałem powyżej, służy tylko do celów ilustracyjnych; rzeczywiste programy szachowe wykorzystują całą gamę złożonych heurystyk do przycinania (np. heurystyka ruchu zerowego), a także heurystyki do nie przycinania (np. heurystyka zabójca / historia).

Patrząc na sytuację, którą tu masz, wielu heurystom łatwo jest przyciąć najlepszy ruch Gf6 , chyba że ocena depth-0 daje wystarczająco dużą wagę królewskiemu niebezpieczeństwu, ponieważ Bf6 wyrzuca gońca za pionka i potrzeba sporo cichych ruchów, aby zobaczyć jakiekolwiek korzyści poza zwiększonym niebezpieczeństwem Czarnego Króla. Nie jestem pewien, ale wydaje się, że najlepsza linia to:

  [Title ""] [FEN "r1b2r2 / pp1p1ppk / 2n1p3 / 6B1 / 2P5 / 5N2 / PQ3PPP / R4RK1 w Q - 0 1 "] 1. Gf6 gxf6 2. Hxf6 Wg8 3. Sg5 + Wxg5 4. Hxg5  

Ta linia wykonuje 2 ciche ruchy, 1 szach i 4 bicie. Jednak heurystyka przycinania najprawdopodobniej zostanie przycięta na podstawie kilku pierwszych ruchów następującej linii:

  [Title ""] [FEN "r1b2r2 / pp1p1ppk / 2n1p3 / 6B1 / 2P5 / 5N2 / PQ3PPP / R4RK1 w Q - 0 1 "] 1. Gf6 gxf6 2. Hxf6 Kg8 3. Sg5 Sd8 4. Rad1 e5  

Ponieważ nie widzi, że ta linia kończy się matem, może sądzić, że goniec został stracony dla pionka. Jeśli funkcja oceny policzyła pozycję po 3. Ng5 jako wielkie niebezpieczeństwo królewskie, nie usunąłby linii Bf6 . W obecnej sytuacji prawdopodobnie ważyło to niebezpieczeństwo króla przed utratą biskupa i uważało, że jest to gorsze niż utrzymanie biskupa. Ponadto, ponieważ istnieje wiele możliwych ruchów zamiast Bf6 , które utrzymują gońca, prawdopodobnie przesunęliby linię Bf6 daleko w dół w kolejności ruchu, stąd nigdy przeszukiwane głęboko.

Okazuje się, że to, co uważałem za najlepszą linię, nie było najszybsze, ale prowadzi to do mata przez `1. Gf6 gxf6 2. Hxf6 Wg8 3. Sg5 + Wxg5 4. Hxg5 Sd4 5. Rae1 d5 6. Re3 e5 7. Hh5 + Kg8 8. Wg3 + Kf8 9. H8 + Ke7 10. Hxe5 + Be6 11. Hxd4 Rd8 12. Hh4 + Kd7 13. cxd5 Re8 14. dxe6 + Rxe6 15. Rd1 + `. Szybsza trasa prowadzi przez `1. Gf6 gxf6 2. Hxf6 Wg8 3. Hxf7 + Kh8 4. Sg5 Wxg5 5. f4 Wf5 6. He8 + Kg7 7. Wf3 Wf7 8. Rh3 Kf6 9. Rh6 + Kf5 10. Re1 Ne5 11. Wxe5 + `.


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...