假设我为特定棋盘游戏设置了多个AI程序,所有这些程序都以不同的语言实现,并且希望让它们在没有人工中介的情况下相互竞争。我该怎么做呢?
我认为这是人工智能研究人员,业余爱好者,游戏比赛等常见问题。
是否有共同的架构?也许AI作为单独的进程运行,并通过套接字与中央“板”进程通信?
答案 0 :(得分:3)
我认为没有共同的协议。 Michel Quenault和Tristan Cazenave的GGTP, a General Gaming Text Protocol非常有趣,因为您描述了设计一般解决方案时遇到的困难,并且有许多参考文献但它不是
所以你必须依靠 ad hoc 协议。
对于国际象棋,有Chess Engine Communication Protocol(又名Xboard / Winboard协议)和Universal Chess Interface(UCI)。
随着Xboard协议的发展,现在支持标准的国际象棋游戏以及各种国际象棋变体,包括世界主要的国际象棋形式(象棋,将棋,Makruk)以及西方变体。
两者均可免费使用,无需许可证费用。
对于开始,有Go Text Protocol(FTP)
对于检查程序/草稿,有CheckerBoard API和DamExchange Protocol
答案 1 :(得分:1)
套接字是可能的,但我确实使用管道。电路板程序通过AI STDIN发送当前状态(作为字符串),AI通过STDOUT执行操作。棋盘程序更新游戏状态,并且该过程在玩家之间交替。我让学生用这种方式使用Java和C进行竞争。如果您想知道如何在C中执行此操作,那么这是董事会的source code。Here是一个用C编写的示例播放器,以及Java中的here。