Beatris (敌对方块)

来自俄罗斯方块中文维基
本条目的主题不是2017年的节奏方块 BEATris 或2019年的节奏方块 Beatris

Beatris 是一个 Python 敌对方块 AI。

该 AI 将 Nuno Faria 的 Tetris-ai 作为对手,也可换用其他的方块 AI 智能体参与对抗。

制作者:Amogh Agnihotri、Reese Costis、Prajakta Joshi、Rebecca Phung、Suhas Raja、Ramya Rajasekaran。

Python 模块需求:Tensorflow、Tensorboard、Keras、Opencv-python、Numpy、Pillow、Tqdm、getch[注 1]

制作过程

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

注释

  1. pip install getch 需要 Microsoft Visual C++ 14.0 或以上。
  2. 用这个公式来计算 Beatris 应当生成哪一种方块。其中,死亡状态的值是 1 或 0。
  3. 这一点正是动态敌对块序最重要的难点所在。目前版本的 Beatris 仅仅是单一算法的伪动态逆转。

参考资料

外链