多个AI引擎之间的进程间通信

时间:2011-04-18 01:02:19

标签: artificial-intelligence game-engine

我想在一些朋友之间安排人工智能比赛。 让我们说tic tac toe, 每个玩家编程一个方法,获得棋盘和一个符号(X \ O)并返回他想要在他轮流玩的地方。 现在我的问题是它如何在另一个程序中“连接”两个AI,这样我就可以测试所有用户,看看谁拥有最好的代码。 我想到的唯一方法是与文本文件进行通信 - 所有AI都在后台运行线程并检查文本文件的更改,引擎摘要游戏详细信息(转向,板,分数,玩家)到文本文件。

如何才能做得更好? 还有一件小事,人工智能竞赛中每个回合的时间框架都是常见的吗? (因为AI程序将在不同的计算机上运行不同的时间)

7 个答案:

答案 0 :(得分:1)

您的问题不清楚是否必须在线执行。

如果您在找到“最佳Tic Tac Toe算法”之后,您可以简单地:

(这可能会略有不同,具体取决于编程语言)

  1. 定义界面(例如:ITicTacToeSolver)
  2. 让所有朋友以自己的方式实现它并向他们发送带有解决方案的DLL。
  3. 创建将动态加载这些DLL并测试它们的游戏(使用加载的算法播放1,000,000个游戏)。
  4. 跟踪游戏统计信息,了解哪种算法最佳。

答案 1 :(得分:0)

如果人工智能程序在像tic tac toe这样的游戏中竞争,通常每个程序都会限制总的“思考”时间(例如5分钟),并且超过其时间分配的程序将会丢失。

通常,程序通过某种简单的协议连接,而不是通过文本文件连接。该协议可以在标准I / O上运行,也可以通过TCP / IP套接字运行。

为了规范CPU使用率,您可以请求对于锦标赛游戏,所有程序都编译为在参考平台上运行,然后您提供两台相同的PC,两者都运行其中一个活跃的参赛者。然后,您的锦标赛成为可以在此参考平台上执行程序的要求。

答案 2 :(得分:0)

使用界面和标准编程语言 - 这样你就可以忘记那样的文本文件和bollocks。

答案 3 :(得分:0)

找出一个简单的SOAP协议。您可以简单地创建一个WSDL接口 - 使用Windows通信(WCF)或JMS轻松创建。

最简单的方法是让一台中央服务器作为裁判并跟踪时间。可以为每位玩家分配一个ID。

然后您可以拥有以下接口(使用WCF或JMS创建WSDL SOAP协议)

function  int requestGame(int opponentID, int color)
 - if called with color = -1, randomly assigns a color and returns it (0=white, 1=black).
 - otherwise you can request a color, and returns it if accepted, -1 if not accepted.
 - could use -1 to request random opponent.

function int getRemainingTime(int color)
- returns the time remaining on clock for color

function bool play(int color, int i, int j)

where color = 0  - white - 1 black,
i, j are board coordinates,
- returns true if it is a legal move

function bool won(int color)
- returns true if color has won the game.

没有集中式服务器会更复杂,因为他们必须就商定的胜利,时间等进行协商。

答案 4 :(得分:0)

我建议让每个AI都是可执行文件,使用标准输入和输出进行通信。游戏引擎(裁判)将世界的完整状态作为输入发送给AI_one,然后等待从标准输出移动。然后它将执行移动(如果合法)并重复AI_two的过程,然后在两者之间交替直到游戏结束。作为一个失败保障,裁判可以让一方失去,如果需要太长时间才能采取行动。

此方法由Google AI challenge使用。

这种方法的一个非常大的优势是人们可以用不同的语言编写AI,只要他们遵循商定的标准来进行移动。

答案 5 :(得分:0)

如果您的目标是在朋友之间进行AI编程竞赛,我建议您不要浪费时间设计和实施举办竞赛的框架。使用已存在的东西用于此目的。您可以跳过在框架中修复错误的所有痛苦和心痛,并直接进入有趣的部分:开发AI。

一个好的框架是Robocode游戏。看着你的机器人相互杀戮会比看他们玩井字游戏更有趣。

答案 6 :(得分:0)

你应该看看这个问题: What is the best Battleship AI?

在其中他创造了战舰AI竞赛/挑战。它的评级非常高,编码和观看也很有趣。

他使用锦标赛API http://tournaments.codeplex.com/参加比赛。

此外,重要的是允许提交多次竞争..即每次1000次。这消除了竞争对手的大量随机性和运气。