游戏人工智能的遗传算法
生物进化是一个奇妙的优化过程,通过选择淘汰、突变和遗传,产生适应环境变化的优秀物种。遗传算法是一种受生物进化思想启发的全局优化算法。
遗传算法简介:生成问题的描述,对要解决的问题进行编码。随机初始化总体X(0)=(x1,x2,… xn)。计算当前种群X(t)中每个个体的适应度F(xi),适应度表示个体的表现。使用选择算子产生优良种群goodX(t)。通过对goodX(t)应用遗传算子,产生新一代种群X(t+1)。t:= t+1;如果不满足终止条件,继续(3)。选择算子:选择算子按一定概率从种群中成对选择个体,个体xi被选中的概率Pi与其适应度值成正比。最常见的实现方法是轮盘赌模型。
例3:看黑白棋,我们采用自学习的方法模拟智能的实现。棋盘状态分别是敌方=-1,空方=0,我方=1。棋盘的大小为64,我们对每个格子使用5*5的局部棋子来评价其战略重要性。重要[node]=∑Wi*state[ i]采用线性方式。这样就得到一个W[64][25]的表,对于每一种棋盘情况(无论对错),它总能判断出战略重要性最大的点。这种编码方式兼顾了棋盘的全局位置特征和局部情况特征,大家可以自行改进。
选择30的人口规模,随机产生30个WIs [64] [25]。
初始训练阶段:对于每一个Wi[64][25],让它判断一些具体的战略点,判断力好,适应性大。训练后阶段:对抗别人,赢的越多,适应能力越大。选择适应度高的10产生优良群体goodX(t)。通过对goodX(t)应用遗传算子,产生了新一代群体X(t+1)(30个个体)。交叉遗传,可以选择父亲[0-32][25]和母亲[32-64][25]产生新的个体。突变遗传对父亲[64]25]中的值产生一些随机变化,从而产生新的个体。t = t+1;如果不满足终止条件,继续(3)。
这样就可以让程序自己学习,从而模拟智能。遗传算法的主体是对问题进行编码,然后通过进化进化出优秀的种群(相对于适应度而言)。编码方式由具体问题决定,进化方式影响进化范围和速度。通过这种方式的学习,模型一般可以得到这种编码方式下的最优编码,具有超越人工编码的性能。有兴趣的读者可以自行深入研究。