Dlaczego silniki szachowe czasami tracą dobre ruchy (lub zabierają je w nieskończoność)?

17

To nie pierwszy raz, kiedy znalazłem znacznie lepszy ruch niż silnik szachowy, nawet zrozumienie tych ruchów po ich wykonaniu zajmuje trochę czasu.

Na przykład ruch 15 ... Bf2w grze poniżej:

NN - NN, 0-1
1. E4 E5 2. NF3 NC6 3. BB5 Sf6 4. OO NG4 5. h3 h5 6. hxg4 hxg4 7. Bxc6 gxf3 8. Qxf3 Qh4 9. Qh3 Qxh3 10. gxh3 dxc6 11. Re1 Bxh3 12. F3 BC5 + 13. Kh2 Bf1 + 14. Kg3 Rh3 + 15. Kg4 Bf2 16. Rxf1 Rg3 + 17. Kf5 Rxf3 + 18. Kg4 Rg3 + 19. Kf5 f6 20. d3 Kf7 0-1

Silnik pozostaje przez jakiś czas niezauważony, dopiero gdy się ruszam, zaczyna widzieć resztę góry lodowej.

Wiem, że wszystko zależy od tego, ile czasu poświęcisz na analizę, ale nie do przyjęcia jest to, że ludzie potrafią znaleźć te ruchy w krótszym czasie niż komputery.

  • Dlaczego silniki szachowe nie dostrzegają dobrych ruchów na niektórych pozycjach? (Kiedyś czytałem coś o „efekcie horyzontalnym”, może to jest związane?)
  • Czy są inne godne uwagi przykłady? (np. ta słynna łamigłówka , rozwiązanie zajmuje trochę czasu)

Te pytania zawierają przydatne informacje, aby częściowo wyjaśnić niektóre czynniki, które mogą powodować tę anomalię: Jakie algorytmy i heurystyki są popularne w szachach komputerowych? , W jakich sytuacjach przeciwnika komputerowego powinienem stworzyć, aby mieć większą szansę na wygraną? , Oceny komputerowe: na ile są godne zaufania?

