Российский шахматный форум
Российский шахматный форум
ГлавнаяFAQПоискПользователи Регистрация Войти и проверить личные сообщенияВход
Табель о рангах

 
Начать новую тему   Ответить на тему    Российский шахматный форум -> Шахматные программы
Предыдущая тема :: Следующая тема  
Автор Сообщение
Мария Константиновна



Зарегистрирован: 14.11.2015
Сообщения: 10
Откуда: Санкт-Петербург

СообщениеДобавлено: Сб Ноя 14, 2015 13:16    Заголовок сообщения: Табель о рангах Ответить с цитатой

Затрудняюсь, в какой раздел поместить тему: в "Шахматы для ЭВМ" или в "Шахматную теорию" - она имеет отношение к реализации в шахматных программах для ЭВМ
блока игры в элементарных окончаниях (примерами которых являются: король и ферзь (либо ладья) против одинокого короля, король и два слона (либо слон и конь) против одинокого короля.
Целью данного блока является достижение выигрыша (т. е. постановка мата) за минимально возможное количество ходов (для сильной стороны) или организация максимально долгого сопротивления (для слабой стороны).
В принципе, для достижения обозначенной цели существуют таблицы, разработанные новосибирским программистом Евгением Налимовым. Однако файлы таблиц Налимова имеют очень сложный формат, поэтому я не могу ими пользоваться в шахматной программе, составленной мной: я недостаточно хорошо владею программированием и могу считывать табличные данные только из файлов, имеющих ASCII или xls/xlsx формат (т. е. либо из чисто текстовых файлов, либо из файлов электронных таблиц, созданных в Excel'е.
В данной теме я хочу поделиться с вами возможностью альтернативной реализации игры шахматных программ в элементарных окончаниях, которую я использую в своей шахматной программе. Рассказ буду вести на примере эндшпиля "Король и ферзь против одинокого короля". Мой метод я назвала "Табель о рангах". Он основан на материале книги "Машина играет в шахматы" (авторы - Г. М. Адельсон-Вельский, В. Л. Арлазаров, А. Р. Битман и М. В. Донской), выпущенной в московском издательстве "Наука" в 1983 г.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Специалист
 


Зарегистрирован: 19.07.2008


Сообщение Заголовок сообщения: Российский шахматный форум  




Не нравится видеть рекламу? Выход есть! Зарегистрируйтесь!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Мария Константиновна



Зарегистрирован: 14.11.2015
Сообщения: 10
Откуда: Санкт-Петербург

СообщениеДобавлено: Сб Ноя 14, 2015 14:28    Заголовок сообщения: Король и ферзь против одинокого короля Ответить с цитатой

Реализация метода "Табель о рангах" для игры в эндшпиле "Король и ферзь против одинокого короля" заключается в следующем:

1) Без ограничения общности можно считать, что ферзь у белых (в противном случае белые должны играть согласно данным таблиц для черных, а черные - по таблицам для белых). Цель белых - как можно быстрее поставить мат неприятельскому королю, цель черных - оказать как можно более долгое сопротивление (или, если предоставится возможность - спастись).

2) Составляем 128 таблиц в формате ASCII, размером 64x64 - по 64 для белых и для черных (каждая таблица формируется в отдельном файле). Каждая из этих таблиц объединена фиксированным полем, на котором стоит белый ферзь, и соответствующей очередью хода. Строки каждой таблицы характеризуются фиксированным полем для белого короля, столбцы - фиксированным полем для черного короля. Таким образом, таблицы охватывают все возможные случаи расположения трех фигур в эндшпиле данной категории, т. е. все возможные позиции (как легальные, так и нелегальные) эндшпиля вида "король и ферзь против одинокого короля".

3) Для каждой позиции определяем ранг - целое число от -128 до +127 (восьмиразрядное двоичное целое число со знаком) по следующим правилам:

а) позициям с ходом белых присваиваем четный ранг, с ходом черных - нечетный;

б) сначала все позиции объявляем неранжированными и присваиваем всем позициям с ходом белых ранг -128, а с ходом черных - ранг -127;

в) отсекаем нелегальные позиции:

- позиции, в которых как минимум две фигуры стоят на одном и том же поле;

- позиции, в которых объявлен шах королю соперника стороны, владеющей очередью хода (т. е. позиции с ходом белых и шахом черному королю и ходом черных и шахом белому королю).

