对弈类游戏的人工智能(2)--学习算法

前言:
  对弈类游戏的智能算法, 网上资料颇多, 大同小异. 我写这篇文章, 一方面是对当年的经典<<PC游戏编程(人机博弈)>>表达敬意, 另一方面, 也想对自己当年的游戏编程人生做下回顾.
  上一篇博文:对弈类游戏的人工智能(1)--评估函数+博弈树算法, 着重讲述了评估函数+博弈树, 本文着重讲述学习算法, 以及性能优化和游戏性问题.
  

分析:
  评估函数的引入, 为游戏AI提供了理论基础.

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

  但评估函数的选定并非简单, 其面临的问题如下:
  1). 评估因素的选择, 如何挑选, 因素是否越多越好
  2). 对评估因素得分的归一化处理
  3). 如何进行合理的权重系数分配
  这些都是需要思考和优化的地方, 归纳而言就是特征(因素)选择, 权重系数学习.
  有人提到了强化学习, 通过与环境的交互反馈来学习模型, 参见博文: "几种智能算法在黑白棋程序中的应用∗". 
  
  当然机器学习中的随机算法: 模拟退火/遗传算法, 也是有效的方式, 而且其更简单, 也更容易理解, 作者将在这边重点阐释.

遗传算法:
  遗传算法(GA)是模拟自然界的进化过程而实现的."物竞天择, 适者生成"是其永恒的定律.
  首先让我们来定义个体向量(染色体):

评估函数各个特征的权重系数构成权重向量 (a1, a2, a3, ..., an), 视为个体向量

  其必须满足的约束如下:
  • 权重向量中的系数和恒为1 (a1 + a2 + ... + an = 1)
  • 经变异/交叉操作后, 系数权重和不为1, 则归一化过程统一为:

ai‘ = ai / ∑ ai (i = 0, 1, 2, ..., n) 

  再来定义操作子:
  • 复制: 下一代拷贝上一代的权重系数向量即可
  • 变异: 随机选定某个权重系数ai, 其值设定为某个(0~1)的随机值, 再进行归一化处理
  • 交叉: 选定两个个体向量, 按概率进行对位权重系数交换, 再进行归一化处理.
  适应度函数: 个体与其他个体的互相PK, 总得分即为其适应度值.

  1). 初始阶段: 选择N个随机值的向量个体
  2). 互相PK阶段: N个向量互相PK, 获取各自的适应度值
  3). 进化阶段: 按适应度值排序, 引入淘汰率/变异率等, 进行复制/变异/交叉操作, 诞生新的N个个体
  持续迭代2), 3)两阶段, 直到选取合适的个体.
  该过程能达到我们的学习需求, 当然我们可以继续做如下优化:
  • 引入陪跑员机制: 依经验挑选精英个体, 参加PK阶段, 用于评估个体的适应度, 但不参与进化(复制, 变异, 交叉)过程.
  • 按适应值概率进化: 防止群体中极少数适应度高的个体被复制和遗传而达到局部最优解的情况.

  复制/变异/交叉的比率, 以及群体数, 都会影响迭代次数和收敛效果.

总结:
  使用遗传算法进行参数学习后, 可以合理地分配权重系数, 那事先说好的特征挑选呢? 简而言之, 通过筛选掉权重系数近似为0的特征即可, ^_^.
  原本想继续讲下游戏AI的等级分类, 对博弈树的高级优化, 发现篇幅受限, 那就放到下一篇吧.

写在最后:
  
如果你觉得这篇文章对你有帮助, 请小小打赏下. 其实我想试试, 看看写博客能否给自己带来一点小小的收益. 无论多少, 都是对楼主一种由衷的肯定.

  

时间: 2024-12-21 02:16:46

对弈类游戏的人工智能(2)--学习算法的相关文章

对弈类游戏的人工智能(5)--2048游戏AI的解读