Uwagi: Pułapka jest znana jako Wędka , wiem, że spóźniłem się na partnera w 3 (i partnera w 7) :(, limit czasu na ruch to dni (szachy korespondencyjne), ale zajęło mi to około 5-10 minut aby zakończyć obliczanie wszystkiego.

ajax333221
źródło
1
Bardzo interesujące. Sztokfisz na moim komputerze o średniej sile nie znalazł 15... Bf2się wcale po 5 minutach.
Tony Ennis
... i zajęło ponad 7 minut, aby znaleźć podobnego partnera w 7 podczas następnego ruchu.
Tony Ennis
20 d3 to błąd. spróbuj 20 d4.
dcaswell
1
Dlaczego używasz języka „nie do przyjęcia” dla człowieka, aby znaleźć ruch w krótszym czasie niż komputer? Czy możesz rozpakować swoje przemyślenia na ten temat?
Xonatron
Stracił dużo lepszych ruchów. Po co wyróżniać ten konkretnie?
yobamamama

Odpowiedzi:

33

Dlaczego silniki szachowe nie dostrzegają dobrych ruchów na niektórych pozycjach?

Powodem są nazywane techniki przycinania do przodu (patrz http://chessprogramming.wikispaces.com/Pruning ) z ProbCut w pierwszej linii.

Ruch 15 ... Bf2 jest przycinany na płytkich głębokościach, ponieważ obejmuje ofiarę 16. Rxf1 bez odzyskania czegoś konkretnego z dowodami natychmiast po nim. Matenet jest również trudny do zauważenia, ponieważ zawiera pewne dalsze „ciche” ruchy, jak na przykład 17 ... Ke7, i tak również silniki, nie tylko ludzie mają trudności z widzeniem odległych cichych ruchów, ponieważ są często przycinane.

W tym konkretnym przypadku nie można nawet powiedzieć, że silniki nie dostrzegają dobrych ruchów, ponieważ również kontynuacja 15 ... Rh3h1 jest bardzo dobrym ruchem i prowadzi do absolutnie wygranej pozycji.

Na koniec należy pamiętać, że siła silnika jest zawsze mierzona w kategoriach siły elo, a nie zdolności do znalezienia absolutnie najkrótszej drogi do wygranej. Nie ma znaczenia, czy silnik wygra w 8 ruchach, czy w 25 ruchach. Dążenie do wygranej za najkrótszą wygraną oznaczałoby stratę czasu, ponieważ przez większość czasu nie ma tak tajnego dobrego posunięcia. A strata czasu zaszkodziłaby ocenie ELO silników.

użytkownik1411977
źródło
1
Ładna odpowiedź, witamy na stronie!
Andrew
+1 za wzmiankę o kompromisie między przycinaniem a pełnym wyszukiwaniem. Nie jestem zaskoczony, że kombinacja PLY 13+ nie została szybko znaleziona. Silnik ma „lepsze rzeczy do zrobienia” niż obliczanie każdej możliwości na tej głębokości.
Daniel B
2
Dobra odpowiedź ogólnie. +1 za „Last but not least, trzeba pamiętać, że siła silnika jest zawsze mierzona w kategoriach siły elo, a nie w zdolności do znalezienia absolutnie najkrótszej drogi do wygrania”
ferit
Doskonała odpowiedź.
Xonatron
12

Próbuję tego z Houdini 1.5 (darmowa wersja). Na początku 15 ... Bf2 nie pojawia się w pierwszych 5 ruchach, a następnie, gdy osiąga głębokość 15, robi to jak # 1. Zajmuje około 19 sekund na moim czteroletnim komputerze, nie tak długo.

Dlatego nie może go nie zauważyć, ale uważa, że ​​jest to najlepszy ruch po osiągnięciu głębokości 15. Najwyraźniej, o ile tylko wygląda na 14 warstw, inne ruchy są lepsze (jak również wygrywając 15 ... f5 +).

Najwyraźniej 15 ... Bf2 to partner w 8, który ma 15 warstw (8 ruchów czarnych, 7 białych). Ale na początku po prostu uważa, że ​​to +10 lub więcej, potem +20, następnie łączenie w 10, a następnie wiązanie w 8.

Wiązanie w linii 8 to:

NN - NN
1. E4 E5 2. NF3 NC6 3. BB5 Sf6 4. OO NG4 5. h3 h5 6. hxg4 hxg4 7. Bxc6 gxf3 8. Qxf3 Qh4 9. Qh3 Qxh3 10. gxh3 dxc6 11. Re1 Bxh3 12. F3 BC5 + 13. Kh2 Bf1 + 14. Kg3 Rh3 + 15. Kg4 Bf2 16. Rxf1 Rh4 + 17. Kg5 Ke7 18. Rh1 Rxh1 19. Nc3 Rah8 20. Nd5 + cxd5 21. d3 R8h5 + 22. Kg4 R1h4 #.

Najwyraźniej, gdy Houdini 1.5 myśli, że 15 warstw jest głębokie, nie bierze pod uwagę wszystkich możliwych linii, które mają 15 warstw, lub zobaczy wiązanie w 8, gdy zakończy wyszukiwanie 15 warstw.

Myślę, że to z powodu przycinania , przestaje patrzeć na niektóre linie, gdy myśli, że nie są wystarczająco obiecujące. W ten sposób może spędzić więcej czasu na obiecujących liniach, a programista uważa, że ​​zalety przewyższają wady. Ale nie mam teraz odpowiedzi na pytanie, co decyduje się na przycinanie tutaj (prawdopodobnie podejmuje miliony osobnych decyzji o przycinaniu na głębokości 15).

Może to mieć związek z cichymi ruchami ... Ke7 i ... Rah8, dwoma nieudanymi kontrolami w linii, w której czerń jest zmniejszona. Prawdopodobnie decyduje gdzieś, że nie warto dalej patrzeć w tę linię. Dopiero później, gdy kontynuuje linię i znajdzie wiązanie na końcu, wykonaj inne linie, które przedłużają grę (z 18.Rh1 Rxh1 i tak dalej), a następnie pojawiają się.

W każdym razie wiadomo, że nie działa to tak dobrze, że komputer myśli przez kilka sekund tylko wtedy, gdy chcesz dojść do sedna czegoś, kilka minut jest lepsze.

RemcoGerlich
źródło
Domyślam się, dlaczego to przycina, ponieważ 16. Rxf1 wygląda „heurystycznie” nie tak, że król wielkiego białego jest na otwartej przestrzeni, ale nie ma natychmiastowego matowego szaty, a czarny jest na rycerzu za pionka z materiału. Dopiero, gdy nastąpi głębsza analiza (jak powiedziałeś), wartość tej „ofiary” staje się jasna.
Joe K
Zauważ, że „15 warstw” oznacza, że ​​sprawdzono niektóre ruchy na głębokość 15, a nie wszystkie ruchy . Że zajęłoby waay dłużej niż 4 sekundy, nawet na super-komputer.
BlueRaja - Danny Pflughoeft
2

po przeczytaniu wszystkich odpowiedzi i innych źródeł, rozumiem teraz, że nie „pomijają” lub zdecydowali się ominąć te ruchy, ludzie zaprogramowali je w taki sposób, aby postępowali według określonego wzorca wyszukiwania (gdzie / jak / kiedy + kiedy) a co ważniejsze, kiedy należy zatrzymać wyszukiwanie i spojrzeć na bardziej obiecujące linie w celu zaoszczędzenia zasobów.

Ale przy wystarczającym czasie komputer sfinalizuje każdą możliwą kombinację na pewnej głębokości.

TL; DR

  • P1: Nigdy nie przegapili ruchów, po prostu ich jeszcze nie znaleźli
  • P2: zabierają czas, ponieważ są zaprogramowane do oszczędzania zasobów i będą traktować priorytetowo niektóre linie nad innymi (np. Te, które nie mają pasywnych ruchów lub nie odzyskują materiału w kilku kolejnych ruchach).
ajax333221
źródło
-1

Myślę, że wszystkim brakuje znacznie szybszego partnera. Podczas sprawdzania pozycji za pomocą Houdini 3, czarny faktycznie ma wiązanie w 3 w ruchu 13. Zamiast Bf1 +, czarny powinien był grać Bf2, i pozostaje z 14. d3 bf1 + 15. Bh6 Rxh6 #. Tak więc, w nietypowej odpowiedzi na twoje pytanie, może niektóre silniki nie widziały twojego ruchu od razu, ale w przypadku Houdini 3 znalazło znacznie szybszego partnera.

Niespokojny
źródło
5
Jeśli przeczytasz całe pytanie, zobaczysz, że jest on świadomy partnera w 3. Wszystkie rozsądnie nowe silniki natychmiast znajdą partnera w 3, i nie jest to częścią tego, o co tutaj pytamy.
Halvard,