Всем нелегальным позициям с ходом белых присваиваем ранг 126, а с ходом черных - ранг 127;

г) определяем все легальные (т. е. неранжированные на текущий момент времени и, стало быть, имеющие ранг -127) позиции с ходом черных, в которых их королю объявлен мат. Таким позициям присваиваем ранг -1;

д) определяем все легальные позиции, в которых черные добиваются ничьей. В эндшпиле данной категории все такие позиции имеют ход черных и характеризуются одним из двух условий:

- черным объявлен пат;
- черные первым ходом могут взять ферзя (т. е. ферзь атакован черным королем и не защищен белым королем).

Ничейным позициям присваиваем ранг 125.

е) присваиваем переменной News значение 0, переменной Rank - значение -1;

ж) организуем цикл с постусловием, в котором повторяем следующие два этапа:

I. Перебираем все позиции с ходом белых, неранжированные на текущий момент (имеющие ранг -128). Среди них находим все такие, в которых у белых имеется хотя бы один ход в позицию, имеющую ранг Rank. Всем подобным позициям присваиваем ранг Rank + 1 (в частности, при первом прохождении цикла ранг 0 будет присвоен всем легальным позициям, в которых белые могут объявить мат в один ход). При нахождении каждой такой позиции увеличиваем на единицу значение переменной News.

Если после завершения данного этапа значение переменной News останется равным нулю (т. е. нам не удалось ранжировать ни одну новую позицию), то процесс определения рангов следует завершить: прерываем цикл и переходим к пункту з). В противном случае обнуляем значение переменной News, увеличиваем на единицу значение переменной Rank и переходим к этапу II.

II. Перебираем все позиции с ходом черных, неранжированные на текущий момент (имеющие ранг -127). Среди них находим все такие, в которых у черных нет ни одного хода в позиции, неранжированные на текущий момент. Всем подобным позициям присваиваем ранг Rank + 1 (в частности, при первом прохождении цикла ранг 1 будет присвоен всем легальным позициям, в которых черные не могут избежать мата в один ход). При нахождении каждой такой позиции увеличиваем на единицу значение переменной News.

Если после завершения этапа значение переменной News останется равным нулю, то завершаем процесс определения рангов и переходим к пункту з). В противном случае обнуляем значение переменной News, увеличиваем на единицу значение переменной Rank и переходим к этапу I.

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

з) если после завершения цикла останутся неранжированные позиции, то можно доказать, что во всех таких позициях черные могут добиться ничьей, но при этом очевидная ничейная позиция достигается не первым, а более поздним ходом (в исследуемом эндшпиле их нет, но, например, в эндшпиле "король, слон и конь против одинокого короля" можно привести пример подобной позиции:
Белые: Крg7, Сh8, Kh1; Черные: Крe4. Ход черных. После 1. ... Крf3! 2. Кр~ Крg2 белые теряют коня (таким образом, очевидная ничья достигается третьим ходом черных).

Всем позициям с ходом белых, удовлетворяющим упомянутому условию, присваиваем ранг 124, а с ходом черных - ранг 125.

В итоге всем позициям эндшпиля исследуемой категории будет присвоен ранг. Для позиций, выигранных за белых, ранг имеет следующий смысл: ранг позиций с ходом белых численно равен количеству полуходов, гарантирующих постановку мата, а ранг позиций с ходом черных - максимальное количество полуходов, на которое слабая сторона может оттянуть неминуемый проигрыш.

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

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

Таблицы рангов для эндшпиля "Король, слон и конь против одинокого короля" программа рассчитывала в течение четырех с половиной часов. Но овчинка стоила выделки - по этим таблицам программа играет с изяществом, которым позавидовал бы сам Филидор. При этом программа "не знает" о стратегическом плане, связанным с оттеснением короля слабой стороны в угол цвета слона. Просто только такими виртуозными ходами можно минимизировать ранги позиций, получающихся в процессе игры...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ryosuke12367



Зарегистрирован: 09.05.2018
Сообщения: 2

СообщениеДобавлено: Ср Май 09, 2018 09:48    Заголовок сообщения: Ответить с цитатой

Использование таблицы рангов для игры - это хорошо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Российский шахматный форум -> Шахматные программы Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы