Komputer vs komputer w grze szachy

0

Gra komputer1 z komputerem2 w szachy, oczywiście oba używają tych samych algorytmów, takich, że analizują każdy możliwy ruch i wybierają najlepszy. Oczywiście, oba mają tyle samo czasu na ruch. Zastanawiam się, który z nich wygra 1 czy 2, lub czy gra zakończy się remisem ? Co o tym sądzicie ? (Pewnie można napisać program i to spawdzić, choć na moje aktualną naukę jest to dość trudnę )

0

Zależy od używanego algorytmu rzecz jasna. „Najlepszość” ruchu to nie jest stwierdzenie bezwzględne.

No chyba że pytasz o to, czy istnieje strategia wygrywająca dla białych/czarnych, czy może tylko strategia nieprzegrywająca. Jeśli tak, to osobiście podejrzewam, że białe mają nieprzegrywającą, a więcej na ten temat możesz sobie przeczytać np. na Wikipedii.

0

Nie musisz pisać algorytmu. O ile pamiętam, to można odpalić np. GNOME Chess w trybie CPU vs CPU - https://wiki.gnome.org/Apps/Chess

0

Czy algorytmy szachowe są deterministyczne? Innymi słowy, czy każda gra CPU vs CPU będzie mieć taki sam przebieg? W przypadku algorytmu deterministycznego jest też taka możliwość, że gra się zapętli w chwili, gdy powtórzy się jakiś układ na planszy. Jeszcze w innych słowach, czy za każdym razem, jak jest konkretny układ na planszy i gra ten sam gracz, to czy za każdym razem wykona ten sam ruch (chodzi o grę komputera), szczególnie w algorytmach, które często zwyciężają nad najlepszymi szachistami?

Liczba możliwych układów figur na szachownicy jest skończone, więc teoretycznie da się zrobić po prostu tabelę z trzema kolumnami, gdzie w pierwszej będzie jakaś konfiguracja na planszy, w drugiej najlepszy ruch w przypadku gracza białymi i w trzeciej najlepszy ruch w przypadku gracza czarnymi. Cała gra komputera to byłoby tylko przeszukiwanie słownika i wykonanie zapisanego w nim ruchu zamiast "sztucznej inteligencji" w jakiejkolwiek formie. Problemem jest tylko ilość pamięci i to, czy słownik ułożą ludzie, czy komputer.

0

Tak z chłopskiego punktu widzenia - szachy to taka fajna gra, że - czasami - aby wygrać trzeba zaryzykować. Dlatego o ile jestem w stanie wyobrazić sobie nieprzegrywające AI o tyle trudno mi sobie wyobrazić AI wygrywające z każdym przeciwnikiem.

Inna sprawa to AI vs to samo AI. Wtedy, zależnie od algorytmu, może zaistnieć sytuacja że białe będą zawsze wygrywały (bo np. będą stosowały gambit, który wymaga ruchu do przodu i algorytm nie jest na niego odporny).

0

Raczej doszło by do sytuacji, w której nie szło by zrobić lepszego ruchu niż przeciwnik i taki bot z jednej i drugiej strony grał by na czas, żeby samemu nie stanąć w gorszym położeniu i skończyło by się patem.

2

@andrzejlisek zwykle nie są ze względów wydajnościowych. Fizycznie niemożliwe jest stablikowanie wszystkich możliwości ani ich przeliczanie w trakcie, więc masz tam pewne algorytmy heurystyczne/zachłanne/probabilistyczne.
@Wielki Pomidor @wartek01 gdyby AI mogło przeliczyć wszystkie możliwe ruchy to mogłoby być nie do pokonania, chyba że istnieje "strategia wygrywająca" ;)

0
andrzejlisek napisał(a):

Jeszcze w innych słowach, czy za każdym razem, jak jest konkretny układ na planszy i gra ten sam gracz, to czy za każdym razem wykona ten sam ruch (chodzi o grę komputera), szczególnie w algorytmach, które często zwyciężają nad najlepszymi szachistami?

Nie sądzę, bo często nie ma jednego najlepszego ruchu i trzeba wybrać któryś z potencjalnie tak samo dobrych.

Liczba możliwych układów figur na szachownicy jest skończone, więc teoretycznie da się zrobić po prostu tabelę z trzema kolumnami, gdzie w pierwszej będzie jakaś konfiguracja na planszy, w drugiej najlepszy ruch w przypadku gracza białymi i w trzeciej najlepszy ruch w przypadku gracza czarnymi.

