博弈:
以前看围棋比赛, 常有人评价棋手水平高: 大局观强(评估局面好), 算路精准(计算步数深, 实战效果好)。 他山之石可以攻玉, 对弈类游戏的AI本质上也是在评估局面, 博弈深度这两点上做足了文章。
(一)评估函数:
让我们先来谈谈局面评估, 那如何从程序的角度去合理评估游戏的局势呢?
首先局面的好坏, 需要综合考虑多个因素(权重不同, 不同阶段重要性的变化), 其次因素影响力需转化为数值来衡量。
为了简化模型, 我们引入评估函数G(s), s为当前的局面, G(s)为当前局面的评估值。
- G(s) = a1 * f1(s) + a2 * f2(s) + ... + an * fn(s)
负极大值算法伪码:
- // 负极大值算法
- 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;
- }
- return alpha;
- }
- }
- alpha = value;
- }
- return beta;
- if ( value >= beta ) {
- // alpha + beta剪枝点
- if ( value > alpha ) {
- unmakemove(S)
- value = -negamax(S, depth - 1, -beta, -alpha);
- S = makemove(S);
- foreach ( move in candidate list ) {
- // 遍历每一个候选步
- }
- return evaluation(S);
- if ( gameover(S) depth == 0 ) {
- // 游戏是否结束 探索的递归深度是否到边界
- int negamax(GameState S, int depth, int alpha, int beta) {
展望:
有了评估函数和博弈树后, 其游戏AI有了飞跃的进步, 但一山更有一山高, 我们是否能够更进一步呢?
对于评估函数, 我们当前的策略是基于经验, 选择评估因素和权重分配。 能否用机器学习的方法,自动实现因素(特征)选择, 权重系数合理分配呢?
而对于博弈算法本身, 是否还有优化的地方? 搜索深度和搜索分支的广度如何权衡?
最重要的如何设置进阶的AI难度, 增强用户的体验?
因篇幅受限, 决定放到下一篇博文中。
总结:
为何选择黑白棋作为对弈类游戏AI解说的对象, 一方面游戏规则简单, 另一方面其评估模型容易构建, 且其搜索分支少+搜索深度深, 这些对快速实现并理解博弈游戏的AI核心算法有非常大的帮助。 该博文主要讲述了评估函数和博弈树的原理和优化。 下文讲着重讲述下 博弈游戏的AI如何学习, 以及性能优化的进阶篇。
相关阅读:
游戏行业的人工智能设计:AI的设计和实施
游戏人工智能开发之6种决策方法
![锐亚教育](http://www.insideria.cn/files/default/2017/03-19/164933d4e4bd117214.jpg)
锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛
- 还没有人评论,欢迎说说您的想法!