Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.67
romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
#1

Протокол UCI - нужен пример хорошего движка для шахмат - C++

19.05.2010, 19:15. Просмотров 3202. Ответов 37
Метки нет (Все метки)

Доброго времени суток!
Я на данный момент пишу шахматный движок по протоколу UCI, процесс идет не уверенно... На данный момент не реализованно и половины комманд, а обыграть его сможет даже трехлетний ребенок.
Было бы очень интересно ознакомится с движком чужой разработки...
Существует очень много движков, Но беда в том, что сами движки найти гораздо легче чем их код.
Если кто-нибудь занимался этим неблагодарным делом, очень прошу помочь...
Программа мне нужна только для ознакомления. Переделывать под себя, а уж тем более присваивать оную я не буду... Заранее спасибо!

З.Ы. Код Желательно на Си
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2010, 19:15     Протокол UCI - нужен пример хорошего движка для шахмат
Посмотрите здесь:
C++ Нужен пример функции для работы со строками
Visual C++ Нужен пример использования OpenCL для параллельных вычислений
Нужен пример типового модуля распознавания команд для консольного приложения C++
C++ Нужен пример рекурсивной функции для понимания ее назначения и практической пользы
Интеллект для шахмат C++
Нужен пример интерфейса C++
Нужен пример классов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
da-nie
42 / 2 / 0
Регистрация: 11.04.2015
Сообщений: 20
11.04.2015, 09:49     Протокол UCI - нужен пример хорошего движка для шахмат #2
Оживлю тему. Вот моя шахматная программа. Пока как движок не оформлялась и UCI не поддерживает.
Вложения
Тип файла: rar Chess.rar (313.0 Кб, 13 просмотров)
gunslinger
случайный прохожий
1126 / 744 / 190
Регистрация: 20.07.2013
Сообщений: 2,049
15.04.2015, 03:26     Протокол UCI - нужен пример хорошего движка для шахмат #3
Просто отлично.
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
15.04.2015, 05:58     Протокол UCI - нужен пример хорошего движка для шахмат #4
Цитата Сообщение от romex Посмотреть сообщение
Если кто-нибудь занимался этим неблагодарным делом, очень прошу помочь...
Ну для начала надо ознакомится с предметной областью а не с движками. Например с критериями оценки позиции по Стейницу.
Ну и еще - придумать как прикручивать, вернее как наполнять библиотеку дебютов.
da-nie
42 / 2 / 0
Регистрация: 11.04.2015
Сообщений: 20
15.04.2015, 21:27     Протокол UCI - нужен пример хорошего движка для шахмат #5
А вот усовершенствованная версия. Играет лучше. В комплекте простой UCI-движок. С Arena играет.

Однако, резервы совершенствования ещё далеко не исчерпаны. Смотрю код Ифрита и пытаюсь сделать LMR (Late Move Reduction). Пока получается не очень - играть-играет, но Ифриту с глубиной анализа 8 полуходов проигрывает и довольно быстро. Либо я LMR реализовал неправильно (но вроде код у Ифрита довольно ясный, да и что там можно напутать-то... Впрочем, статей на русском по LMR я не нашёл, а принцип, быть может, понял превратно. ), либо неправильно работают другие эвристики. При отключении нулевого хода и Razoring с Futility Pruning играет лучше и сопротивляется дольше, но всё равно сливает, да и думать начинает гораздо дольше.
Вложения
Тип файла: rar Chess2.rar (394.5 Кб, 12 просмотров)
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
15.04.2015, 22:11     Протокол UCI - нужен пример хорошего движка для шахмат #6
Цитата Сообщение от da-nie Посмотреть сообщение
Пока получается не очень - играть-играет, но Ифриту с глубиной анализа 8 полуходов проигрывает и довольно быстро. Либо я LMR реализовал неправильно (но вроде код у Ифрита довольно ясный, да и что там можно напутать-то... Впрочем, статей на русском по LMR я не нашёл, а принцип, быть может, понял превратно. ), либо неправильно работают другие эвристики.
Глубина просчета нужна только в осложнениях (сложных разменах и комбинациях). А комбинаторная игра умерла еще во времена Стейница. Ну а для позиционной гораздо важнее правильное определение пунктов стратегического давления.
da-nie
42 / 2 / 0
Регистрация: 11.04.2015
Сообщений: 20
16.04.2015, 18:29     Протокол UCI - нужен пример хорошего движка для шахмат #7
Глубина просчета нужна только в осложнениях
Продления, разумеется, рассматриваются отдельно в статическом поиске. Но перебор на 6 или на 8 полуходов нужно рассматривать весь (разумеется, с использованием эвристик для отсечения веток дерева). Так вот, я ставил Ифриту 8 полуходов перебор и играл своим движком с ним. Проигрываю, как ни жаль.
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
16.04.2015, 19:56     Протокол UCI - нужен пример хорошего движка для шахмат #8
Цитата Сообщение от da-nie Посмотреть сообщение
(разумеется, с использованием эвристик для отсечения веток дерева)
Главные эвристики которые просто реализуемы - контроль цента, форпосты,контроль вскрытых вертикалей и диагоналей, слабости пешечной структуры (сдвоенные и "висячие" пешки), проходные пешки, ну и как то соотнести это с материалом. Гораздо труднее (вернее затрудняюсь даже сказать в каком направлении думать) - возможность развить атаку на короля (один из главных по Стейницу критериев).
da-nie
42 / 2 / 0
Регистрация: 11.04.2015
Сообщений: 20
16.04.2015, 21:28     Протокол UCI - нужен пример хорошего движка для шахмат #9
Главные эвристики которые просто реализуемы - контроль цента, форпосты,контроль вскрытых вертикалей и диагоналей, слабости пешечной структуры (сдвоенные и "висячие" пешки), проходные пешки, ну и как то соотнести это с материалом.
Это не эвристики, а статическая оценка позиции. Эвристика появится когда из этих оценок придётся выбирать что оставить, а что выбросить.

