On-line: guests 0. In total there are: 0 [information..]
AuthorTopic
bankuss
Black King


Guest
Joined: 01.01.70
Rank: 0

Awards: За плодотворную работу над оптимизацией и доводкой до ума Ипполитов!!!
link post  Posted: 23.03.06 14:15. Post subject: Протокол UCI-1 команды от GUI движку


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

Say thanks!: 0 
Profile Reply
Replys - 29 , page: 1 2 All [new only]


ChessTerminator75



Post №: 59
Joined: 17.09.07
Rank: 1
link post  Posted: 08.03.10 07:24. Post subject: Если я правильно пон..


Если я правильно понял это зарождение нового движка.

Тогда после того как посмотрите живое общение в Арене
еще посмотрите код 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.

Say thanks!: 0 
Profile Reply
Granite116



Post №: 97
Joined: 15.07.07
Rank: 0
link post  Posted: 08.03.10 10:58. Post subject: Жму Движок -> До..


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

Say thanks!: 0 
Profile Reply
ThinkingALot
VIP


Post №: 212
Joined: 05.09.08
Rank: 4
link post  Posted: 08.03.10 13:20. Post subject: Granite116 пишет: Ж..


Granite116 пишет:

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


При добавлении движка оболочка просто шлет команду uci. Скорее всего движок не поддерживает UCI протокол.

Say thanks!: 0 
Profile Reply
Granite116



Post №: 98
Joined: 15.07.07
Rank: 0
link post  Posted: 08.03.10 14:09. Post subject: Дело в том, что обол..


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


Say thanks!: 0 
Profile Reply
bankuss
Black King


Post №: 2704
Joined: 15.07.07
Rank: 32

Awards: За плодотворную работу над оптимизацией и доводкой до ума Ипполитов!!!
link post  Posted: 08.03.10 19:04. Post subject: может движок не види..


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

Say thanks!: 0 
Profile Reply
ThinkingALot
VIP


Post №: 213
Joined: 05.09.08
Rank: 4
link post  Posted: 09.03.10 19:21. Post subject: Для тестирования раб..


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

Granite116 пишет:

 quote:
Такого сообщения достаточно после uci?
id name Granite
id author Granite116
uciok


Да.

P.S. Каждая отправляемая оболочке строка должна заканчиваться "\n".

Say thanks!: 0 
Profile Reply
kvetka



Post №: 15
Joined: 13.09.08
Rank: 0
link post  Posted: 12.03.10 02:29. Post subject: Вот здесь лежит мой ..


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

Say thanks!: 0 
Profile Reply
Granite116



Post №: 100
Joined: 15.07.07
Rank: 0
link post  Posted: 12.03.10 08:08. Post subject: ThinkingALot пишет: ..


ThinkingALot пишет:

 quote:
Если движок написан корректно, то после запуска exe-шника из explorer'a вылезет консолька


Конечно вылезет)) И у меня вылазиет
ThinkingALot пишет:

 quote:
Когда движок добавляется через GUI этого не происходит, так как ввод/вывод перенаправляется с помощью CreatePipe()


Хм, а тут у меня тоже консолька вылазиет(правда команды в нее нельзя вводить)
ThinkingALot пишет:

 quote:
Если написать в консольке "uci" движок должен выдать "uciok".


Если запускать через explorer, и ввести uci, то выдает ответ:

 quote:
id name Granite
id author Granite116
uciok




Say thanks!: 0 
Profile Reply
ThinkingALot
VIP


Post №: 214
Joined: 05.09.08
Rank: 4
link post  Posted: 12.03.10 14:58. Post subject: fflush(stdout) после..


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

Say thanks!: 0 
Profile Reply
Replys - 29 , page: 1 2 All [new only]
Тему читают:
- user online
- user offline
All times are GMT  2 Hours. Hits today: 23
You can: smiles yes, images yes, types no, poll no
avatars yes, links on, premoderation on, edit new post no