Как подключить UCI?

Тема в разделе "Машинное отделение", создана пользователем gudvinn, 4 авг 2006.

  1. TopicStarter Overlay

    gudvinn Учаcтник

    • Новичок
    • Участник
    Рег.:
    04.08.2006
    Сообщения:
    28
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Хочу написать простенькую шахматную программу на Visual C.

    Как подключить UCI?

    Выбираю Win32 проект. Без MFC.
    Надо подключить к оболочке: Arena.

    Нет ли где простого примера как взаимодействовать?
  2. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Конечно, примеры есть.
    Одним из самых чистых по стилю и приятных для чтения считается код движка Fruit:
    http://wbec-ridderkerk.nl/html/download/fruit/fruit_21.zip

    Это к тому же очень сильный UCI-движок, так что Вы там можете почерпнуть много и кроме реализации протокола.

    Да, а с документацией на сам протокол Вы уже ознакомились?
    http://www.aarontay.per.sg/Winboard/uciapril.html, на всякий случай
  3. TopicStarter Overlay

    gudvinn Учаcтник

    • Новичок
    • Участник
    Рег.:
    04.08.2006
    Сообщения:
    28
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Спасибо за ответ.
    Обе ссылки не работают.

    По ссылке wbec-ridderkerk.nl нашел страницу Download. Там можно загрузить

    WinBoard-FG source (3,12MB). Наверное там реализован протокол

    WinBoard. Возможно мне он подойдет, но как пишут UCI больше распространен.
  4. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Способ обмена UCI и Winboard одинаков. Отличаются только команды.
    Посмотреть пример можно в исходниках Fruit-а, на сайте Winboard, можно нигде не смотреть, а просто пользоваться консольным вводом/выводом :)
    Я использую WriteFile, ReadFile, PeekNamedPipe - из Библиотеки windows.
  5. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Первую только что проверил, пять секунд назад. Работает.

    Вы можете найти ещё десяток, если повторите мои действия: зайдёте в Гугл и наберёте запрос "UCI protocol description" :)
  6. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
  7. TopicStarter Overlay

    gudvinn Учаcтник

    • Новичок
    • Участник
    Рег.:
    04.08.2006
    Сообщения:
    28
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Спасибо.
    Описание протокола получил.

    Для NS.
    Если использовать Pipe, то наверное, надо несколько процессов запускать?

    Один для расчета дерева и один для приема команд? А как в процессе расчета реагировать на команды другого?

    Никогда не писал программ из нескольких процессов.
  8. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Если использовать Pipe - то один процесс.
    У меня программа написана на Делфях, но в сях использование такое-же.
    Ссылку на пример сейчас дам.
  9. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
  10. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Лично я советую XBoard. На порядок проще. Делается за 10 минут. Единственное, что может быть не очень приятно, это реализацию ponder придется самому делать. Хотя в UCI с этим еще хуже.
  11. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Почему хуже? Я очень быстро и легко сделал пондер.
    И поддержку протокола написал очень быстро и легко, и ни пондер, ни поддержку протокола ни разу не правил, за исключением go ponder, но это Полиглот шлет его в конце, а я просто думал что он может распологаться только сразу после go...
    В любом случае сама поддержка протокола всего несколько строк (во всяком случае у меня) - остальное - расчет времени на обдумывание и т.д. - к самому протоколу не относится.
  12. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Не представляю, как можно в несколько строк уместить обработку вот такой, к примеру, команды:

    position startpos e2e4 e7e5 g1f3 b8c6 f1c4 g8f6 f3g5 d7d5 e4d5 f6d5 g5f7 e8f7 d1f3 f7g8 c4d5 d8d5 f3d5 c8e6 :)

    А там ТАКОЕ перед каждым ходом приходит... И чем дальше в лес, тем больше дров - ходу к 150-му длина сами понимаете какая становится :)
  13. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Как? Цикл и Mаke_Move()...
    Плюс Процедура StartPos() - всё равно должна присудствовать...
    И BoardFromFen()
    Получается две команды
    position startpos
    и
    position fen
    после которых может следовать команда moves....
    В чем проблема не вижу :)
    в moves выделяем ходы (Это достаточно просто - они разделены пробелом :))
    И MakeMove(MoveFromString(MoveString));
    (не обращайте внимания на заглавные буквы - в Делфи это нормально)
  14. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Можно слегка оптимизировать - в партии обычно каждая последующая такая строка будет содержать предыдущую как префикс... Если сделать проверку на префикс, не придётся все ходы с начала прокручивать, протокол перестаёт быть stateless. Но это ad hoc, только для случая одной продолжающейся партии.
  15. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Зачем что-то откручивать и т.д.?
    Какая скорость исполнителя ходов?
    Сколько времени займет исполнить 250 ходов?
    Хеш таблицы у нас остались.
    Получилась ли позиция из предыдущей или нет - не важно. Получили позицию (со всеми предшедствующими ходами), и считаем...
  16. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    В суперблице (по 1 секунде на партию) это может оказаться критичным.
    А так - конечно, десятые доли процента...
  17. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Непонятно только, зачем проделывать ОДНУ И ТУ ЖЕ работу много-много раз, если можно избавиться от неё одним вызовом функции strstr.

    А к 150-му полуходу таких лишних вызовов накопится не 150, а 150 * 150 / 2...

    В моей реализации каждый MakeMove содержит ещё и проверку на легальность. Так что становится жалко программу - она рвётся в бой, хочет варианты считать, а её по сотому разу заставляют e2e4 e7e5 из начальной позиции выполнять.

    Впрочем, дело вкуса :)
  18. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    согласен что UCI в этом плане неудобен - можно было бы сделать опцию - даешь оболочке некоторую команду и она начинает выдавать ходы по аналогии xboard. (т.е. не всю линию ходов а только поледний) не дал эту команду - выдает по умолчанию всю линию.

    но изменить стандарт UCI уже малореально :) хотя... кто его поддерживает?
  19. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Зачем вообще связываться с UCI, если есть XBoard?
  20. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    +1 :)
  21. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    WildCat есть в UCI кое-что, чего нет в xboard :)
  22. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Этот вопрос неверно лучше задать на сайтах FruitChess и RybkaChess. :)
    Мне достачно того, что коммерческие продукты ChessBase которые я использую, напрямую не поддерживают windoard.
    Зачем использовать winboard если есть UCI?
    winboard протокол поддерживает FRC? А мульти PV? А нормальные настройки через диалоговые меню?
  23. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Конечно, в UCI есть парочку полезных вещей, но все это убивается его уродливой вычурностью. Но это дело вкуса.
  24. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Вычурность только в способе передачи позиции. В UCI он более мощный, например оболочка может организовать сеанс одновеременной игры, Игру движков "через ход" и т.д.
    А в партии на 250 пулоходов нужно выполнить всего 15000 исполнений хода. то есть при 300kN/s - 0.05 секунды на всю партию тритится...
  25. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Я не имел в виду что-то конкретное (способо передачи позиции). Лично мне весь подход UCI кажется вычурным. Это мое личное субъективное отношение. Возможно если бы я наткнулся сначала на UCI, то он показался мне вполне нормальным. Но т.к. это уже произошло после увиденной красоты XBoard (красивее нельзя, можно только дополнить), то и получилось вот такое отношение.
  26. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    ЮСЯ полезна юзверям. Так как видно несколько вариантов при анализе.
  27. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Я не сразу напоролся на UCI, я сначала написал оболочку под winboard...
    И мне UCI кажется более совпеменным, а насчет того что он мощней - наверно никто спорить не будет :)
    А .ini файлы, особенно ручная их правка даже для установки размеров Хеша - мне кажется полнейшим анахронизмом.
  28. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    NS, вы фанат ГУЕВ? ини файлы ни разу не анахронизм, а часто куда удобнее.
  29. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Для меня, и для пользователей - настройка в Диалоговом окне намного удобней.
    ini Файлы могут использоваться программой (ДВИЖКОМ), но не должен пользователь ручками туда что-либо прописывать, так-же как и не должен копаться в реестре.
    То есть - Диалог, настроили, сохранили.
  30. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Дело в том, что последнее время я работал в той нише (Учетные задачи) где использование настроечных файлов, редактируемых пользователем - абсолютно недопустимо. Только Диалоговые окна.
  31. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Ладно, заканчивайте эти "holy wars". Я просто хотел намекнуть, что не все так однозначно в этом мире :)
    И то, что люди имеют противоположные точки зрения вполне нормально.
  32. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Я о том же. Ини файлы нужны в своем месте, а гуй - в своем! Но считать то или иное решение анахронизмом - некорректно. Они о разном.

    А вот реестр - это ошибочный путь. Нельзя хранить все в одном файле. Тем более если он такой сложный.
  33. chessboard Зарегистрирован

    Рег.:
    13.12.2006
    Сообщения:
    9
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Такой вопрос - можно ли указать номер порта для обмена по этому протоколу где-нибудь в настройках?
    Хочу реализовать обмен по определенному порту, напр >1024. Стандартный в/в плохо понимаю, т.к. не С программер, а если вспоминать VB, то указание имени файла куда все пишется необходимо. По этому вышеприведенные примеры на Дельфи не устраивают. Нужно сокетное соединение.
  34. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.492
    Симпатии:
    3.122
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Хм... Может быть, прежде чем приступать к сокетам, лучше всё-таки потратить неделю-другую на чтение Кернигана-Ричи, чтобы перестать "плохо понимать стандартный ввод-вывод"? Если Вы берётесь за системные вещи, которыми сокеты несомненно являются, знакомство с языком C, хотя бы на уровне чтения, мне кажется просто необходимым...

    Если хотите, это элемент программистской культуры.
  35. chessboard Зарегистрирован

    Рег.:
    13.12.2006
    Сообщения:
    9
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    WinPooh, спасибо за совет, но я считал, что ответ на прямой вопрос еще короче, чем ваши замечания. Так можно указать конкретный порт или нет?
    За Кернигана-Ричи спасибо еще раз.

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