возможность развить атаку на короля
В простейшем случае - при приближении фигуры к королю в его квадранте продлевать анализ на один полуход.
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
16.04.2015, 22:25     Протокол UCI - нужен пример хорошего движка для шахмат #10
Цитата Сообщение от da-nie Посмотреть сообщение
В простейшем случае - при приближении фигуры к королю в его квадранте продлевать анализ на один полуход.
Давление на короля возможно и с другого конца доски. Ну а учитывая что возможность к примеру не напрямую давления, а возможность быстрого наращивания давления (не обязательно на короля, а на окружение), то вообще получаем ужасть.
Цитата Сообщение от da-nie Посмотреть сообщение
Эвристика появится когда из этих оценок придётся выбирать что оставить, а что выбросить.
Выбор все равно работает на оценке позиции. Соответственно эвристикой в данном случае является выбор соотношения оценок.

Добавлено через 1 минуту
Цитата Сообщение от da-nie Посмотреть сообщение
продлевать анализ на один полуход
Имеется в виду вообще стратегическая возможность. Т.е. для ее оценки понадобится вообще продление анализа как минимум на пол-партии а не на полуход.

Добавлено через 7 минут
Цитата Сообщение от da-nie Посмотреть сообщение
простейшем случае - при приближении фигуры к королю
А вообще стратегические пункты давления (в том числе и пункты с которых и в которые развивается атака на короля) закладываются в дебюте во время его разработки.

Хотя это относится больше к алгоритму анализа для человека а не для машины.
da-nie
42 / 2 / 0
Регистрация: 11.04.2015
Сообщений: 20
17.04.2015, 06:32     Протокол UCI - нужен пример хорошего движка для шахмат #11
Выбор все равно работает на оценке позиции. Соответственно эвристикой в данном случае является выбор соотношения оценок.
Оценка не даст вам возможности решить, какой ход надо сделать. Вот получили вы на глубине 8 полуходов оценки всех веток. Так какой же ход надо сделать? А сделать надо такой, чтобы загнать противника к нужной нам оценке. Это не максимальная оценка на 8 полуходах - это оценка максимально достижимая в данных условиях. Вот тут-то и вступает в дело эвристика, чтобы этот путь найти, а все иные отсечь и даже не рассматривать.

Имеется в виду вообще стратегическая возможность.
Этого и человек не делает.

то вообще получаем ужасть.
Тем не менее, программы играют и выигрывают. И анализ на пол-партии вперёд не проводят.
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
17.04.2015, 06:40     Протокол UCI - нужен пример хорошего движка для шахмат #12
Цитата Сообщение от da-nie Посмотреть сообщение
Этого и человек не делает.
Поверьте мне делает. Во всяком случае профессионалы.

Добавлено через 1 минуту
Цитата Сообщение от da-nie Посмотреть сообщение
Тем не менее, программы играют и выигрывают.
Угу. Ну а как у компа выигрывают? Именно за счет стратегического мышления.

Добавлено через 4 минуты
Алгоритм анализа хода для человека:
1. Определить цели в том числе стратегические хода противника
2. Определить ходы-кандидаты для блокировки целей противника и наращивания стратегического давления
3. Провести просчет в глубину ходов-кандидатов.
Ну и при этом очень желательно считать хотя бы на один ход дальше противника.
da-nie
42 / 2 / 0
Регистрация: 11.04.2015
Сообщений: 20
17.04.2015, 16:49     Протокол UCI - нужен пример хорошего движка для шахмат #13
Поверьте мне делает. Во всяком случае профессионалы.
На пол-партии без ошибок? Или на 15 ходов с промахами, которые нашла бы программа, способная обсчитать всю партию целиком?

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

