五子棋算法总结

看了这么多篇关于五子棋人机对战算法分析,在这里做一个总结:


总的来说,都是先给每种棋局状态赋予一个权重:

1.五子:100

2.活四:80

3.活三 : 70

4.冲四 : 60

5.死三: 50

6.活二  : 40

7.死二 :30

8. 单子 :0

再枚举每个空格在机器落子和人落子所造成的棋局状态所获权值的分别大小,来决定是攻还是守!


1.  只预测当前步骤好坏的一个比较优的方法

高级AI 思索:将每个位置进行分析,假设AI落子在该位置,用以上打分规则为AI打分,并将得到的分数加一。

然后,假设玩家落子在该点,为玩家打分,然后将所有的分值汇总。取最高分作为这个位置的估分,

接下来就是取分数最高的位置下棋了。“位置估分”,下棋的时候,既可以考虑到自己攻击对手,

又能考虑到对对手的防御,可以说,很多时候可以顶上考虑两步的AI


2.将对手分为:是否可预测必须跟着我方走,如果可预测(即活四,双三,活三),那么我只用简单的枚举那种走法更好,

如果不能,那就判定是攻还是守了,可用上面的那种方法


3.先将所有的获胜情况找出来,假如是10*10的矩阵,那么就用192中获胜的方法,dp[10][10][192]来记录还差多少颗子才能填满这5颗;

遍历该位置所在的每一种获胜组合,根据这个组合中已经拥有的己方棋子数1到4分别加不同分数,

最后将这些所有的获胜组合所得出的分数相加就是该位置的分数


有禁手的做法:





你可能感兴趣的:(五子棋算法总结)