Где протестировать свою шахматную программу?

Тема в разделе "Машинное отделение", создана пользователем KM2200, 27 авг 2016.

  1. TopicStarter Overlay

    KM2200 Учаcтник

    • Участник
    Рег.:
    28.03.2011
    Сообщения:
    269
    Симпатии:
    24
    Репутация:
    2
    Оффлайн
    Здравствуйте.
    Собственно, вот такой вопрос. Написал шахматную программу, она слабенькая конечно, но всё-таки интересно узнать, в какую примерно силу она играет. Как это лучше сделать? Может есть какая-то игровая зона, где можно играть программами? Или что?
    Подскажите, пожалуйста.
  2. Sergius Начинающий

    • Начинающий
    Рег.:
    13.07.2007
    Сообщения:
    4
    Симпатии:
    4
    Репутация:
    0
    Оффлайн
    Здравствуйте. Проведите на своем компьютере матч из ста или более партий с другим слабым движком, Tscp 1.81, например. Контроль времени можно взять короткий: минута на игру и менее. Большой выбор движков с разной силой есть на http://www.computerchess.org.uk/ccrl/404/
  3. Eugene_K Учаcтник

    • Участник
    Рег.:
    14.12.2014
    Сообщения:
    829
    Симпатии:
    137
    Репутация:
    3
    Оффлайн
    напиши вот этому челу http://www.talkchess.com/forum/profile.php?mode=viewprofile&u=6
    попроси его вставить свой движок в список http://www.computerchess.org.uk/ccrl/4040/
    там постоянно движки друг с другом играют
    клавное что бы он у тебя поддерживал UCI протокол (ну или на крайняк WB)

    и вообще залогинся http://www.talkchess.com/forum/index.php
    тут все про шахматные движки
  4. TopicStarter Overlay

    KM2200 Учаcтник

    • Участник
    Рег.:
    28.03.2011
    Сообщения:
    269
    Симпатии:
    24
    Репутация:
    2
    Оффлайн
    Спасибо, попробую.
  5. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    649
    Симпатии:
    120
    Репутация:
    3
    Оффлайн
    Я, кстати, тоже написал шахматный движок. К сожалению, на время пока играть не умеет - только на фиксированной глубине. Скорость: порядка 250 000 позиций/с, есть основные эвристики (сортировка взятий, киллер, эвристика истории, хеш). На 7-й глубине просчитывает ~550 000 позиций (на первом ходе). В общем, на 6-й глубине можно играть с комфортном (пробовал добавлять нулевой ход, LMR), но качество игры резко ухудшалось. Кстати, поддерживает основные команды UCI (setposition startpos/fen moves..., go depth ... и другие необходимые для работы с оболочкой). Собираюсь добавить возможность играть на время. Было бы интересно сравнить с вашим. Тестировал на 76 задачах на сайте elometer.net - показывает рейтинг ~1900 на 6-й глубине (похоже, немного завышает).
  6. TopicStarter Overlay

    KM2200 Учаcтник

    • Участник
    Рег.:
    28.03.2011
    Сообщения:
    269
    Симпатии:
    24
    Репутация:
    2
    Оффлайн
    У меня в начальной позиции около 500 kN/s, и сильно зависит от позиции. Хотя я не уверен, что правильно её считаю (учитываю только позиции до заданной глубины, но ведь некоторые ветки продолжаются дальше, может быть нужно учитывать абсолютно все позиции? Тогда будет больше).
    какие странные слова... а я даже не знаю что это такое :scratch:
    Например, можно устроить матч! Только вот где и как?
    elometer.net — это все же по-моему на людей рассчитано, для программ вряд ли годится.
  7. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    649
    Симпатии:
    120
    Репутация:
    3
    Оффлайн
    Думаю, да. elometer - там учитываются не только ответы, но и скорость ответа, вроде как. Сейчас скорость на процессоре Intel Core i7-860 (разогнанный до 3,6 Ггц) составляет где-то 300 000 kN/s. Я использую таблицы заранее просчитанных ходов. Могу скинуть материал, откуда я узнал об этих эвристиках. Кстати, у вас BitBoard-генератор ходов?
    P. S. Я хочу достичь миллиона узлов в секунду, но для этого придется переписать многие вещи. Матч можно устроить в том же Fritz или Arena. Можем обменяться exe-шниками (для любой системы). Хотя, я, возможно, скоро выложу свой движок на GitHub. И еще: моя программа не умеет играть на время (пока только на фиксированную глубину).
  8. TopicStarter Overlay

    KM2200 Учаcтник

    • Участник
    Рег.:
    28.03.2011
    Сообщения:
    269
    Симпатии:
    24
    Репутация:
    2
    Оффлайн
    Я не очень разбираюсь в термнилогии, писал полностью с нуля. Если BitBoard означает использование int64, то да, использую. Но не везде.
    Не уверен насчет обмена exe-шниками (у меня Linux). Но если на GitHub, то я конечно смогу его скомпилировать.
    Можно легко сделать игру с фиксированным временем на ход (то что называется go movetime в UCI и st в xboard). А писать алгоритм для любых контролей, да, нетривиальная задача.
  9. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    649
    Симпатии:
    120
    Репутация:
    3
    Оффлайн
    Не, BitBoard - это немного другое. BitBoard позволит использовать для генерации ходов/расчета оценочной функции быстрые команды процессора (побитовые сдвиги/логические операции и т. п.). Такой подход может сильно ускорить работу ШП, но это достаточно сложно реализовывать и поддерживать.

    У меня тоже есть Linux. На GitHub, думаю, в ближайшее время выложу.


    Да, после того, как реализую эту штуку, выложу на GitHub.
  10. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    649
    Симпатии:
    120
    Репутация:
    3
    Оффлайн
    Реализовал просчет ходов с фиксированным временем (go movetime [msec])
    GitHub: https://github.com/sovaz1997/Zevra

    Буду рад также увидеть ваш код :)

    P.S. Мой, конечно, очень грязный (из-за того, что слишком много чего напихал). Но проверенный, в последний месяц не было багов в просчете ходов и вылетов программы.
    P.P.S. Последняя версия может содержать ошибки (хотя это маловероятно), т. к. я еще не тестировал последнюю версию программы с оболочкой и в Windows (да, в Windows может вылететь из-за переполнения, а в Linux - нет). Просто я решил отключить лишнюю проверку для ускорения. Эта проверка была бессмысленна (мне ее пришлось сделать из-за вылета в Windows. Но проблема была в генераторе таблицы фигура-положение-ход, которую я исправил). В любом случае, исправлю в ближайшее время, если что найду. В GitHub все будет обновляться.
    —- добавлено: 25 сен 2016, опубликовано: 25 сен 2016 —-
    А, и еще:
    Компиляция: просто make all. Возможно, вам придется изменить версию компилятора в Makefile ( у меня -std=c++17 (C++17)).
  11. TopicStarter Overlay

    KM2200 Учаcтник

    • Участник
    Рег.:
    28.03.2011
    Сообщения:
    269
    Симпатии:
    24
    Репутация:
    2
    Оффлайн
    Спасибо, скачал, скомпилировал. Провёл несколько пробных партий моей программы с вашей, по 1 секунде и по 4 секунды на ход. Моя выигрывает.
    Но выкладывать свой код я пока не готов, он еще довольно сырой, там много чего надо дописывать.
    Я сейчас использую для проверки движок hoichess 0.10.3. Раньше моя программа ему проигрывала, но позавчера я придумал, как сильно ускорить перебор, и теперь она выигрывает с разгромным счётом.
  12. Eugene_K Учаcтник

    • Участник
    Рег.:
    14.12.2014
    Сообщения:
    829
    Симпатии:
    137
    Репутация:
    3
    Оффлайн
    Я тоже пописываю свой движок... работает шустро, но пока без хешей.
    На равных глубинах выигрывает многие известные движки
    Но глубина не показатель, так же как и узлов-в-секунду.
    Все зависит от баланса точности оценки позиции и скорости их перебора.
  13. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    649
    Симпатии:
    120
    Репутация:
    3
    Оффлайн
    Я сейчас тоже много чего меняю. Неплохо! У меня есть стимул улучшить свою программу :). А вы последнюю версию компилировали? Я в последнюю неделю сделал полный просчет взятий, она стала играть гораздо сильнее. Сравню с Hoichess и напишу результат :).
    —- добавлено: 30 сен 2016, опубликовано: 30 сен 2016 —-
    А можете написать, какой вы программой пользуетесь для тестирования движков в Linux? Я так и не нашел хорошей программы, через которую можно запустить битву движков. А также PGN партии, если есть. Хочу проанализировать ошибки моей программы.

    P. S. Заметил много проблем в последней версии. Буду исправлять
  14. Eugene_K Учаcтник

    • Участник
    Рег.:
    14.12.2014
    Сообщения:
    829
    Симпатии:
    137
    Репутация:
    3
    Оффлайн
    cutechess-cli
  15. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    649
    Симпатии:
    120
    Репутация:
    3
    Оффлайн
    Спасибо!
  16. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    649
    Симпатии:
    120
    Репутация:
    3
    Оффлайн
    А можете скинуть свои бинарники для Linux, если не трудно?
  17. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    649
    Симпатии:
    120
    Репутация:
    3
    Оффлайн
    Обновил LMR-алгоритм. Можете сейчас сравнить программы. Есть некоторый недостаток: не всегда видит мат в пределах глубины поиска.
  18. Eugene_K Учаcтник

    • Участник
    Рег.:
    14.12.2014
    Сообщения:
    829
    Симпатии:
    137
    Репутация:
    3
    Оффлайн
    Это не недостаток. Эвристики могут просто отсекать на малой глубине ветки жертвы ферзя на каком нибудь втором ходу.
  19. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    649
    Симпатии:
    120
    Репутация:
    3
    Оффлайн
    Я говорю про LMR (типа генетического алгоритма). Первые 3 хода из списка ходов (отсортированного!) проверяются на полной глубине, остальные - на меньшей. А эвристики, сортирующие ходы, не уменьшают качестсво поиска. Но с LMR программа в среднем будет гораздо лучше играть
  20. TopicStarter Overlay

    KM2200 Учаcтник

    • Участник
    Рег.:
    28.03.2011
    Сообщения:
    269
    Симпатии:
    24
    Репутация:
    2
    Оффлайн
    Я xboard использую. Там конечно есть некоторые глюки, но пользоваться можно.
    В первой версии вашей программы явно были какие-то ошибки, последняя версия (сегодняшняя) играет гораздо лучше. Но и в ней ещё что-то не то, например в одной партии на ровном месте слона отдала. PGN я конечно могу, но какой в этом смысл, она же у вас не выводит pv и даже score. По крайней мере в мой PGN они не попадают. Сделайте так, чтобы перед bestmove выводилось "info depth <> score <> .... pv <>", тогда я смогу сделать нормальный PGN.
  21. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.490
    Симпатии:
    3.108
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    http://cutechess.com/
  22. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    649
    Симпатии:
    120
    Репутация:
    3
    Оффлайн
    Я временно убрал вывод (у меня не правильно работает вывод варианта). Напишу, когда сделаю. Насчет зевка слона: возможно, программа видела больший проигрыш и решила сделать такой шаг. А с учетом того, что она не очень глубоко считает, ваша программа пересчитала мою :). Ну, или нулевой ход/LMR глючил. Я, кстати, пока их убрал (т. к. программа не видела мат в малое число ходов). Буду аккуратно эти вещи дорабатывать).
  23. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    649
    Симпатии:
    120
    Репутация:
    3
    Оффлайн
    Спасибо, уже использую :)
  24. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    649
    Симпатии:
    120
    Репутация:
    3
    Оффлайн
    Итак, сделал вывод "info depth *score * pv * ". Также, ускорил программу до 500kN/s (в 2 раза) тем, что наконец реализовал функцию возврата хода (раньше использовал разные экземпляры класса Board, что замедляло скорость в 2 раза). https://github.com/sovaz1997/Zevra
  25. TopicStarter Overlay

    KM2200 Учаcтник

    • Участник
    Рег.:
    28.03.2011
    Сообщения:
    269
    Симпатии:
    24
    Репутация:
    2
    Оффлайн
    Моя программа за это время тоже немного ускорилась и усилилась :)
    Сегодня провёл несколько партий с вашей последней версией. Рокировка была отключена, т.к. моя программа про неё не знает (всё никак не допишу). ИМХО, у вас в программе ещё есть какие-то серьёзные глюки. Отдаёт фигуры на ровном месте, смотрите в PGN.

    Вот например:

    3.... Nf6??!

    Возможно, у меня что-то не так откомпилировалось? У вас 64-битная ОС?

    Вложения:

    • Games.pgn
      Размер файла:
      10,9 КБ
      Просмотров:
      823
  26. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    649
    Симпатии:
    120
    Репутация:
    3
    Оффлайн
    Да, 64-битная. Сейчас у себя посмотрю, таких глюков уже давно нет)). Может, оптимизации влияют. Попробуйте отключить все оптимизации и оставьте -O2 или -O3 (толко).
    —- добавлено: 14 окт 2016, опубликовано: 14 окт 2016 —-
    Скорее всего, проблема в оболочке (или в выводе моей программы). Можете проверить консолью некоторые позиции (с конем под боем и т. п.). Я боюсь, что оболочка берет ходы из pv или еще откуда-то. По крайней мере, у меня в cutechess с этим проблемы были.
  27. Eugene_K Учаcтник

    • Участник
    Рег.:
    14.12.2014
    Сообщения:
    829
    Симпатии:
    137
    Репутация:
    3
    Оффлайн
    Да проблема не в компиляции.

    Взятия не до конца рассматриваются, вот и видит он на небольшой но обрезанной глубине равенство.
  28. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    649
    Симпатии:
    120
    Репутация:
    3
    Оффлайн
    взятия до конца просчитывает уже давно. Проверьте последнюю версию - я исправил баг, из-за которого программа играла очень плохо (баг был именно в функции, считающей только взятия)
  29. TopicStarter Overlay

    KM2200 Учаcтник

    • Участник
    Рег.:
    28.03.2011
    Сообщения:
    269
    Симпатии:
    24
    Репутация:
    2
    Оффлайн
    Вы правы! Scid (я использовал его т.к. он пишет красивый pgn) бёрет ходы не из bestmove, а из pv, в этом всё дело. Запустил через xboard, вот pgn (к сожалению без pv).

    Вложения:

    • gg.pgn
      Размер файла:
      5,3 КБ
      Просмотров:
      784
  30. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    649
    Симпатии:
    120
    Репутация:
    3
    Оффлайн
    Опа, баг-то остался (я забыл push сделать). Проверьте самый последний commit - я исправил quies. Это важно, т. к. без исправления этого бага программа делала грубые ошибки. Я думал, что я все выгрузил на github(
  31. TopicStarter Overlay

    KM2200 Учаcтник

    • Участник
    Рег.:
    28.03.2011
    Сообщения:
    269
    Симпатии:
    24
    Репутация:
    2
    Оффлайн
    Скачал самый последний. Моя всё равно выигрывает ;)

    Вложения:

    • gg2.pgn
      Размер файла:
      7,3 КБ
      Просмотров:
      761
  32. Eugene_K Учаcтник

    • Участник
    Рег.:
    14.12.2014
    Сообщения:
    829
    Симпатии:
    137
    Репутация:
    3
    Оффлайн
    пацаны, свой проект допилю с вами тоже поучаствую ))
  33. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    649
    Симпатии:
    120
    Репутация:
    3
    Оффлайн
    Это я понял. У вас, похоже, хорошая оценочная функция. Я собираюсь улучшить оценочную функцию, но придется менять алгоритм вычисления (обсчитывать не всю позицию, а изменения). У меня нет проверок на безопасность короля. Из-за этого программы выигрывают мою таким образом: либо начинают сильно атаковать короля (из-за этого происходят потери материала), либо проводят пешки в ферзи (моя это не охотно делает). Буду улучшать программу, есть стимул :) С топовыми программами не так интересно сравнивать - вряд ли их получится обогнать.
    P.S. не исключаю вероятность того, что в моей программе могут быть ошибки вида "испорченный телефон", из-за них проблемы возникают часто.
    P.P.S. а на вашем ПК какую скорость выдает мой движок? Похоже, у вас побыстрее (мой ПК за 1 секунду иногда находил ходы на меньшей глубине в тех же позициях)
    —- добавлено: 15 окт 2016, опубликовано: 15 окт 2016 —-
    А можете бинарник для Linux скинуть?
  34. Eugene_K Учаcтник

    • Участник
    Рег.:
    14.12.2014
    Сообщения:
    829
    Симпатии:
    137
    Репутация:
    3
    Оффлайн
    есть exe-шники протестировать?
  35. TopicStarter Overlay

    KM2200 Учаcтник

    • Участник
    Рег.:
    28.03.2011
    Сообщения:
    269
    Симпатии:
    24
    Репутация:
    2
    Оффлайн
    Ага, безопасность короля надо обязательно, это я давно понял. Иначе она лезет королем под атаку, пытаясь удержать материал, ну и мат получает конечно. Для проведения пешек у меня просто: проходные пешки стОят тем дороже, чем дальше они продвинуты.
    Странно, у меня вообще i3 процессор, по идее должен быть медленнее. А скорость, она же от позиции зависит. В начальной позиции выдаёт примерно 200-300kN. Странно это.
    Скинуть-то могу, только вот не знаю будет ли работать... Линуксы они же разные бывают. Попробуйте, я откомпилировал с флагом -static, может пойдет. Там правда глюки могут быть разные. И главное, там нет рокировки - рокировка во время партии ведёт к undefined behaviour :)
    —- добавлено: 16 окт 2016 —-
    У меня exe-шника (в смысле под windows) пока нет, увы.

    Вложения:

    • Tigrament.zip
      Размер файла:
      383,2 КБ
      Просмотров:
      389

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