Алгоритм анализа хода для человека:
Так для компьютера он по сути такой же. Только чтобы программе понять где выгоднее держать фигуру создают тонко настроенные статические оценочные функции.
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
17.04.2015, 21:53     Протокол UCI - нужен пример хорошего движка для шахмат #14
Цитата Сообщение от da-nie Посмотреть сообщение
К счастью, человек также всех последствий своих ходов не предусматривает, и поэтому обыграть его программе почти всегда проще, чем наоборот.
То что под руку поподалось из движков обычно не держит именно стратегческое давление. Если правильно придавить до эндшпиля дело просто не доходит. Бегает комп голым королем по полю и в начале миттельшпиля прекрасно.
А вот зевки не прощают. и простейшие жертвы с выигрышем материала в течении ход-два тоже умеют.
da-nie
42 / 2 / 0
Регистрация: 11.04.2015
Сообщений: 20
17.04.2015, 22:10     Протокол UCI - нужен пример хорошего движка для шахмат #15
Если правильно придавить до эндшпиля дело просто не доходит. Бегает комп голым королем по полю и в начале миттельшпиля прекрасно.
А попробуйте с гудини сыграть.

Интересно, сделал работу с хэш-таблицей как у Ифрита и движок почти выиграл (слил в ничью с очень хорошей оценки - я пока не умею детектировать тройные повторения).
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
17.04.2015, 22:42     Протокол UCI - нужен пример хорошего движка для шахмат #16
Цитата Сообщение от da-nie Посмотреть сообщение
Так для компьютера он по сути такой же.
Одно не понятно - как компу определять направления стратегического давления.
Хотя это конечно не моя специализация. Максимум что делал в этом направлении - программу решения шахматных задач на мат.
da-nie
42 / 2 / 0
Регистрация: 11.04.2015
Сообщений: 20
17.04.2015, 23:09     Протокол UCI - нужен пример хорошего движка для шахмат #17
Одно не понятно - как компу определять направления стратегического давления.
Программа исходит из того, где выгоднее держать фигуру в разных стадиях игры. А дальше тактика потихоньку переходит в стратегию. Скажем, сейчас я учитываю в оценочной функции битые оппонентом поля рядом с королём. Таким образом, программа будет стремиться развивать атаку на короля и его окружение.

В приведённых выше файлах, к сожалению, ошибка в оценочной функции. Они играют, но, как оказалось, не так, как должны были. Надеюсь, доделаю движок и выложу версию более сильную. И менее тормозную - этот момент я пока так и не решил.
Убежденный
Системный программист
Эксперт С++
15247 / 6879 / 1092
Регистрация: 02.05.2013
Сообщений: 11,256
Завершенные тесты: 1
17.04.2015, 23:19     Протокол UCI - нужен пример хорошего движка для шахмат #18
Цитата Сообщение от da-nie Посмотреть сообщение
Оживлю тему. Вот моя шахматная программа.
da-nie, а как бы Вы оценили силу игры данной программы ?
На какой разряд/кмс/мс/гросс ?.. По моим меркам, играет она недурно,
но до известных шахматных движков далеко. Лично у меня получилось
из шести партий две выиграть и одну сыграть вничью, но это за
отсутствием практики, а лет пять назад я бы, наверное, сыграл
лучше (тогда и в турнирах играл, и тренировался постоянно)...
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
18.04.2015, 01:42     Протокол UCI - нужен пример хорошего движка для шахмат #19
Цитата Сообщение от da-nie Посмотреть сообщение
Скажем, сейчас я учитываю в оценочной функции битые оппонентом поля рядом с королём. Таким образом, программа будет стремиться развивать атаку на короля и его окружение
Не всегда верно при некоторых раскладах, довольно часто к победе ведет придавить не на короля, а на какое либо слабое место (например на то чтобы провести пешку, или ворваться в необеспеченное пространство)

Добавлено через 2 часа 9 минут
Цитата Сообщение от da-nie Посмотреть сообщение
Чёткий результат достигается только в эндшпиле, где человек ясно видит результат и за 30 ходов (он очевиден), а компьютер нет - он на столько не считает
Эндшпиль против гудини - ладья пешка и ферзь против его голого короля. Вот тут у него такие расчеты включаются... над ходом надолго задумывается, не то что во время всей игры...

Вообще человек считает в основном в миттельшпиле. дебют и эндшпиль обычно на "автомате". Во всяом случае по энцифолограммам снятым с гроссмейстеров.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2015, 01:59     Протокол UCI - нужен пример хорошего движка для шахмат
Еще ссылки по теме:
C++ WinAPI Нужен пример сабклассинга
C++ Нужен пример класса
C++ Нужен пример с массивами
Нужен пример хэширования C++
C++ Нужен пример цикла while

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
18.04.2015, 01:59     Протокол UCI - нужен пример хорошего движка для шахмат #20
Цитата Сообщение от da-nie Посмотреть сообщение
А попробуйте с гудини сыграть.
Оригинальный однако у этого гудини сдаваться. Стратегия однако. Контр-гамбит Альбина. И в этом плане ничем не лучше остального того что видел. Только думает долго.
Миниатюры
Протокол UCI - нужен пример хорошего движка для шахмат  
Yandex
Объявления
18.04.2015, 01:59     Протокол UCI - нужен пример хорошего движка для шахмат
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru