154707pwsfux5lh5dsssfc.png
  博弈:

  以前看围棋比赛, 常有人评价棋手水平高: 大局观强(评估局面好), 算路精准(计算步数深, 实战效果好)。 他山之石可以攻玉, 对弈类游戏的AI本质上也是在评估局面, 博弈深度这两点上做足了文章。

  (一)评估函数:

  让我们先来谈谈局面评估, 那如何从程序的角度去合理评估游戏的局势呢?

  首先局面的好坏, 需要综合考虑多个因素(权重不同, 不同阶段重要性的变化), 其次因素影响力需转化为数值来衡量。

  为了简化模型, 我们引入评估函数G(s), s为当前的局面, G(s)为当前局面的评估值。

 

 

  1. G(s) = a1 * f1(s) + a2 * f2(s) + ... + an * fn(s)

  负极大值算法伪码:

 

 

  1. // 负极大值算法
    • int negamax(GameState S, int depth, int alpha, int beta) {
      • // 游戏是否结束 探索的递归深度是否到边界
        • if ( gameover(S) depth == 0 ) {
          • return evaluation(S);
            • }
              • // 遍历每一个候选步
                • foreach ( move in candidate list ) {
                  • S = makemove(S);
                    • value = -negamax(S, depth - 1, -beta, -alpha);
                      • unmakemove(S)
                        • if ( value > alpha ) {
                          • // alpha + beta剪枝点
                            • if ( value >= beta ) {
                              • return beta;
                                • }
                                  • alpha = value;
                                    • }
                                      • }
                                        • return alpha;
                                          • }
复制代码
  展望:

  有了评估函数和博弈树后, 其游戏AI有了飞跃的进步, 但一山更有一山高, 我们是否能够更进一步呢?

  对于评估函数, 我们当前的策略是基于经验, 选择评估因素和权重分配。 能否用机器学习的方法,自动实现因素(特征)选择, 权重系数合理分配呢?

  而对于博弈算法本身, 是否还有优化的地方? 搜索深度和搜索分支的广度如何权衡?

  最重要的如何设置进阶的AI难度, 增强用户的体验?

  因篇幅受限, 决定放到下一篇博文中。

  总结:

  为何选择黑白棋作为对弈类游戏AI解说的对象, 一方面游戏规则简单, 另一方面其评估模型容易构建, 且其搜索分支少+搜索深度深, 这些对快速实现并理解博弈游戏的AI核心算法有非常大的帮助。 该博文主要讲述了评估函数和博弈树的原理和优化。 下文讲着重讲述下 博弈游戏的AI如何学习, 以及性能优化的进阶篇。

  相关阅读:

  游戏行业的人工智能设计:AI的设计和实施

  游戏人工智能开发之6种决策方法

锐亚教育

锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