算法:采取MinMax算法,利用Alpha-Beta算法减枝。
原理:首先,算法是用于计算出当前下棋所产生的最好价值。
那么,定义自己的价值越高数值越大(正),对手的价值越高数值越小(负)
下棋是你一手我一手的下,根据下棋的步骤,构建决策树
所谓决策树就是:每个节点是当前局面的评分,节点的基数层该自己下棋,偶数层该对手下棋
那么,在遍历决策树时,首先要计算第一层能获取的最大值Max
要想获得第一层,那就遍历第二层(第二层为根节点所能产生的所有走法的评分)
在第二层中找到最小的那个Min(为什么要找最小的?因为第二层是对手下棋,对手最好的走法,对你来说最坏)
要想找第二层的最小值,那就得遍历每个节点的第三层,找到第三层中最大的值(因为该你走),然后比较所有Max中Min的那一个
这一句可能不太清楚,是说对手会遍历你下一手的所有走法,然后找到最差的那个(对他最好)。所以是在Max中找Min
之后一直这样遍历
但是如果这样的话,节点数量会成指数倍增加。效率大大的下降了。
如果每次正常的走法有N个。
那么第一层节点的个数是1,第二层是N,第三层是N*N,第四层是N*N*N....第N层的节点数将会达到N的N次方。一辈子都算不完了
所以目前的做法有两个
1、限制搜索的层数,只搜索有限层(层数越高当然智能越高,速度也
原理:首先,算法是用于计算出当前下棋所产生的最好价值。
那么,定义自己的价值越高数值越大(正),对手的价值越高数值越小(负)
下棋是你一手我一手的下,根据下棋的步骤,构建决策树
所谓决策树就是:每个节点是当前局面的评分,节点的基数层该自己下棋,偶数层该对手下棋
那么,在遍历决策树时,首先要计算第一层能获取的最大值Max
要想获得第一层,那就遍历第二层(第二层为根节点所能产生的所有走法的评分)
在第二层中找到最小的那个Min(为什么要找最小的?因为第二层是对手下棋,对手最好的走法,对你来说最坏)
要想找第二层的最小值,那就得遍历每个节点的第三层,找到第三层中最大的值(因为该你走),然后比较所有Max中Min的那一个
这一句可能不太清楚,是说对手会遍历你下一手的所有走法,然后找到最差的那个(对他最好)。所以是在Max中找Min
之后一直这样遍历
但是如果这样的话,节点数量会成指数倍增加。效率大大的下降了。
如果每次正常的走法有N个。
那么第一层节点的个数是1,第二层是N,第三层是N*N,第四层是N*N*N....第N层的节点数将会达到N的N次方。一辈子都算不完了
所以目前的做法有两个
1、限制搜索的层数,只搜索有限层(层数越高当然智能越高,速度也