Beatris (Python, 2019)

来自俄罗斯方块中文维基
本条目的主题不是 BEATris (Steam 上一款以多连方块为主题的节奏游戏)

Beatris 是一个 Python 敌对方块 AI。
该 AI 将训练后的 Tetris-ai (Python, 2019) 作为敌手,可换用其他的方块 AI 智能体参与对抗。
该 AI 是一门数据科学课程的期末设计。

基本信息

原始 AI + 四连方块游戏环境代码来源:Tetris-ai (Python, 2019)
制作者:Amogh Agnihotri(第一作者)、Reese Costis、Prajakta Joshi、Rebecca Phung、Suhas Raja、Ramya Rajasekaran
Python 模块需求:Tensorflow、Tensorboard、Keras、Opencv-python、Numpy、Pillow、Tqdm、getch[注 1]

制作过程[注 2]

一、提出目标:创造一个生成敌对块序的 AI,使参与方块游戏的智能体(Agent)在“总消行数”这一指标上成绩变差。[1]
二、逆向思维假设:要使敌对 AI 摆脱 Hatetris 那样的固定策略,就要先参考一个足够好的智能体对手(下文称“敌人”)的策略。
三、选择敌人:具有强化学习性质的 Tetris-ai (Python, 2019)。
四、训练敌人:照常使用伪随机序列,测试关键指标和参数,向原作者的测试成绩对齐,但学习成绩不理想。
五、试寻专家方案:参考俄罗斯方块世界冠军的玩法,人为总结策略,主调场况参数,学习成绩依然不理想。
六、思路回调:敌对方块 AI 的敌人打出高分的关键是不死。当死亡惩罚分调高了 100 倍之后,敌人的学习成绩得到明显提高。
七、精炼关键参数:人为总结已有的测试结果和无限 O 块刷行死局的原因,将“方块堆高度”移出评分公式,以死亡代之。
八、验证拟定评分公式:评分 = -1 - (当前一手的消行数)2 + 0.25 (总落差均值 + 洞数) + 200 × 死亡状态。[注 3]
九、检验敌对效果:当块序由伪随机变成 Beatris 之后,敌人的平均消行数从 135 降至 18,最大消行数从 316000 降至 45。
十、总结未完成的工作:比较 Beatris 和 Hatetris 敌对 Tetris-ai (Python, 2019) 效果的差异;训练一个能够在伪随机块序下稳定无限消行的敌人;改进四连方块游戏环境的界面,训练 Beatris 对抗真人玩家[注 4]

注释和参考

  1. pip install getch 需要 Microsoft Visual C++ 14.0 或以上
  2. 这一章的内容整理自 AI 作者 Amogh Agnihotri 的 Beatris 介绍文章,地址见本条目参考一
  3. 用这个公式来计算 Beatris 应当生成哪一种方块。
    其中,死亡状态的值是 1 或 0。
  4. 这一点正是动态敌对块序最重要的难点所在。目前版本的 Beatris 仅仅是单一算法的伪动态逆转。
  1. Beatris: an Evil Tetris AI . 2020-06-20. [2022-06-16].

外链