Форум » » Протокол UCI-1 команды от GUI движку » Ответить

Протокол UCI-1 команды от GUI движку

bankuss: UCI (универсальный шахматный интерфейс) Описание UCI: * Движок – exe файл, консольное или обычное приложение windows. * Связь осуществляется через стандартный ввод/вывод простыми текстовыми командами. * Загруженный движок должен ждать команду от GUI - "isready" или команду "setoption", чтобы инициализировать свои параметры. Процесс начальной загрузки должен быть максимально быстр. * Движок должен уметь обрабатывать входящие данные от stdin, даже при размышлении. * Все команды, которые получает движок, заканчиваются '\n '. Также все команды, которые GUI получает от движка, должны заканчиваться '\n '. * Движок не должен начинать играть или рассчитывать без команды “go”. * Движок не должен совершать ход на внутренней шахматной доске без запроса от GUI, т.е. движок не должен выполнять лучший ход после поиска. * Прежде, чем движок начнет поиск в позиции, он должен принять текущую позицию. * Все дебютные библиотеки сделаны через GUI, Но имеется опция для движка для использования собственной ДБ (опция "OwnBook", см. ниже) Формат хода: Формат хода использует длинную алгебраическою нотацию: Примеры: e2e4, e7e5, e1g1 (короткая рокировка), e7e8q (превращение пешки) Команды от GUI к движку: * UCI Сообщить движку об использовании протокола uci. После команды “uci” движок посылает команды о себе и настройках. Т.е. передает команду "option" с параметрами. После этого движок должен послать "uciok". Если uciok не послан в пределах некоторого периода времени, то движок будет выгружен! * DEBUG [on | off] Переключить способ отладки движка вкл. и выкл. По умолчанию этот параметр должен быть выключенным! В этом режиме движок может посылать дополнительную информации оболочке. * ISREADY Команда используется для синхронизации движка и оболочки. После ее посылки оболочка ждет готовность движка. Этой команде нужно всегда отвечать "readyok". * SETIPTION NAME <id> [value <x>] Передается движку, когда пользователь хочет изменить внутренние настройки движка. Пример: setoption name Hash value 12 setoption name NalimovCache value 4 setoption name OwnBook value true setoption name NalimovPath value C:\Tbase setoption name Ponder value false setoption name book_during_analysis value true setoption name book_learning value false * POSITION [fen <fenstring> | startpos ] moves <move1> .... <movei> Передать позицию. * GO Дать команду на вычисление текущей позиции. Имеется множество команд, которые могут следовать за этой командой. * wtime <x> Белые x мсек на часах * btime <x> Черные x мсек на часах * winc <x> приращение на ход в мсек, если x> 0 * binc <x> приращение на ход в мсек, если x> 0 * movestogo <x> Имеются ходы x к следующему контролю, Послано если x> 0. * depth <x> Искать на x глубину. * nodes <x> Искать x узлов. * mate <x> Искать мат. * movetime <x> Искать точно x мсек. * infinite Поиск до команды "stop". Не выходите из поиска без выключения этого режима! * STOP Остановка поиска. Не забывайте команду "bestmove" по окончании поиска! * PONDERHIT Пользователь делает ожидаемый ход. * QUIT Выйти из программы. Вольный перевод by bankuss 2004

Ответов - 29, стр: 1 2 All

ChessTerminator75: Если я правильно понял это зарождение нового движка. Тогда после того как посмотрите живое общение в Арене еще посмотрите код Fruit_21 http://en.wikipedia.org/wiki/Fruit_(chess_engine) Там в модуле protocol.cpp отличная реализация UCI протокола. Начальная реализация этого протокола сложностей не вызывает. Гораздо сложнее разобраться с fen – строкой. Посредством этой строки оболочка передает движку позицию Во Фрукте это реализовано в модуле fen.cpp ( кто бы мог подумать :):)) Фен строка это строка вида StartFen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; Так что на самом деле вам надо разобраться не столько с UCI сколько с FEN.

Granite116: Жму Движок -> Добавить движок UCI -> Выбираю свой движок и оболочка зависает на минуту, потом говорит, Engine: could not load Ну я решил проверить какую команду движок не может выполнить, приписал код, который сохраняет все команды от GUI к движку и оказывается, что GUI ничего не отправляет движку. Движок сам должен вначале что-то отправить? В чем может быть проблема?

ThinkingALot: Granite116 пишет: Жму Движок -> Добавить движок UCI -> Выбираю свой движок и оболочка зависает на минуту, потом говорит, Engine: could not load Ну я решил проверить какую команду движок не может выполнить, приписал код, который сохраняет все команды от GUI к движку и оказывается, что GUI ничего не отправляет движку. Движок сам должен вначале что-то отправить? В чем может быть проблема? При добавлении движка оболочка просто шлет команду uci. Скорее всего движок не поддерживает UCI протокол.


Granite116: Дело в том, что оболочка не посылает команду uci(если бы посылала, то в файле эта команда сохранилась). Да и прикрутил я к движку команду uci Такого сообщения достаточно после uci? id name Granite id author Granite116 uciok

bankuss: может движок не видит, что ему послали uci ?

ThinkingALot: Для тестирования работы ввода/вывода UCI движка не обязательно использовать GUI. Если движок написан корректно, то после запуска exe-шника из explorer'a вылезет консолька. Когда движок добавляется через GUI этого не происходит, так как ввод/вывод перенаправляется с помощью CreatePipe(). Если написать в консольке "uci" движок должен выдать "uciok". Granite116 пишет: Такого сообщения достаточно после uci? id name Granite id author Granite116 uciok Да. P.S. Каждая отправляемая оболочке строка должна заканчиваться "\n".

kvetka: Вот здесь лежит мой перевод спецификации UCI.

Granite116: ThinkingALot пишет: Если движок написан корректно, то после запуска exe-шника из explorer'a вылезет консолька Конечно вылезет)) И у меня вылазиет ThinkingALot пишет: Когда движок добавляется через GUI этого не происходит, так как ввод/вывод перенаправляется с помощью CreatePipe() Хм, а тут у меня тоже консолька вылазиет(правда команды в нее нельзя вводить) ThinkingALot пишет: Если написать в консольке "uci" движок должен выдать "uciok". Если запускать через explorer, и ввести uci, то выдает ответ: id name Granite id author Granite116 uciok

ThinkingALot: fflush(stdout) после fprintf(stdout,"uciok\n") есть?



полная версия страницы