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

Artificial intelligence 多个AI引擎之间的进程间通信,artificial-intelligence,game-engine,Artificial Intelligence,Game Engine,我想在一些朋友之间安排一次人工智能竞赛。 比如说抽搐, 每个玩家编程一个方法,获得棋盘和一个符号(X\O),并返回他想在轮到他的时候玩的地方。 现在我的问题是如何在另一个程序中“连接”两个AI,这样我就可以测试所有用户,看看谁的代码最好。 我想到的唯一方法是与文本文件通信——所有AI都在后台运行线程,并检查文本文件上的更改,引擎将游戏细节(回合、棋盘、分数、玩家)汇总到文本文件 如何才能做得更好? 还有一件事,在人工智能竞赛中,每个回合都有一个时间框架是很常见的? (因为AI程序将在不同的计算机

我想在一些朋友之间安排一次人工智能竞赛。 比如说抽搐, 每个玩家编程一个方法,获得棋盘和一个符号(X\O),并返回他想在轮到他的时候玩的地方。 现在我的问题是如何在另一个程序中“连接”两个AI,这样我就可以测试所有用户,看看谁的代码最好。 我想到的唯一方法是与文本文件通信——所有AI都在后台运行线程,并检查文本文件上的更改,引擎将游戏细节(回合、棋盘、分数、玩家)汇总到文本文件

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

如果AI程序在tic tac toe这样的游戏中竞争,通常每个程序的总“思考”时间有限(例如5分钟),超过其时间分配的程序将失败

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


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

使用接口和标准编程语言-这样您就可以忘记文本文件和诸如此类的废话。

想出一个简单的SOAP协议。您只需创建一个WSDL接口,使用windows communication foundatoin(WCF)或JMS即可轻松创建

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

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


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

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

如果您正在寻找“最佳的Tic-Tac-Toe算法”,您可以简单地:

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

  • 定义一个接口(例如:ITitActoSolver)
  • 让您所有的朋友以他们自己的方式实现它,并将DLL及其解决方案发送给您
  • 创建将动态加载这些DLL的游戏,并测试它们(使用加载的算法玩1000000个游戏)
  • 跟踪游戏统计信息,看看哪种算法最好

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

    此方法用于


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

    如果你的目标是在朋友之间进行AI编程竞赛,我建议你不要浪费时间设计和实施举办比赛的框架。使用已经存在的东西来达到这个目的。您可以跳过修复框架中bug的所有痛苦和心痛,直接进入有趣的部分:开发人工智能


    一个好的框架就是游戏。看着你的机器人互相残杀比看着他们玩井字游戏有趣得多。

    你应该看看这个问题:

    在其中,他创建了一个战舰AI竞赛/挑战。它的收视率很高,而且编写代码和观看都很有趣

    他使用锦标赛API来进行比赛


    此外,允许提交的内容进行多次竞争也很重要。。每次1000次。这消除了竞争对手的许多随机性和运气。

    这个问题不是关于“构建AI引擎”。它是关于连接/协调独立开发的应用程序。请重新命名这个。我也会选择比tic-tac-toe更难的东西。要么创建自己的游戏,要么找一款在线解决方案不多的游戏,以减少人们复制解决方案的次数。
    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.