Scratch3之AI集成 - flappy bird AI版本
AI神秘且有趣,我们以一个经典的游戏flappy bird集成AI,实现自训练成长的聪明的笨鸟。先上效果:
初始化的笨鸟拥有分身,每个分身都有自我学习功能,根据自己的移动轨迹和得分情况进行汇总,进行新一代的笨鸟的迭代,基本经过数十轮的训练和迭代,能完成高智慧的笨鸟,自我闯关能力强。
需要了解的AI知识:神经网络进化(Neuroevolution)- 神经网络进化wiki
游戏实现:
1. 实例化 Neuroevolution 对象(图一的右上角 init 部分),其中定义了每代鸟的数量,以及网络模型中每一层的神经元数量。一般神经网络具有分层结构,实例化的 network 分别定义了输入层(input layer)、隐藏层(hidden layer)和输出层(output layer)中的神经元(neurons)数量。定义的每只鸟的权重随机。
2. 每只鸟进行自动运行,通过上下运动,判断与管道是否会碰撞,如果碰撞后则认为死亡,将network状态和score绑定,将score降序排列作为基因保存起来。
3. 遍历所有鸟,如果都死亡,则保存这代鸟的得分,创建开始新一代。
4. 经过进化算法一代代的迭代,network 的表现也会越来越符合预期。
游戏代码块组成:
1. 初始化模型、设置AI角色复制的分身术,启动GameAI程序
2. AI角色使用特征
3. AI角色使用行为
4. 当每轮执行,AI角色牺牲后进行决策记录
5. 异步实时计算AI角色是否牺牲(是否撞到管道)
6. 当一轮中所有AI角色都牺牲了,优化模型并保存模型,重启GameAI,进行下一代笨鸟的训练
核心代码组成:
Generation.js -- 训练中代数的js文件
Network.js -- 神经网络的js文件
AISprite.js -- AI角色(小鸟)的js文件