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

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

  1. SDChess
    Оффлайн

    SDChess Учаcтник

    Репутация:
    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
    Онлайн

    Goranflo баннер

    Репутация:
    678
    Очень много громких заявлений.
    Голословных...
    Но, успехов отечественному производителю.
     
  3. SDChess
    Оффлайн

    SDChess Учаcтник

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

    Alexandr_L куркуль баннер

    Репутация:
    138
    Круто, 1 февраля стартую в турнире, проверю
     
  5. ШахматыЭтоДиагноз
    Оффлайн

    ШахматыЭтоДиагноз Учаcтник

    Репутация:
    208
    Для 32-битной версии нет?
     
  6. SDChess
    Оффлайн

    SDChess Учаcтник

    Репутация:
    6
    К сожалению нет! Но думаю, можно попросить автора сделать сборку.
     
  7. WinPooh
    Оффлайн

    WinPooh В.М. Команда форума

    Репутация:
    95
    Жаль, что нет ни исходников, ни какой-то информации о движке от автора. Ссылка на домашнюю страницу с CCRL никуда не ведёт.
    Вам большое спасибо за поддержание сайта в рабочем состоянии. Сейчас это чуть ли не единственное место в интернете, где можно найти некоторые антикварные движки.
     
    Goranflo нравится это.
  8. SDChess
    Оффлайн

    SDChess Учаcтник

    Репутация:
    6
  9. FreemanZlat
    Оффлайн

    FreemanZlat Новичок

    Репутация:
    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
    Оффлайн

    Vladruss НедоКМС, победитель второразрядников. баннер

    Репутация:
    530
    Не идет движок на моем компе.
    Не идет движок.png
     
  11. KorshunMorshun
    Оффлайн

    KorshunMorshun Учаcтник

    Репутация:
    3
    Может из-за того что путь к программе на русском.
     
  12. Vladruss
    Оффлайн

    Vladruss НедоКМС, победитель второразрядников. баннер

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

    KorshunMorshun Учаcтник

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

    Vladruss НедоКМС, победитель второразрядников. баннер

    Репутация:
    530
    Система у меня уже лет 10 64-битная. Я же говорю: когда на исполняемый файл нажимаешь, то он или работает, или не работает. На моем устаревшем железе не работает. Результат я выложил. Он всегда так: или работает, или не работает.
     
    Последнее редактирование: 7 янв 2023
  15. FreemanZlat
    Оффлайн

    FreemanZlat Новичок

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

    WinPooh В.М. Команда форума

    Репутация:
    95
    Всё вычисления только на CPU, графический процессор не используете?
     
  17. FreemanZlat
    Оффлайн

    FreemanZlat Новичок

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

    Goranflo баннер

    Репутация:
    678
  19. WinPooh
    Оффлайн

    WinPooh В.М. Команда форума

    Репутация:
    95
    А удобной библиотеки для использования обученных в Питоне моделей из C++ так и не появилось, весь inference приходится делать на уровне копания с отдельными байтами и заката солнца вручную?
     
  20. FreemanZlat
    Оффлайн

    FreemanZlat Новичок

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

    Rom Старожил

    Репутация:
    28
    Насколько я знаю, Стокфишевцы обучают сетку за день-два с готового датасета.
     
    Последнее редактирование: 8 янв 2023
  22. FreemanZlat
    Оффлайн

    FreemanZlat Новичок

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

    kozel64a Владислав Шипилов

    Репутация:
    3
  24. Goranflo
    Онлайн

    Goranflo баннер

    Репутация:
    678
    У меня на первом запуске выдал ошибку.
    Выставил в опциях ядра вместо 4/4 3/4 и всё заработало.
     
  25. Revival
    Оффлайн

    Revival Учаcтник

    Репутация:
    40
    Оценка позиции специфическая (хотя сложно сказать, плюс это или минус)

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


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

    WinPooh В.М. Команда форума

    Репутация:
    95
    Особенность нейросетевого подхода к оценке в том, что дать ответ на такой, казалось бы, простой вопрос оказывается неожиданно сложно. Чёрный ящик!
     
  27. FreemanZlat
    Оффлайн

    FreemanZlat Новичок

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

    Локомотив Старожил

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

    [​IMG]
     
  29. Локомотив
    Оффлайн

    Локомотив Старожил

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

    [​IMG]
     
  30. Локомотив
    Оффлайн

    Локомотив Старожил

    Репутация:
    120
    Эта партия показывает неплохое позиционное чутье Уралочки.

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


     
    Vladruss и FreemanZlat нравится это.
  31. Alexandr_L
    Оффлайн

    Alexandr_L куркуль баннер

    Репутация:
    138
    читерил кто с ней на личесс?
     
  32. FreemanZlat
    Оффлайн

    FreemanZlat Новичок

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

    Локомотив Старожил

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



    45...Na8!!
     
  34. FreemanZlat
    Оффлайн

    FreemanZlat Новичок

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

    bankuss Александр баннер

    Репутация:
    6
    http://www.sdchess.ru/ - Умер? Или скорей всего не оплачен.
    У кого есть контакт Кудрявцева, чтобы узнать что случилось?