Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm Tic Tac Toe启发式人工智能_Algorithm_Artificial Intelligence_Tic Tac Toe_Heuristics - Fatal编程技术网

Algorithm Tic Tac Toe启发式人工智能

Algorithm Tic Tac Toe启发式人工智能,algorithm,artificial-intelligence,tic-tac-toe,heuristics,Algorithm,Artificial Intelligence,Tic Tac Toe,Heuristics,我为3x3井字游戏设计了简单的人工智能。然而,我既不想做完整的搜索,也不想做MinMax。取而代之的是,我想到了一种启发式方法,它将评估所有9个字段的值,然后AI将选择值最高的字段。问题是,我完全不知道如何确定它是否是一个完美(无与伦比)的算法 详情如下: 每个字段在网格上都有几个WinPath。中间一个有4个(水平、垂直和两条对角线),角落各有3个(水平、对角线和一条垂直),边上各只有2个(水平和垂直)。每个字段的值等于其WinPath值之和。WinPath值取决于其内容: 空:[| |]-

我为3x3井字游戏设计了简单的人工智能。然而,我既不想做完整的搜索,也不想做MinMax。取而代之的是,我想到了一种启发式方法,它将评估所有9个字段的值,然后AI将选择值最高的字段。问题是,我完全不知道如何确定它是否是一个完美(无与伦比)的算法

详情如下: 每个字段在网格上都有几个WinPath。中间一个有4个(水平、垂直和两条对角线),角落各有3个(水平、对角线和一条垂直),边上各只有2个(水平和垂直)。每个字段的值等于其WinPath值之和。WinPath值取决于其内容:

  • 空:
    [| |]
    -1分
  • 一个符号:
    [X | |]
    -10点
    //可以是任何地方的任何符号
  • 两个不同的符号:
    [X | O |]
    -0点
    //它们可以以任何可能的方式排列
  • 两个相同的对手符号:
    [X | X |]
    -100分
    //以三种方式中的任何一种排列
  • 两个相同的“我的”符号:
    [O|O|]
    -1000点
    //以三种方式中的任何一种排列
例如,通过这种方式,开始情况的值如下所示:

 3 | 2 | 3 
---+---+---
 2 | 4 | 2 
---+---+---
 3 | 2 | 3 
但是,后面的一个可能是这样的(X正在移动):

那么,有没有可靠的方法来确定这是一个完美的算法,还是有任何缺点


另外,我试图(从玩家的角度)创造一个叉子的情况,这样我就可以打败这个人工智能,但我失败了。

说只有362880个可能的井字游戏。证明你的算法的蛮力方法是彻底搜索游戏树,让你的对手在每个回合尝试每一个可能的动作,看看你的算法是否输过(如果完美的话,保证赢或平)。空间足够小,程序可以很快完成这项工作。当然,然后你将面临证明你的测试程序是正确的。

要知道你的机器人是否足够好,你必须玩很多游戏,机器人对顶级玩家,机器人对市场上最好的机器人(通常用于象棋或围棋等复杂的游戏)

你试过这个吗(我先玩)

对吧?

   |   |   
---+---+---
   | X |   
---+---+---
   |   | O 

 O |20 |30 
---+---+---
 20| X |20 
---+---+---
 30|20 | O 
如果我能很好地理解的话,下一步就要开始了

 O |20 | X 
---+---+---
 20| X |20 
---+---+---
 30|20 | O 
从这里我赢了


如果这个传球(如果我错过了什么…)使你的解决方案看起来很完美

你可以玩所有的井字游戏,看看你的算法是否强制平局。@Hurkyl+1,感谢你打败了我。我必须回答,因为当时我没有代表评论。好吧,如果我坚持这个选择,我最终会这么做。然而,我试图避免它…:我错过了这个严重。虽然您在第一个表中犯了错误(应该是:
12,2,12 | 2,13,11 | 12,11,O
),但这没有什么区别。我怀疑我应该以某种方式保护自己免受fork攻击,但我无法用这个算法重现fork情况。谢谢:)
   |   |   
---+---+---
   | X |   
---+---+---
   |   | O 

 O |20 |30 
---+---+---
 20| X |20 
---+---+---
 30|20 | O 
 O |20 | X 
---+---+---
 20| X |20 
---+---+---
 30|20 | O