Новая версия сильнейшего российского движка - "Уралочка"!

Тема в разделе "Машинное отделение", создана пользователем SDChess, 4 янв 2023.

  1. TopicStarter Overlay

    SDChess Учаcтник

    • Участник
    Рег.:
    30.04.2006
    Сообщения:
    258
    Симпатии:
    60
    Репутация:
    6
    Оффлайн
    Новая версия движка Уралочка 3.39с рейтинг который около 3450 единиц! Это сильнейшая российская шахматная программа!
    http://www.sdchess.ru/engines/Uralochka3.39c-win64.zip
    http://www.sdchess.ru/engines/Uralochka3.39c-linux64.zip
    Прибавка против предыдущей версии движка 40-50 пунктов!
    Автор - Иван Макляков подготовил две версии сборок для
    Windows 64bit и Linux 64bit (для различных типов машин, включая и те, которые не поддерживают последние инструкции).
    Следует сказать, что первая публичная версия программы принимала участия в первенстве СНГ в 2008 году, правда не добилась в том турнире большого успеха. Однако прошли годы и сегодня движок Ивана прочно входит в мировую элиту компьютерных шахмат!
    http://computerchess.org.uk/ccrl/4040/index.html
    Думаю, что многим будет интересно познакомится с Уралочкой!
    WinPooh нравится это.
  2. Goranflo Заслуженный

    • Заслуженный
    • Ветеран
    Рег.:
    30.09.2006
    Сообщения:
    21.956
    Симпатии:
    22.645
    Репутация:
    578
    Нарушения:
    9
    Оффлайн
    Очень много громких заявлений.
    Голословных...
    Но, успехов отечественному производителю.
  3. TopicStarter Overlay

    SDChess Учаcтник

    • Участник
    Рег.:
    30.04.2006
    Сообщения:
    258
    Симпатии:
    60
    Репутация:
    6
    Оффлайн
    Это Ваши утверждения голословны! Вы на комп. поставьте и дайте себе труда посмотреть на что движок способен!
    svoitsl нравится это.
  4. Alexandr_L барин

    • Ветеран
    • Заблокирован
    Рег.:
    24.09.2009
    Сообщения:
    7.974
    Симпатии:
    3.772
    Репутация:
    44
    Нарушения:
    40
    Оффлайн
    Круто, 1 февраля стартую в турнире, проверю
  5. ШахматыЭтоДиагноз Учаcтник

    • Участник
    Рег.:
    31.03.2017
    Сообщения:
    2.962
    Симпатии:
    3.721
    Репутация:
    178
    Оффлайн
    Для 32-битной версии нет?
  6. TopicStarter Overlay

    SDChess Учаcтник

    • Участник
    Рег.:
    30.04.2006
    Сообщения:
    258
    Симпатии:
    60
    Репутация:
    6
    Оффлайн
    К сожалению нет! Но думаю, можно попросить автора сделать сборку.
  7. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.404
    Симпатии:
    2.918
    Репутация:
    91
    Адрес:
    Москва
    Оффлайн
    Жаль, что нет ни исходников, ни какой-то информации о движке от автора. Ссылка на домашнюю страницу с CCRL никуда не ведёт.
    Вам большое спасибо за поддержание сайта в рабочем состоянии. Сейчас это чуть ли не единственное место в интернете, где можно найти некоторые антикварные движки.
    Goranflo нравится это.
  8. TopicStarter Overlay

    SDChess Учаcтник

    • Участник
    Рег.:
    30.04.2006
    Сообщения:
    258
    Симпатии:
    60
    Репутация:
    6
    Оффлайн
  9. FreemanZlat Новичок

    • Новичок
    Рег.:
    24.05.2022
    Сообщения:
    11
    Симпатии:
    15
    Репутация:
    2
    Оффлайн
    Всем привет!
    Я Иван Макляков, автор Уралочки.

    Спасибо Сергею (SDChess) за вывод моего движка в люди. :)

    Т.к. информации по Уралочке мало, исправляю это упущение!
    (Далее будет много текста)

    Для начала ссылка на все рабочие сборки всех версий движка https://drive.google.com/drive/folders/1p0ND2AGCs8CR0r-s7AnMHaKGvh3Yj_YQ?usp=share_link
    Там же есть лог изменений и рейтинг-лист (контроль - 2 минуты на партию) почти всех версий движка.

    История движка:
    - Начал увлекаться шахматным программированием где-то в 2006, написал движок FreeChess, весьма слабый.
    - После участия в Чемпионате СНГ в 2008 году и общения с авторами лучших движков СНГ начал новый движок Уралочка (название предложил Игорь Коршунов, автор WildCat). Играл гораздо сильнее FreeChess, но всё равно довольно слабо (рейтинг 2200 по CCRL).
    - Примерно в 2014 году была не очень удачная попытка написать новый движок - Уралочка 2. Рейтинг по моим оценкам получился около 2400 (по CCRL), но в какой-то момент в ноуте помер диск и исходники с бинарниками были утеряны. Жаль, для истории не осталось.
    - Весной 2021 коллеги на работе решили посоревноваться в написании шахматного движка. Я решил поучаствовать и начал новую, 3-ю версию Уралочки. Т.к. был ограничен дедлайном нашего "конкурса", писал всё в спешке, использовал 0x88 генератор, процедуру поиска и оценку сделал аналогичную первой Уралочки. Т.к. я оказался единственным, у кого был рабочий движок, конкурс не состоялся. Я решил продолжить разработку Уралочки (по крайней мере пока есть заметный прогресс). Постепенно переписал генератор на магические битборды (но не до конца, до сих пор ходы пешек генерируются через координаты, не через битборды, лень нормально сделать), реализовал основные сокращения/отсечения в поиске, усложнил оценку, реализовал тюнинг методом движка Texel. Весной прошлого года прогресс сильно замедлился (где-то в районе 3100 по CCRL) и я решил копать в сторону нейросетей. После пары месяцев экспериментов получил первую версию с нейросетью вместо оценочной функции, которая была сильнее версии с рукописной оценкой. После нескольких циклов обучения (обучение на данных, сгенерированных предыдущей версиией) и некоторых доработок нейросети выложил движок в публичный доступ. После этого весь прогресс за счёт прокачки нейросети (больше размер и выше качество датасета, оптимизации скрипта обучения, эксперименты с архитектурой сети и т.п.)

    В движке реализовано:
    - Основные варианты контроля (поиск до глубины, время на ход, время на партию, в т.ч. с добавлением, время на N ходов).
    - Поддержка эндшпильных таблиц Syzygy.
    - Многопоточность.
    - Сборки под разные расширения процессора (SSE, AVX2, AVX512) и операционные системы (Windows, Linux).

    Кратко об архитектуре движка (в принципе, всё как у большинства движков этого уровня):
    - Представление позиции и генерация ходов - магические битборды.
    - Сортировка ходов: ход из таблицы транспозиций, хорошие взятия по SEE, киллер-ходы, тихие ходы по истории, плохие взятия по SEE.
    - Поиск - PVS, Aspiration search, Quiescence Search. И все возможные сокращения и отсечения в поиске (Null move, Static null move, сокращения тихих ходов, Futility pruning, SEE prunung, LMR для тихих ходов).
    - Таблица транспозиций для сортировки и отсечений уже перебранных позиций, также для кэширования оценки.
    - Многопоточность - Lazy SMP.
    - Оценка - нейросеть, подобная NNUE первых версий с HalfKP. Архитектура сети: (2x(9216x512))x1. Входной слой: KingArea*Piece*Color*PieceSquare 12*6*2*64. Обучено с помощью фреймворков Keras (ранние версии) и PyTorch (последние версии) на данных, сгенерированных в партиях своего движка самим с собой со сверх-коротким контролем (7-8 полуходов). Реализация инференса в движке с использованием принципа аккумулятора и векторных инструкций (SSE, AVX).
    - Старая оценка (сейчас не используется) - материал, PSQT, пешечный щит короля, атаки на короля, пешечная структура, мобильность фигур. Веса подбирались методом движка Texel.

    В движке используются внешние библиотеки:
    - https://github.com/jdart1/Fathom - доступ к эндшпильным таблицам Syzygy.
    - https://github.com/graphitemaster/incbin - прикрепление бинарного файла к исполняемому файлу.
    - https://github.com/rogersce/cnpy - сохранение датасетов в формате NumPy.

    При создании движка использовал информацию:
    - Вики по программированию шахмат: https://www.chessprogramming.org/Main_Page
    - Движки Ethereal (https://github.com/AndyGrant/Ethereal) и Igel (https://github.com/vshcherbyna/igel) - изучал процедуру поиска современных движков (в Stockfish понять поиск сложнее).
    - Движок Stockfish (https://github.com/official-stockfish/Stockfish) и утилита для обучения (https://github.com/glinscott/nnue-pytorch) - изучал принципы работы нейросети и генерации датасета для обучения.
    - Движок Koivisto (https://github.com/Luecx/Koivisto) - изучал принцип использования векторных инструкций для вычислений выходного слоя нейронной сети.
    - Некоторые другие движки

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

    Как-то так. Если есть какие-то вопросы - пишите! :)
    Локомотив, I0p3a, Zayats и 6 другим нравится это.
  10. Vladruss НедоКМС, победитель второразрядников.

    • Заслуженный
    • Ветеран
    Рег.:
    30.12.2009
    Сообщения:
    14.589
    Симпатии:
    7.254
    Репутация:
    500
    Нарушения:
    20
    Оффлайн
    Не идет движок на моем компе.
    Не идет движок.png
  11. KorshunMorshun Учаcтник

    • Участник
    Рег.:
    01.10.2017
    Сообщения:
    123
    Симпатии:
    55
    Репутация:
    2
    Оффлайн
    Может из-за того что путь к программе на русском.
  12. Vladruss НедоКМС, победитель второразрядников.

    • Заслуженный
    • Ветеран
    Рег.:
    30.12.2009
    Сообщения:
    14.589
    Симпатии:
    7.254
    Репутация:
    500
    Нарушения:
    20
    Оффлайн
    Не понял, что это значит?
    Есть простой способ понять, будет ли работать движок на компьютере: просто его запустить без оболочки, дважды кликнуть мышкой. Вот, я и кликнул. Результат на табло. В оболочке тоже пробовал подключить - не встает.
    Это проблема моего железа. У меня постоянно так. Я знаю, что компиляторы могут скомпилировать движок, чтобы он работал на устаревшем железе, но, к сожалению, здесь не тот случай.
    kozel64a нравится это.
  13. KorshunMorshun Учаcтник

    • Участник
    Рег.:
    01.10.2017
    Сообщения:
    123
    Симпатии:
    55
    Репутация:
    2
    Оффлайн
    Программа перестала работать на моменте когда похоже определялся путь к базам Sygyzy ("Sygyzy path") - и там пустые кавычки. Может не получается программе подключиться к базам эндшпильным из-за того, что движок сохранен в кириллической папке ("шахматы диск d").
    Ну и тут выше писали, что система должна быть 64-битной. Если у вас 32-х, то не должно заработать.
  14. Vladruss НедоКМС, победитель второразрядников.

    • Заслуженный
    • Ветеран
    Рег.:
    30.12.2009
    Сообщения:
    14.589
    Симпатии:
    7.254
    Репутация:
    500
    Нарушения:
    20
    Оффлайн
    Система у меня уже лет 10 64-битная. Я же говорю: когда на исполняемый файл нажимаешь, то он или работает, или не работает. На моем устаревшем железе не работает. Результат я выложил. Он всегда так: или работает, или не работает.
  15. FreemanZlat Новичок

    • Новичок
    Рег.:
    24.05.2022
    Сообщения:
    11
    Симпатии:
    15
    Репутация:
    2
    Оффлайн
    Скорее всего процессор не поддерживает инструкции SSE2. Syzygy он не нашёл и вылетел на след. стадии, когда инициализируется доска и вычисляется первый слой нейросети.
    К сожалению движок на данный момент не получится собрать для более старых процессоров, т.к. вычисление нейросети у меня реализовано вручную с использованием команд SSE2 процессора (или AVX2/AVX512 для ещё более современных процессоров). В принципе я могу написать вычисление нейросети обычной арифметикой, но это будет работать очень медленно и движок вряд ли сможет показать хорошую игру.
    Локомотив нравится это.
  16. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.404
    Симпатии:
    2.918
    Репутация:
    91
    Адрес:
    Москва
    Оффлайн
    Всё вычисления только на CPU, графический процессор не используете?
  17. FreemanZlat Новичок

    • Новичок
    Рег.:
    24.05.2022
    Сообщения:
    11
    Симпатии:
    15
    Репутация:
    2
    Оффлайн
    Да, в самом движке нейросеть вычисляется только на центральном процессоре. GPU используется только для обучения. Основная фишка NNUE и подобных сетей - быстрое вычисление на процессоре за счёт использования т.н. аккумулятора (это пересчёт первого слоя нейросети при выполнении хода в функции move_make только для ходящей фигуры) и оптимизации вычисления нейросети векторными инструкциями процессора (например, у AVX2 регистры размером 256 бит, при 16-битной fixed-point арифметике мы оперируем за одну команду 16-ю числами одновременно). В итоге у меня при переходе на нейросеть с рукописной оценочной функции падения NPS движка практически не было, а в некоторых позициях движок работает даже быстрее.
    Локомотив нравится это.
  18. Goranflo Заслуженный

    • Заслуженный
    • Ветеран
    Рег.:
    30.09.2006
    Сообщения:
    21.956
    Симпатии:
    22.645
    Репутация:
    578
    Нарушения:
    9
    Оффлайн
  19. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.404
    Симпатии:
    2.918
    Репутация:
    91
    Адрес:
    Москва
    Оффлайн
    А удобной библиотеки для использования обученных в Питоне моделей из C++ так и не появилось, весь inference приходится делать на уровне копания с отдельными байтами и заката солнца вручную?
  20. FreemanZlat Новичок

    • Новичок
    Рег.:
    24.05.2022
    Сообщения:
    11
    Симпатии:
    15
    Репутация:
    2
    Оффлайн
    Насколько я знаю, библиотеки для С++ есть, но в шахматах очень уж специализированная нейросеть, гораздо эффективнее самому всё реализовать (к тому же это сделать не так сложно, как какжется, т.к. нейросеть очень простая - пара полносвязных слоёв с активацией relu). Особенно это касается первого слоя, который пересчитывается в аккумуляторе. Кстати, аналогичная ситуация и с обучением. Существующие фреймворки не умеют эффективно работать с входным слоем NNUE-подобных сетей. Поэтому тут 3 варианта: написать свой фреймворк для обучения (движок Koivisto), написать своё CUDA-ядро для входного слоя для существующего фреймворка (Stockfish), либо страдать и обучать очень медленно. У меня пока 3-й вариант: последнюю версию обучал на 10-миллиардном датасете, одна эпоха обучения длилась более 7 часов на довольно мощной видеокарте, а полное обучение длилось полтора месяца.
  21. Rom Старожил

    • Участник
    • Старожил
    Рег.:
    12.02.2012
    Сообщения:
    643
    Симпатии:
    271
    Репутация:
    27
    Оффлайн
    Насколько я знаю, Стокфишевцы обучают сетку за день-два с готового датасета.
  22. FreemanZlat Новичок

    • Новичок
    Рег.:
    24.05.2022
    Сообщения:
    11
    Симпатии:
    15
    Репутация:
    2
    Оффлайн
    Вот да. И у них сеть обучается 400 эпох. А у меня 100 эпох за месяц (при том, что сетка гораздо проще, чем у Стокфиша).
    Но я не силён в программировании на CUDA и написать ядро не могу. Пока. Даже открытые исходники обучалки Стокфиша особо не помогают. Ну ничего, разберусь со временем :)
  23. kozel64a Владислав Шипилов

    • Участник
    Рег.:
    14.03.2008
    Сообщения:
    489
    Симпатии:
    57
    Репутация:
    0
    Адрес:
    Москва
    Оффлайн
  24. Goranflo Заслуженный

    • Заслуженный
    • Ветеран
    Рег.:
    30.09.2006
    Сообщения:
    21.956
    Симпатии:
    22.645
    Репутация:
    578
    Нарушения:
    9
    Оффлайн
    У меня на первом запуске выдал ошибку.
    Выставил в опциях ядра вместо 4/4 3/4 и всё заработало.
  25. Revival Учаcтник

    • Участник
    Рег.:
    02.06.2019
    Сообщения:
    149
    Симпатии:
    142
    Репутация:
    6
    Онлайн
    Оценка позиции специфическая (хотя сложно сказать, плюс это или минус)

    upload_2023-1-8_16-43-14.png


    Ход белых (позиция из анализа). Стокфиш - близко к нулю. Уралочка - столбец в пользу белых (ровно единица даже на большой глубине). Что там её так пугает? Островки у чёрных? Думает, что мат по чёрным полям после g3-g4 получить можно?
    На всякий случай - пешку на а7 брать нет смысла: 1...Ra8 2.Rd7 Bf5 и Re2!
    Ни один из других имеющихся у меня движков, даже старых, не выдаёт такую оценку. А в целом движок нормально работает, только в памяти иногда застревает, и выгружать приходится через диспетчер задач.
    Goranflo нравится это.
  26. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.404
    Симпатии:
    2.918
    Репутация:
    91
    Адрес:
    Москва
    Оффлайн
    Особенность нейросетевого подхода к оценке в том, что дать ответ на такой, казалось бы, простой вопрос оказывается неожиданно сложно. Чёрный ящик!
  27. FreemanZlat Новичок

    • Новичок
    Рег.:
    24.05.2022
    Сообщения:
    11
    Симпатии:
    15
    Репутация:
    2
    Оффлайн
    К сожалению, понять почему такая оценка не возможно. Как написал @WinPooh - это чёрный ящик, котоорый получает позицию и выдаёт её оценку. Нейросеть так обучилась, что подобные позиции оценивает таким значением.
    Кстати, в большинстве движков с нейросетями (все топовые) оценка практически не привязана к стоимости пешки. То, что выдаёт нейросеть - скорее вероятность выигрыша из даной позиции, приведённая по какой-то формуле к привычному виду. Об этом, кстати, сказано в описании последнего релиза Стокфиша. У Уралочки это преобразование с довольно большим коэффициентом, примерно в 2-3 раза большим, чем у многих других движков. С таким масштабированием оценки Уралочка почему-то играет немного сильнее (5-10 пунктов).
    Локомотив и Revival нравится это.
  28. Локомотив Старожил

    • Участник
    • Старожил
    Рег.:
    30.03.2012
    Сообщения:
    4.316
    Симпатии:
    3.155
    Репутация:
    76
    Оффлайн
    Чемпионат российских движков (3+2, без библиотеки). Уралочка здесь вне конкуренции. Удивил также результат Counter 4.1, но, как показали другие турниры, он в достаточной мере случайный, и Counter по уровню пока не дотягивает до Gull и Strelka. Несколько разочаровал SmarThink.

    [​IMG]
  29. Локомотив Старожил

    • Участник
    • Старожил
    Рег.:
    30.03.2012
    Сообщения:
    4.316
    Симпатии:
    3.155
    Репутация:
    76
    Оффлайн
    Таблица другого турнира с участием Уралочки (3+2, без библиотеки).
    Здесь был движок с легендарным названием Каисса, и в общем, новая Каисса должна была быть в таблице несколько выше, но почему-то несколько раз "уронила флаг" в нормальных позициях.

    [​IMG]
  30. Локомотив Старожил

    • Участник
    • Старожил
    Рег.:
    30.03.2012
    Сообщения:
    4.316
    Симпатии:
    3.155
    Репутация:
    76
    Оффлайн
    Эта партия показывает неплохое позиционное чутье Уралочки.

    —- добавлено: 10 янв 2023, опубликовано: 10 янв 2023 —-
    Победа над сильным соперником в великолепном комбинационном стиле.


    Vladruss и FreemanZlat нравится это.
  31. Alexandr_L барин

    • Ветеран
    • Заблокирован
    Рег.:
    24.09.2009
    Сообщения:
    7.974
    Симпатии:
    3.772
    Репутация:
    44
    Нарушения:
    40
    Оффлайн
    читерил кто с ней на личесс?
  32. FreemanZlat Новичок

    • Новичок
    Рег.:
    24.05.2022
    Сообщения:
    11
    Симпатии:
    15
    Репутация:
    2
    Оффлайн
    Недавно вышел Counter 5.0 (с нейросетью), сильнее версии 4.1 более, чем на 100 пунктов. Он уже гораздо сильнее Gull и Strelka.
    У Drofa тоже есть более свежая версия, которая заметно сильнее.
    Кстати, и у Уралочки последняя версия 3.39d :)
    Локомотив нравится это.
  33. Локомотив Старожил

    • Участник
    • Старожил
    Рег.:
    30.03.2012
    Сообщения:
    4.316
    Симпатии:
    3.155
    Репутация:
    76
    Оффлайн
    Посмотрите еще раз позицию из партии Дрофа - Уралочка после 45-го хода. Маневр коня через а8 на b5 меня сильно впечатлил! Это прямо просится в учебники как образец позиционной игры.



    45...Na8!!
  34. FreemanZlat Новичок

    • Новичок
    Рег.:
    24.05.2022
    Сообщения:
    11
    Симпатии:
    15
    Репутация:
    2
    Оффлайн
    Насчёт читерства не знаю, но я там зарегистрировал бота и иногда его включаю и играю с другими ботами. https://lichess.org/@/Uralochka Но это не особо интересное занятие - там либо очень слабые боты (скорее всего чтоб людям с ними было возможно играть) либо сильнейшие (Стокфиш или Лила), которые переигрывают Уралочку. Более-менее равных соперников нет.

Поделиться этой страницей