Nie tak łatwo, bo bazując wyłącznie na obecnej sytuacji (pomijając historię rozgrywki) można wskazać ruch nielegalny.

Cała gra komputera to byłoby tylko przeszukiwanie słownika i wykonanie zapisanego w nim ruchu zamiast "sztucznej inteligencji" w jakiejkolwiek formie.

Nie jestem pewien, czy to by było szybsze. :P

Problemem jest tylko ilość pamięci i to, czy słownik ułożą ludzie, czy komputer.

Przed stwierdzeniem problemów z pamięcią, ja bym się najpierw upewnił, czy mamy tyle atomów we wszechświecie. ;)

wartek01 napisał(a):

Tak z chłopskiego punktu widzenia - szachy to taka fajna gra, że - czasami - aby wygrać trzeba zaryzykować.

Chyba pomyliłeś z pokerem. Strategia oparta na ryzykowaniu ma tyle sensu, co krzyknięcie: "patrz samolot!" i zabranie przeciwnikowi hetmana, gdy odwróci głowę.

0

Kiedyś był taki odcinek Futuramy, gdzie Bender z jakimś drugim robotem zaczynali grę w szachy. Szachownica czysto ustawiona. Jeden robot się odzywa: "Mat w 100 ruchach". Drugi w odpowiedzi: "Mat w 99 ruchach". Może tak właśnie będzie to wyglądało :D

0

W szachach białe mają przewagę tempa (pierwszego ruchu), ale nie jest ona duża.

Przy równej sile gry najbardziej prawdopodobny rezultat to remis. Im wyższy poziom ludzkich graczy - i im wolniejsze tempo partii, a tym samym lepsza dokładność, tym więcej zapada remisów.

Nikt tego nie dowiódł, bo szachy nie są rozwiązane, ale powszechnie przypuszcza się, że rezultat gry perfekcyjnej to też remis. Inaczej mówiąc, w pozycji początkowej nie istnieje forsowna wygrana białych.

Stąd też gdyby silnik szachowy grał tak, że sam sobie regularnie sprawiałby lanie, czy to białymi, czy (tym bardziej) czarnymi, to sygnalizowałoby raczej jakieś niedociągnięcia implementacyjne. I w ciemno obstawiałbym, że jest to po prostu słaby silnik, który np. głupio atakuje, ale jeszcze głupiej się broni.

0
somekind napisał(a):
[andrzejlisek napisał(a)](https://4programmers.net/Forum/

Liczba możliwych układów figur na szachownicy jest skończone, więc teoretycznie da się zrobić po prostu tabelę z trzema kolumnami, gdzie w pierwszej będzie jakaś konfiguracja na planszy, w drugiej najlepszy ruch w przypadku gracza białymi i w trzeciej najlepszy ruch w przypadku gracza czarnymi.

Nie tak łatwo, bo bazując wyłącznie na obecnej sytuacji (pomijając historię rozgrywki) można wskazać ruch nielegalny.

Zapis pozycji szachowej - w każdym sensownym formacie, czy to https://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation, czy jakimś binarnym, stosowanym wewnętrznie przez silnik - zawsze zawiera w sobie istotne dla dalszej rozgrywki informacje o jej dotychczasowym przebiegu. Dotyczy to np. praw do roszady, en passant i innych, których nie dałoby się zrekonstruować patrząc tylko na sam układ figur.

somekind napisał(a):
andrzejlisek napisał(a):
wartek01 napisał(a):

Tak z chłopskiego punktu widzenia - szachy to taka fajna gra, że - czasami - aby wygrać trzeba zaryzykować.

Chyba pomyliłeś z pokerem. Strategia oparta na ryzykowaniu ma tyle sensu, co krzyknięcie: "patrz samolot!" i zabranie przeciwnikowi hetmana, gdy odwróci głowę.

I tak, i nie. Oczywiście silniki nie ryzykują w najprostszym sensie, czyli trzymając kciuki "a może tego nie zauważy". Mimo to mogą grać bardziej zachowawczo lub bardziej ryzykownie.

Każdy silnik szachowy widzi tylko określoną liczbę ruchów naprzód. Możesz przewidzieć wszystkie możliwości sięgając nawet 20 ruchów do przodu, ale i tak trzeba w końcu to, co jest na wierzchołkach tego drzewa, jakoś ocenić i ze sobą porównać.
Owe powstałe pozycje są oceniane heurystycznie, czyli tak naprawdę, na ile wyglądają na lepsze. Ocena pozycji nie jest prosta - funkcja musi objąć mnóstwo czynników i zawsze jest arbitralna.

Np. jak policzyć, kto ma o ile lepszą strukturę pionową, i ile to jest warte w stosunku do bezpieczeństwa króla, mobilności figur itd. pozostałych czynników. Dlatego pomimo, że silniki już od dawna przewyższają siłą każdego ludzkiego szachistę, wciąż potrafią spuścić sobie nawzajem malowniczy wpieprz.

Z uwagi na to, że algorytm obliczania jakości pozycji jest zawsze arbitralny, silniki grają w różnym stylu. Bywają takie, które bardziej cenią materiał i spokojne pozycje, grając bardzo solidnie. A są i takie, które grają bardziej dynamicznie, i w jakimś sensie spekulatywnie, bo np. chętniej poświęcą materiał za inicjatywę.

Wraz z rozwojem komputerowych szachów ich styl przesunął się do bardziej fantazyjnego. Była taka bardzo słynna partia Rybka vs Houdini, w której Houdini poświęcił parę pionków bez żadnej oczywistej rekompensaty, po czym wygrał: http://www.chessgames.com/perl/chessgame?gid=1713451

Jeszcze kilka lat wcześniej coś takiego byłoby nie do pomyślenia. Gra (a - pod koniec - te wnioski, o których mówię) jest dobrze omówiona w tym video:

W tym sensie można powiedzieć, że wraz z rosnącym wyrafinowaniem algorytmów, grają one w sposób, który w ludzkim rozumieniu jest bardziej ryzykowny. Inaczej mówiąc - opierają swoją grę na mniej oczywistych i bardziej dalekosiężnych przewagach.

0
andrzejlisek napisał(a):

Czy algorytmy szachowe są deterministyczne? Innymi słowy, czy każda gra CPU vs CPU będzie mieć taki sam przebieg? W przypadku algorytmu deterministycznego jest też taka możliwość, że gra się zapętli w chwili, gdy powtórzy się jakiś układ na planszy.

W fazie debiutu normą jest pewna losowość. Silniki korzystają tu z książek otwarć i nie grają cały czas tego samego debiutu. Oczywiście jest to losowość ograniczona rozsądkiem - wybierają sobie tylko spośród najlepszych wariantów, a nie wszystkich możliwych.

Na dalszych etapach gry silnik jest co do zasady deterministyczny - oczywiście o tyle, o ile dane CPU zdąży wykonać tyle samo obliczeń mając tyle samo czasu. Wiadomo, że tu mogą się wkraść drobne fluktuacje na poziomie hardware'u, ale to już wynika z natury komputerów w ogóle, a nie jakichś szczególnych cech samego algorytmu.

0
V-2 napisał(a):
somekind napisał(a):

Nie tak łatwo, bo bazując wyłącznie na obecnej sytuacji (pomijając historię rozgrywki) można wskazać ruch nielegalny.

Zapis pozycji szachowej - w każdym sensownym formacie, czy to https://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation, czy jakimś binarnym, stosowanym wewnętrznie przez silnik - zawsze zawiera w sobie istotne dla dalszej rozgrywki informacje o jej dotychczasowym przebiegu. Dotyczy to np. praw do roszady, en passant i innych, których nie dałoby się zrekonstruować patrząc tylko na sam układ figur.

Wydaje mi się, że nie przeczytałeś zdania, do którego się odniosłeś. Ja pisałem o bazowaniu wyłącznie na bieżącej sytuacji, nie o formatach zapisu partii.

0

Przeczytałem i uściśliłem, jak to wygląda

1

Graliście chyba kiedyś w kółko i krzyżyk?

Jak będziesz tylko bronić to zawsze przegrasz, a atak zawsze jest remisujący.

Jak w szachach bot przygotowuje wojo, to pokazuje wrażliwe miejsca, w ogóle obrona ataku bota jest zawsze najtrudniejsza łatwiej atakować.
Bo wtedy on ataku nie może kontynuować i wybiera jakieś inne metody.

1 użytkowników online, w tym zalogowanych: 0, gości: 1