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

Discussion in 'Машинное отделение' started by SDChess, 4 Jan 2023.

  1. TopicStarter Overlay

    SDChess Учаcтник

    • Участник
    Member Since:
    01.05.2006
    Message Count:
    268
    Likes Received:
    61
    Репутация:
    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 likes this.
  2. Goranflo Заслуженный

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    30.09.2006
    Message Count:
    28.314
    Likes Received:
    30.519
    Репутация:
    678
    Онлайн
    Очень много громких заявлений.
    Голословных...
    Но, успехов отечественному производителю.
  3. TopicStarter Overlay

    SDChess Учаcтник

    • Участник
    Member Since:
    01.05.2006
    Message Count:
    268
    Likes Received:
    61
    Репутация:
    6
    Оффлайн
    Это Ваши утверждения голословны! Вы на комп. поставьте и дайте себе труда посмотреть на что движок способен!
    svoitsl likes this.
  4. Alexandr_L куркуль

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    25.09.2009
    Message Count:
    14.449
    Likes Received:
    8.498
    Репутация:
    138
    Оффлайн
    Круто, 1 февраля стартую в турнире, проверю
  5. ШахматыЭтоДиагноз Учаcтник

    • Участник
    Member Since:
    31.03.2017
    Message Count:
    3.546
    Likes Received:
    4.626
    Репутация:
    208
    Оффлайн
    Для 32-битной версии нет?
  6. TopicStarter Overlay

    SDChess Учаcтник

    • Участник
    Member Since:
    01.05.2006
    Message Count:
    268
    Likes Received:
    61
    Репутация:
    6
    Оффлайн
    К сожалению нет! Но думаю, можно попросить автора сделать сборку.
  7. WinPooh В.М.

    • Команда форума
    Member Since:
    13.02.2006
    Message Count:
    9.493
    Likes Received:
    3.124
    Репутация:
    95
    Location:
    Москва
    Оффлайн
    Жаль, что нет ни исходников, ни какой-то информации о движке от автора. Ссылка на домашнюю страницу с CCRL никуда не ведёт.
    Вам большое спасибо за поддержание сайта в рабочем состоянии. Сейчас это чуть ли не единственное место в интернете, где можно найти некоторые антикварные движки.
    Goranflo likes this.
  8. TopicStarter Overlay

    SDChess Учаcтник

    • Участник
    Member Since:
    01.05.2006
    Message Count:
    268
    Likes Received:
    61
    Репутация:
    6
    Оффлайн
  9. FreemanZlat Новичок

    • Новичок
    Member Since:
    24.05.2022
    Message Count:
    14
    Likes Received:
    19
    Репутация:
    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 на битборды, с оценки первой Уралочки на что-то более продвинутое и потом на нейросеть). После рефакторинга и приведения этого всего хоть в какой-то порядок исходники открою. Надеюсь, при следующем релизе.

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

    • Заслуженный
    • Ветеран
    • Заблокирован
    • Старожил
    Member Since:
    30.12.2009
    Message Count:
    16.477
    Likes Received:
    8.523
    Репутация:
    530
    Нарушения:
    31
    Оффлайн
    Не идет движок на моем компе.
    Не идет движок.png
  11. KorshunMorshun Учаcтник

    • Участник
    Member Since:
    01.10.2017
    Message Count:
    145
    Likes Received:
    84
    Репутация:
    3
    Оффлайн
    Может из-за того что путь к программе на русском.
  12. Vladruss НедоКМС, победитель второразрядников.

    • Заслуженный
    • Ветеран
    • Заблокирован
    • Старожил
    Member Since:
    30.12.2009
    Message Count:
    16.477
    Likes Received:
    8.523
    Репутация:
    530
    Нарушения:
    31
    Оффлайн
    Не понял, что это значит?
    Есть простой способ понять, будет ли работать движок на компьютере: просто его запустить без оболочки, дважды кликнуть мышкой. Вот, я и кликнул. Результат на табло. В оболочке тоже пробовал подключить - не встает.
    Это проблема моего железа. У меня постоянно так. Я знаю, что компиляторы могут скомпилировать движок, чтобы он работал на устаревшем железе, но, к сожалению, здесь не тот случай.
    kozel64a likes this.
  13. KorshunMorshun Учаcтник

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

    • Заслуженный
    • Ветеран
    • Заблокирован
    • Старожил
    Member Since:
    30.12.2009
    Message Count:
    16.477
    Likes Received:
    8.523
    Репутация:
    530
    Нарушения:
    31
    Оффлайн
    Система у меня уже лет 10 64-битная. Я же говорю: когда на исполняемый файл нажимаешь, то он или работает, или не работает. На моем устаревшем железе не работает. Результат я выложил. Он всегда так: или работает, или не работает.
  15. FreemanZlat Новичок

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

    • Команда форума
    Member Since:
    13.02.2006
    Message Count:
    9.493
    Likes Received:
    3.124
    Репутация:
    95
    Location:
    Москва
    Оффлайн
    Всё вычисления только на CPU, графический процессор не используете?
  17. FreemanZlat Новичок

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

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    30.09.2006
    Message Count:
    28.314
    Likes Received:
    30.519
    Репутация:
    678
    Онлайн
  19. WinPooh В.М.

    • Команда форума
    Member Since:
    13.02.2006
    Message Count:
    9.493
    Likes Received:
    3.124
    Репутация:
    95
    Location:
    Москва
    Оффлайн
    А удобной библиотеки для использования обученных в Питоне моделей из C++ так и не появилось, весь inference приходится делать на уровне копания с отдельными байтами и заката солнца вручную?
  20. FreemanZlat Новичок

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

    • Участник
    • Старожил
    Member Since:
    12.02.2012
    Message Count:
    645
    Likes Received:
    276
    Репутация:
    28
    Оффлайн
    Насколько я знаю, Стокфишевцы обучают сетку за день-два с готового датасета.
  22. FreemanZlat Новичок

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

    • Участник
    • Старожил
    Member Since:
    14.03.2008
    Message Count:
    614
    Likes Received:
    222
    Репутация:
    3
    Location:
    Москва
    Оффлайн
    Аналогично.
  24. Goranflo Заслуженный

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    30.09.2006
    Message Count:
    28.314
    Likes Received:
    30.519
    Репутация:
    678
    Онлайн
    У меня на первом запуске выдал ошибку.
    Выставил в опциях ядра вместо 4/4 3/4 и всё заработало.
  25. Revival Учаcтник

    • Участник
    Member Since:
    02.06.2019
    Message Count:
    811
    Likes Received:
    1.535
    Репутация:
    40
    Оффлайн
    Оценка позиции специфическая (хотя сложно сказать, плюс это или минус)

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


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

    • Команда форума
    Member Since:
    13.02.2006
    Message Count:
    9.493
    Likes Received:
    3.124
    Репутация:
    95
    Location:
    Москва
    Оффлайн
    Особенность нейросетевого подхода к оценке в том, что дать ответ на такой, казалось бы, простой вопрос оказывается неожиданно сложно. Чёрный ящик!
  27. FreemanZlat Новичок

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

    • Участник
    • Старожил
    Member Since:
    30.03.2012
    Message Count:
    4.948
    Likes Received:
    3.696
    Репутация:
    120
    Оффлайн
    Чемпионат российских движков (3+2, без библиотеки). Уралочка здесь вне конкуренции. Удивил также результат Counter 4.1, но, как показали другие турниры, он в достаточной мере случайный, и Counter по уровню пока не дотягивает до Gull и Strelka. Несколько разочаровал SmarThink.

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

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

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

    • Участник
    • Старожил
    Member Since:
    30.03.2012
    Message Count:
    4.948
    Likes Received:
    3.696
    Репутация:
    120
    Оффлайн
    Эта партия показывает неплохое позиционное чутье Уралочки.

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


    Vladruss and FreemanZlat like this.
  31. Alexandr_L куркуль

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    25.09.2009
    Message Count:
    14.449
    Likes Received:
    8.498
    Репутация:
    138
    Оффлайн
    читерил кто с ней на личесс?
  32. FreemanZlat Новичок

    • Новичок
    Member Since:
    24.05.2022
    Message Count:
    14
    Likes Received:
    19
    Репутация:
    2
    Оффлайн
    Недавно вышел Counter 5.0 (с нейросетью), сильнее версии 4.1 более, чем на 100 пунктов. Он уже гораздо сильнее Gull и Strelka.
    У Drofa тоже есть более свежая версия, которая заметно сильнее.
    Кстати, и у Уралочки последняя версия 3.39d :)
    Локомотив likes this.
  33. Локомотив Старожил

    • Участник
    • Старожил
    Member Since:
    30.03.2012
    Message Count:
    4.948
    Likes Received:
    3.696
    Репутация:
    120
    Оффлайн
    Посмотрите еще раз позицию из партии Дрофа - Уралочка после 45-го хода. Маневр коня через а8 на b5 меня сильно впечатлил! Это прямо просится в учебники как образец позиционной игры.



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

    • Новичок
    Member Since:
    24.05.2022
    Message Count:
    14
    Likes Received:
    19
    Репутация:
    2
    Оффлайн
    Насчёт читерства не знаю, но я там зарегистрировал бота и иногда его включаю и играю с другими ботами. https://lichess.org/@/Uralochka Но это не особо интересное занятие - там либо очень слабые боты (скорее всего чтоб людям с ними было возможно играть) либо сильнейшие (Стокфиш или Лила), которые переигрывают Уралочку. Более-менее равных соперников нет.
  35. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Member Since:
    24.05.2006
    Message Count:
    1.084
    Likes Received:
    38
    Репутация:
    6
    Оффлайн
    http://www.sdchess.ru/ - Умер? Или скорей всего не оплачен.
    У кого есть контакт Кудрявцева, чтобы узнать что случилось?

Share This Page