Tetris AI (JavaScript, 2014)
“Tetris AI”意在提供一个易于识别的通称,不代表 AI 是官方的算法或隶属于任何(官方的)俄罗斯方块游戏。 |
Tetris AI 是一个 JavaScript 方块 AI。
这个 AI 呈专家指导风格,能在现代方块环境下稳定地无限消行,在 GitHub 上获得了较多的星数。
这个 AI 最终使用的专家参数结论来自遗传算法。
制作者:Yiyuan Lee(第一作者)、Philip Blyth、Kyle Zhou、cmacmillan。
求值过程
这一章的内容整理自 Yiyuan Lee 的 Tetris AI 介绍文章,地址见本条目参考一 |
一、预设专家评分标准:总楼高 A[注 1]、当前方块的消行数 B、洞数 C[注 2]、总落差 D[注 3]。
记所求的四个参数的向量为 p[注 4],四个专家评分标准数据的向量为 x,则得分函数 f(x) = p · x = aA + bB + cC + dD。
评分计算深度设为 2(只取一个预览块)。
二、比较评分:对于当前方块,如果两个朝向落点评分之间存在 f(x1) - f(x2) > 0 的关系,就认为前者是更好的落块点。
三、生成 p 的初始解:起始 p 数 = 1000,p 中的 abcd 的绝对值都取在 0–1 之间,符号分别为负正负负[注 5]。
四、适应度函数(Fitness function):按各 p 值为落块做决策,一局最多玩 500 块,记 fitness(p) = 消行数。
五、竞优:每次随机取 100 个 p 考察适应度并取前两名,不断重复,增加“优秀样本”。
六、加权平均杂交:p' = p1 · fitness(p1) + p2 · fitness(p2)。
两个父向量之间的适应度差异越大,后代向量的加权平均结果就越会偏向“更优秀的”那个父向量。
七、变异算子:赋予所有后代 5% 的变异率,参数变动幅度为 ±0.2,结果做归一化处理[注 6]。
八、末位淘汰:每当后代向量总数到达 300,就把表现最差的 300 个 p 删除,留下 1000 个更优秀的 p。
至这一步结束,遗传算法即可进入循环,可发展任意多次直到产出令人满意的结果。
九、确定结论参数:a = -0.510066,b = 0.760666,c = -0.356630,d = -0.184483。[1]
十、总结另有价值的信息:专家标准也有优劣之分,比如“楼高峰值”不如“总楼高”;
这套参数是 Tetris AI 在标准的现代方块环境下得到的,只要改变随机器等规则,结论就会不一样;
在比较两个不同的 AI 的性能时,一定要注意所应用的方块环境配置是否不同。
方块环境配置
SRS + 标准 10×22 场地 + 标准入场位置[注 7] + 7-Bag + 1 Next。
注释和参考
- ↑ Tetris AI – The (Near) Perfect Bot . 2013-04-14. [2022-06-19].