前言: 闲得没事, 网上搜"游戏AI", 看到一篇<<2048游戏的最佳算法是?来看看AI版作者的回答>>的文章. 而这篇文章刚好和之前讲的对弈类游戏AI对应上. 于是有了想法, 想把它作为一个实例来进行解读, 从而对之前偏理论的文章做个总结. 承接上四篇博文: (1). 评估函数+博弈树算法 (2). 学习算法 (3). 博弈树优化 (4). 游戏AI的落地 可能有些人会疑惑? 2048并非对弈类类型? 传统的博弈树模型是否能应用于此? 客官莫急, 让我们来一

对弈类游戏的人工智能(一)

前言: 对弈类游戏的智能算法, 网上资料颇多, 大同小异. 我写这篇文章, 并非想做互联网的搬运工. 而是想对当年的经典<<PC游戏编程(人机博弈)>>表达敬意, 另一方面, 也想对自己当年的游戏编程人生做下回顾. 这边我们以黑白棋游戏为例, 从博弈和学习两方面来阐述游戏AI的编写要点. 本文侧重于讲述博弈(评估函数+博弈算法). 博弈: 以前看围棋比赛, 常有人评价棋手水平高: 大局观强(评估局面好), 算路精准(计算步数深, 实战效果好). 他山之石可以攻玉, 对弈类游戏的AI

对弈类游戏的人工智能(3)--博弈树优化

前言: 对弈类游戏的智能算法, 网上资料颇多, 大同小异. 然而书上得来终觉浅, 绝知此事要躬行. 结合了自己的工程实践, 简单汇总整理下. 一方面是对当年的经典<<PC游戏编程(人机博弈)>>表达敬意, 另一方面, 也想对自己当年的游戏编程人生做下回顾. 承接上两篇博文: (1). 评估函数+博弈树算法 (2). 学习算法 这篇博文回归到博弈树这边, 具体阐述下博弈树的优化手段, 为了游戏性添加的合理技巧. 启发搜索: 博弈树本质是极大极小的求解过程, 而alpha+beta剪枝

小妖精的完美游戏教室——人工智能,A*算法,实现篇

//================================================================//// Copyright (C) 2017 Team Saluka// All Rights Reserved//// Author:小妖精Balous////================================================================ using System.Collections;using System

小妖精的完美游戏教室——人工智能,A*算法,导航网络篇

//================================================================//// Copyright (C) 2017 Team Saluka// All Rights Reserved//// Author:小妖精Balous////================================================================ using System.Collections;using System

小妖精的完美游戏教室——人工智能,A*算法,结点篇

//================================================================//// Copyright (C) 2017 Team Saluka// All Rights Reserved//// Author小妖精Balous////================================================================ using System.Collections;using System.

小妖精的完美游戏教室——人工智能,A*算法,启发因子篇

//================================================================//// Copyright (C) 2017 Team Saluka// All Rights Reserved//// Author:小妖精Balous // //Summary:这里一共列出3种启发因子,启发因子决定搜索精确度与CPU开销////==========================================================

谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现

一.前言 <码神联盟>是一款为技术人做的开源情怀游戏,每一种编程语言都是一位英雄.客户端和服务端均使用C#开发,客户端使用Unity3D引擎,数据库使用MySQL.这个MOBA类游戏是笔者在学习时期和客户端美术策划的小伙伴一起做的游戏,笔者主要负责游戏服务端开发,客户端也参与了一部分,同时也是这个项目的发起和负责人.这次主要分享这款游戏的服务端相关的设计与实现,从整体的架构设计,到服务器网络通信底层的搭建,通信协议.模型定制,再到游戏逻辑的分层架构实现.同时这篇博客也沉淀了笔者在游戏公司实践五

人工智能,神经网络算法,机器学习,深度学习三者关系

对于很多初入学习人工智能的学习者来说,对人工智能.机器学习.深度学习的概念和区别还不是很了解,有可能你每天都能听到这个概念,也经常提这个概念,但是你真的懂它们之间的关系吗?那么接下来就给大家从概念和特点上进行阐述.先看下三者的关系. 人工智能包括了机器学习和深度学习,机器学习包括了深度学习,他们是子类和父类的关系. 下面这张图则更加细分. 2.什么是人工智能 人工智能(ArtificialIntelligence),英文缩写为AI.是计算机科学的一个分支.人工智能是对人的意识.思维的信息过程的模