2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Учим комп ставить мат
Сообщение04.01.2019, 19:52 
Аватара пользователя


29/04/13
7127
Богородский
По мотивам темы «Поставить мат рандомными ходами».

Нынешней зимой у меня наконец-то нашлось время запрограммировать эту задачу. Исследовал различные квадратные доски и пришёл к выводу, что на доске 6-го порядка имеется наибольшая вероятность при заданных условиях поставить мат.

$\tikz[scale=.07]{
\draw[step=20cm] (0,0) grid +(120,120);
\node at (26,10){\text{47}};
\node at (34,10){\textbf{78}};
\node at (46,10){\text{40}};
\node at (54,10){\text{45}};
\node at (66,10){\text{36}};
\node at (74,10){\text{40}};
\node at (86,10){\text{52}};
\node at (94,10){\text{65}};
\node at (10,110){\text{53}};
\node at (10,90)[scale=5, transform shape, font=\fontsize{33}\selectfont,teal]{\textbf{86}};
\node at (10,70){\text{48}};
\node at (10,50){\text{52}};
\node at (10,30){\text{56}};
\node at (110,110){\text{52}};
\node at (110,90)[scale=5, transform shape, font=\fontsize{33}\selectfont]{\textbf{82}};
\node at (110,70){\text{41}};
\node at (110,50){\text{53}};
\node at (110,30){\text{50}};
\filldraw[fill=yellow!40, draw=black] (4,2.5) rectangle (16,3.6);
\filldraw[fill=yellow!40, draw=black] (5,3.6) rectangle (15,5);
\filldraw[fill=yellow!40, draw=black] (5,5) -- (6,6.1) -- (14,6.1) -- (15,5);
\filldraw[fill=yellow!40, draw=black] (6,6.1) rectangle (14,14);
\filldraw[fill=yellow!40, draw=black] (6,14) -- (5,15) -- (15,15) -- (14,14); 
\filldraw[fill=yellow!40, draw=black] (5,15) -- (5,17) -- (7,17) -- (7,16) -- (9,16) -- (9,17) -- (11,17) -- (11,16) -- (13,16) -- (13,17) -- (15,17) -- (15,15);
\draw (5,5) -- (15,5);
\draw (6,14) -- (14,14);
\draw (5,15) -- (15,15);
\filldraw[fill=yellow!40, draw=black] (104,2.5) rectangle (116,3.6);
\filldraw[fill=yellow!40, draw=black] (105,3.6) rectangle (115,5);
\filldraw[fill=yellow!40, draw=black] (105,5) -- (106,6.1) -- (114,6.1) -- (115,5);
\filldraw[fill=yellow!40, draw=black] (106,6.1) rectangle (114,14);
\filldraw[fill=yellow!40, draw=black] (106,14) -- (105,15) -- (115,15) -- (114,14);
\filldraw[fill=yellow!40, draw=black] (105,15) -- (105,17) -- (107,17) -- (107,16) -- (109,16) -- (109,17) -- (111,17) -- (111,16) -- (113,16) -- (113,17) -- (115,17) -- (115,15);
\draw (105,5) -- (115,5);
\draw (106,14) -- (114,14);
\draw (105,15) -- (115,15);
\fill[black] (69.5,114) rectangle (70.5,118);
\fill[black] (68,115.5) rectangle (72,116.5);
\fill[black] (70,111.5) ellipse (2 and 2.5);
\fill [thick,rotate=45] (123.7,29) ellipse (3 and 4);
\fill [thick,rotate=-45] (-24.7,128) ellipse (3 and 4);
\draw [very thick,white,rotate=45] (123.7,29) ellipse (2.4 and 3.3);
\draw [very thick,white,rotate=-45] (-24.7,128) ellipse (2.4 and 3.3);
\fill [black] (74.7,105.5) arc (69:111:13)-- (65.3,102.5) arc (249:291:13)-- cycle;
\draw [very thick,white] (70,106.4) arc (90:111:13);
\draw [very thick,white] (70,106.4) arc (90:69:13);
\draw [very thick,white] (70,105) arc (90:111:13);
\draw [very thick,white] (70,105) arc (90:69:13);
\draw [very thick,white] (70,103.6) arc (90:111:13);
\draw [very thick,white] (70,103.6) arc (90:69:13);
}$

Расстановка перед вами. Это аналог начальной расстановки 3-х фигур на обычной шахматной доске. Ход белых.

Определяется сколько полей может быть выбрано для хода. В данном случае существует 18 равновозможных полей для первого хода белых. Комп случайным образом выбирал одно из них и делал ход. Затем то же самое делал чёрный король. Осмысленность ходов при этом была строго нулевая с обеих сторон. То есть былые могли дать пат или поставить ладью под бой, что противоречит обычной человеческой стратегии матования. Ну а чёрные могли и не взять такую ладью, поскольку этот ход не был ничем выделен среди других.

Комп сыграл $10\;000$ партий средней продолжительностью $13.40$ ходов. Партии продолжались от $2$ до $90$ ходов включительно. Правило 50-ти ходов, как понимаете, не применялось.

Зафиксировано $9452$ ничьих. Это либо взятие королём одной из ладей, либо пат при нахождении короля в угловой клетке.

Мат удалось поставить в $548$ случаях.

В таблице представлена, с позволения сказать, апостериорная вероятность мата в деципроцентах при первом ходе на соответствующую клетку.

Например, число $78$ в правой части клетки означает, что при первом ходе правой ладьи на эту клетку белые впоследствии давали мат с вероятностью 0.078...

mihaild в сообщении #1277349 писал(а):
Даже с двумя ладьями вероятность мата не так низка - если вражеский король стоит на крайней горизонтали/вертикали, а наша ладья на предшествующей ей (несколько сотен конфигураций из нескольких десятков тысяч возможных), то нам нужен только один правильный ход второй ладьей.

Конечно. По человечески понятно, что первым ходом надо отсечь короля, оставив ему только 2 поля. И в таблице лидируют как раз те самые два поля, ход на которые позволяет это сделать.

То есть в дальнейшем, при следующей серии игр ладья сразу пойдёт на a5, где эквити $86$. Затем вновь будет собрана статистика.

Конечно это далеко не единственный способ научить компьютер матовать. Можно было бы запоминать цепочки ходов, ведущих к мату, искать среди них более короткие и т. д. Но ведь не факт, что быстрейший мат должен быть безусловным приоритетом.

В общем эта тема шире, чем исходная.

 Профиль  
                  
 
 Re: Учим комп ставить мат
Сообщение04.01.2019, 20:23 


12/07/15
2907
г. Чехов
Эээ... Есть необходимость обучить компьютер осознанным ходам?

 Профиль  
                  
 
 Re: Учим комп ставить мат
Сообщение04.01.2019, 20:56 
Аватара пользователя


01/11/14
1647
Principality of Galilee
Yadryara в сообщении #1365971 писал(а):
Зафиксировано $9452$ ничьих. Это либо взятие королём одной из ладей, либо пат при нахождении короля в угловой клетке.
Yadryara
Пат возможен и при нахождении короля на краю доски, при этом обе ладьи висят рядом с ним по диагонали.
Такого исхода не встречалось?

 Профиль  
                  
 
 Re: Учим комп ставить мат
Сообщение04.01.2019, 21:54 
Аватара пользователя


29/04/13
7127
Богородский
Специально перезапустил программу, посмотрел. Да, встречался. Чаще всего, при >90% ничейных исходов встречалось взятие ладьи, затем пат в углу и самый редкий — Ваш вариант ничьей.

 Профиль  
                  
 
 Re: Учим комп ставить мат
Сообщение05.01.2019, 17:33 
Аватара пользователя


29/04/13
7127
Богородский
После 1-го хода Лa5 лучший ответ чёрных Кре6, дабы не было возможности дать мат уже 2-м ходом. Эту позицию и рассмотрел.

$\tikz[scale=.07]{
\draw[step=20cm] (0,0) grid +(120,120);
\node at (106,90){\text{5}};
\node at (114,90)[scale=5, transform shape, font=\fontsize{33}\selectfont,teal]{\textbf{21}};
\node at (6,10){\text{4}};
\node at (14,10){\text{9}};
\node at (30,10)[scale=5, transform shape, font=\fontsize{33}\selectfont]{\textbf{15}};
\node at (50,10){\text{9}};
\node at (70,10){\text{10}};
\node at (90,10){\text{6}};
\node at (10,110){\text{4}};
\node at (10,70){\text{5}};
\node at (10,50){\text{5}};
\node at (10,30){\text{5}};
\node at (110,110){\text{0}};
\node at (110,70){\textbf{14}};
\node at (110,50){\text{13}};
\node at (110,30){\text{13}};
\node at (30,90){\text{10}};
\node at (50,90){\text{5}};
\node at (70,90){\text{0}};
\node at (90,90){\text{3}};
\filldraw[fill=yellow!40, draw=black] (4,82.5) rectangle (16,83.6);
\filldraw[fill=yellow!40, draw=black] (5,83.6) rectangle (15,85);
\filldraw[fill=yellow!40, draw=black] (5,85) -- (6,86.1) -- (14,86.1) -- (15,85);
\filldraw[fill=yellow!40, draw=black] (6,86.1) rectangle (14,94);
\filldraw[fill=yellow!40, draw=black] (6,94) -- (5,95) -- (15,95) -- (14,94); 
\filldraw[fill=yellow!40, draw=black] (5,95) -- (5,97) -- (7,97) -- (7,96) -- (9,96) -- (9,97) -- (11,97) -- (11,96) -- (13,96) -- (13,97) -- (15,97) -- (15,95);
\draw (5,85) -- (15,85);
\draw (6,94) -- (14,94);
\draw (5,95) -- (15,95);
\filldraw[fill=yellow!40, draw=black] (104,2.5) rectangle (116,3.6);
\filldraw[fill=yellow!40, draw=black] (105,3.6) rectangle (115,5);
\filldraw[fill=yellow!40, draw=black] (105,5) -- (106,6.1) -- (114,6.1) -- (115,5);
\filldraw[fill=yellow!40, draw=black] (106,6.1) rectangle (114,14);
\filldraw[fill=yellow!40, draw=black] (106,14) -- (105,15) -- (115,15) -- (114,14);
\filldraw[fill=yellow!40, draw=black] (105,15) -- (105,17) -- (107,17) -- (107,16) -- (109,16) -- (109,17) -- (111,17) -- (111,16) -- (113,16) -- (113,17) -- (115,17) -- (115,15);
\draw (105,5) -- (115,5);
\draw (106,14) -- (114,14);
\draw (105,15) -- (115,15);
\fill[black] (89.5,114) rectangle (90.5,118);
\fill[black] (88,115.5) rectangle (92,116.5);
\fill[black] (90,111.5) ellipse (2 and 2.5);
\fill [thick,rotate=45] (138,15) ellipse (3 and 4);
\fill [thick,rotate=-45] (-10.8,142) ellipse (3 and 4);
\draw [very thick,white,rotate=45] (138,15) ellipse (2.4 and 3.3);
\draw [very thick,white,rotate=-45] (-10.8,142) ellipse (2.4 and 3.3);
\fill [black] (94.7,105.5) arc (69:111:13)-- (85.3,102.5) arc (249:291:13)-- cycle;
\draw [very thick,white] (90,106.4) arc (90:111:13);
\draw [very thick,white] (90,106.4) arc (90:69:13);
\draw [very thick,white] (90,105) arc (90:111:13);
\draw [very thick,white] (90,105) arc (90:69:13);
\draw [very thick,white] (90,103.6) arc (90:111:13);
\draw [very thick,white] (90,103.6) arc (90:69:13);
\node at (10,-3.6)[scale=3.4, transform shape, font=\fontsize{33}\selectfont,violet!70]{\textbf{a}};
\node at (30,-3)[scale=3.4, transform shape, font=\fontsize{33}\selectfont,violet!70]{\textbf{b}};
\node at (50,-3.6)[scale=3.4, transform shape, font=\fontsize{33}\selectfont,violet!70]{\textbf{c}};
\node at (70,-3)[scale=3.4, transform shape, font=\fontsize{33}\selectfont,violet!70]{\textbf{d}};
\node at (90,-3.6)[scale=3.4, transform shape, font=\fontsize{33}\selectfont,violet!70]{\textbf{e}};
\node at (110,-3)[scale=3.4, transform shape, font=\fontsize{33}\selectfont,violet!70]{\textbf{f}};
\node at (123.5,10)[scale=3.4, transform shape, font=\fontsize{33}\selectfont,violet!70]{\textbf{1}};
\node at (123.5,30)[scale=3.4, transform shape, font=\fontsize{33}\selectfont,violet!70]{\textbf{2}};
\node at (123.5,50)[scale=3.4, transform shape, font=\fontsize{33}\selectfont,violet!70]{\textbf{3}};
\node at (123.5,70)[scale=3.4, transform shape, font=\fontsize{33}\selectfont,violet!70]{\textbf{4}};
\node at (123.5,90)[scale=3.4, transform shape, font=\fontsize{33}\selectfont,violet!70]{\textbf{5}};
\node at (123.5,110)[scale=3.4, transform shape, font=\fontsize{33}\selectfont,violet!70]{\textbf{6}};
}$

Комп вновь сыграл $10\;000$ партий. Партии были уже короче — в среднем $10.15$ ходов. От $1$ до $118$ ходов включительно. Зафиксировано $9226$ ничьих и $774$ мата.

Эквити в таблице теперь уже в процентах. Снова для первого в этой позиции хода на соответствующую клетку.

Например, числа $0$ на полях d5 и f6 потому, что при первом таком ходе ладьёй король всегда пользовался этой подставой(других полей-то у него не было) и фиксировалась та самая ничья в один ход.

То, что поле f5 лидирует с результатом в 21%, тоже ожидаемо, ибо после этого хода сразу же может последовать мат аж двумя способами.

Задача решена. Да, таким вот сравнительно нехитрым способом компьютер уже научился ставить мат не более чем за 3 хода. Например:

1. Лa5 Кре6
2. Лff5 Крd6
3. Лa6#

Зачем всё это было делать, если давно есть 7-фигурные базы окончаний, где все исходы уже просчитаны? Во-первых было интересно собрать статистику и посмотреть, как это работает. А во-вторых, развивая эти и другие идеи, можно будет когда-нибудь научиться решать и существенно более сложные задачи.

grizzly в сообщении #1277393 писал(а):
А в процессе тренировки машина всё это заполнила весами в соответствии со статистикой своих результатов.

То, что Вы называете весами, это то же самое что я называю эквити(апостериорной вероятностью)?

 Профиль  
                  
 
 Re: Учим комп ставить мат
Сообщение05.01.2019, 19:14 
Заслуженный участник
Аватара пользователя


09/09/14
6328
Yadryara в сообщении #1366205 писал(а):
То, что Вы называете весами, это то же самое что я называю эквити(апостериорной вероятностью)?
В идейном смысле да. В общей ситуации я предполагал, что поиск идёт не совсем вслепую, а выборочно -- с отбрасыванием заведомо неинтересных продолжений, которые могут потребовать слишком много ресурсов или даже исказить результаты.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group