Как заставить ИИ в настольных играх конкурировать друг с другом?

Предположим, у меня есть несколько программ ИИ для конкретной настольной игры, все они реализованы на разных языках, и я хочу, чтобы они соревновались друг с другом без участия человека. Как бы я это сделал?

Я полагаю, что это обычная проблема для исследователей ИИ, любителей, участников игровых соревнований и т. д.

Есть ли общая архитектура? Возможно, ИИ работают как отдельные процессы и общаются с центральным процессом «платы» через сокеты?


person jpl    schedule 22.05.2016    source источник


Ответы (2)


Я не думаю, что существует общий протокол. GGTP, общий игровой текстовый протокол Мишеля Кено и Тристана Казенава очень интересно, потому что описывает трудности, с которыми вы сталкиваетесь при разработке общего решения, и имеет много ссылок, НО это не так

  • полностью реализовано
  • хорошо известный

Поэтому вам придется прибегнуть к протоколам ad hoc.


Для Chess существует протокол связи Chess Engine (он же < протокол href="https://www.gnu.org/software/xboard/" rel="nofollow">Xboard/Winboard) и Универсальный шахматный интерфейс (UCI).

С годами протокол Xboard вырос и теперь поддерживает стандартные шахматные игры, а также различные варианты шахмат, включая основные мировые формы шахмат (сянци, сёги, макрук), а также западные варианты.

Оба можно использовать бесплатно без лицензионных отчислений.


Для Go существует текстовый протокол Go (FTP).


Для шашек/шашек есть CheckerBoard API и Протокол DamExchange

person manlio    schedule 23.05.2016

Сокеты возможны, но я использую трубы. Программа платы отправляет текущее состояние (в виде строки) через AI STDIN, а AI отвечает действием через STDOUT. Программа доски обновляет состояние игры, и этот процесс чередуется между игроками. У меня были студенты, которые соревновались, используя Java и C таким образом. Вот исходный код платы, если вы хотите узнать, как это сделать на C. Вот пример плеера, написанного на C, и здесь на Java.

person rcpinto    schedule 05.06.2016