C# 我如何创建一个测试来查看我的a.I.是否完美?

C# 我如何创建一个测试来查看我的a.I.是否完美?,c#,recursion,artificial-intelligence,greedy,C#,Recursion,Artificial Intelligence,Greedy,我做了一个tic tac toe a.I.给定每个板状态,我的a.I.将返回一个确切的移动位置。 我还制作了一个函数,可以循环使用a.I.制作的所有可能的剧本 这是一个递归函数,让a.I.对给定的棋盘进行移动,然后让另一个玩家进行所有可能的移动,并为每一个可能的移动调用一个新棋盘本身的递归函数 我这样做是为了当A.我先走,当另一个先走。。。把这些加在一起。我最终有418场可能的胜利,115场可能的平局,0场可能的失败 但现在我的问题是,我如何最大限度地提高胜利的数量?我需要将这个统计数据与其他数

我做了一个tic tac toe a.I.给定每个板状态,我的a.I.将返回一个确切的移动位置。 我还制作了一个函数,可以循环使用a.I.制作的所有可能的剧本

这是一个递归函数,让a.I.对给定的棋盘进行移动,然后让另一个玩家进行所有可能的移动,并为每一个可能的移动调用一个新棋盘本身的递归函数

我这样做是为了当A.我先走,当另一个先走。。。把这些加在一起。我最终有418场可能的胜利,115场可能的平局,0场可能的失败


但现在我的问题是,我如何最大限度地提高胜利的数量?我需要将这个统计数据与其他数据进行比较,但我不知道该与什么进行比较。

我的感觉是,你引用的数据已经相当不错了。两个专业的井字游戏玩家总是以平局告终,如果你的对手知道如何玩游戏,就没有办法迫使你获胜

更新


也许有一种更优雅的方法来证明你的人工智能的正确性,但最直接的方法是蛮力法。只需将所有可能的棋盘位置列为博弈树,并修剪直接导致损失的分支。然后,对于树中的每个分支,您可以计算出跟随该分支而获得胜利的概率。然后你只需要在每个板位上测试你的人工智能,确保它选择的分支具有最高的获胜概率。

你所做的是比人工智能更多的线性优化……我不会在这里描述Tic Tac Toe的所有线性代数,网上有很多例子

因此,使用线性代数,你不必证明你的结果(搜索神奇的统计数据等),因为你的结果可以通过在原始方程中注入简单的解来验证

总之,有两种情况:

  • 您使用的是简单的“演绎”逻辑(实际上是非形式线性代数公式):如果不查看代码,我们无法找到一种现成的方法来检查结果编辑:正如安德鲁·库珀(Andrew Cooper)所建议的,暴力可以是一种随时可用的方法,而无需查看代码

  • 您正在使用正式的线性代数公式:您的结果可以通过在原始方程中注入简单的解决方案来验证


你唯一可以比较的是一个潜在的移动与另一个移动。每当轮到计算机采取行动时,让它从那一点开始玩所有可能的游戏,并选择能带来最高可能获胜数量的行动。你不可能总是赢,但你可以给对手更多的机会做出错误的动作。

或者,你可以在下面的链接中尝试tic tac toe算法:

鉴于我们知道

  • 不能强求胜利
  • 有了最佳策略,你就不会输
你的AI已经被证明是最佳的,如果

  • 你在和整棵树比赛时确实搜索过它
  • 而且你的AI是确定性的(如果它在特定阶段掷骰子,你就必须与所有的组合对抗)
它没有输,你不能要求它赢。胜利并不算在内,因为你的全树搜索也包含了坏的动作。就这些,你完了

只是为了好玩:

如果你对赢/平/输一场比赛的机会没有先验知识,那么一个常见的策略就是坚持保留失去的位置。在下一场比赛中,你会尽量避开他们。如果你无法避免移动到丢失的位置,你会找到另一个位置。通过这种方式,你可以学会不输于某个策略(如果可能的话),或者避免策略中的错误。

你应该从观察移动9始终是强制的开始:棋盘上只有一个空方块。移动也可以被认为是强制的,因为在七次移动之后,可能有三种情况:

  • O
    可以在下一步中获胜,在这种情况下需要获胜
  • X
    放置在剩余的两个方格中的任何一个方格中,将赢得
    X
    的游戏,在这种情况下,
    O
    无论下一步如何都将失败
  • X
    没有或只有一条胜利之路,在这种情况下,
    O
    阻塞以强制平局
这意味着游戏在最多七步后结束

还要注意,只有三个打开动作:中间、角落或侧面。无论您选择四个角或边中的哪一个角或边,都无关紧要,因为板可以旋转以匹配“标准”开口(左上角或顶部的中间)

现在可以构建状态分析代码。从三个可能的开口中的每一个开始,使用移动时打开的所有方块回溯最多六个额外的移动进行搜索。每次移动后,分析位置,查看
X
O
是否已经赢了;马克以
X
作为Wx获胜,以
O
作为Wo获胜。其余的位置尚未确定

不要在Wx或Wo后探索位置:只需返回到上一步,由相应的一方报告胜利

到达第七步时,静态分析该位置,以确定上述三种情况是否适用,将该位置标记为Wx、Wo或平局

现在进入最重要的一步:当你回溯到玩家的移动
N-1

  • 如果您尝试的某个移动使下一级别的所有位置都成为Wp,则将当前位置也声明为Wp
  • 如果你尝试的所有动作都导致对手获胜,那么宣布当前位置为对手获胜
  • 否则,将当前位置声明为绘图,并返回t