开放式健身房俄罗斯方块

gym-tetris的Python项目详细描述


体育俄罗斯方块

BuildStatusPackageVersionPythonVersionStableFormatLicense

俄罗斯方块的OpenAI Gym环境 基于 nes-py模拟器。

安装

gym-tetris的首选安装位置是pip

pip install gym-tetris

用法

Python

在尝试创建环境之前,必须导入gym_tetris。 这是因为健身房环境是在运行时注册的。默认情况下, gym_tetris环境使用完整的NES操作空间256 离散动作。为了限制这种情况,gym_tetris.actions提供 一个名为MOVEMENT(20个离散操作)的操作列表,用于 nes_py.wrappers.JoypadSpace包装。还有 SIMPLE_MOVEMENT减少了操作空间(6个操作)。具体细节, 见gym_tetris/actions.py

fromnes_py.wrappersimportJoypadSpaceimportgym_tetrisfromgym_tetris.actionsimportMOVEMENTenv=gym_tetris.make('Tetris-v0')env=JoypadSpace(env,MOVEMENT)done=Trueforstepinrange(5000):ifdone:state=env.reset()state,reward,done,info=env.step(env.action_space.sample())env.render()env.close()

注意:gym_tetris.make只是gym.make的别名 方便。

注意:删除训练代码中对render的调用 加速。

命令行

gym_tetris具有用于播放的命令行界面 使用键盘或均匀随机移动的环境。

gym_tetris -e <environment ID> -m <`human` or `random`>

环境

东北俄罗斯方块有两种游戏模式,即A型和B型。 A-type是标准的耐力俄罗斯方块游戏,B-type是街机风格的模式 代理人必须清除一定数量的行才能获胜。有三个 潜在的奖励流:(1)得分的变化,(2)数量的变化 线被清除,以及(3)增加板高的罚款。桌子 下面根据游戏模式定义了可用的环境(即, A型或B型)和所申请的奖励。

EnvironmentGame Modereward scorereward linespenalize height
^{}A-type
^{}A-type
^{}A-type
^{}A-type
^{}B-type
^{}B-type
^{}B-type
^{}B-type

info字典

step方法返回的info字典包含以下内容 按键:

KeyTypeDescription
^{}^{}the current piece as a string
^{}^{}the number of cleared lines
^{}^{}the current score of the game
^{}^{}the next piece on deck
^{}^{}statistics for each piece

引文

如果你在研究中使用它,请引用gym-tetris

@misc{gym-tetris,
  author = {Christian Kauten},
  title = {{Tetris (NES)} for {OpenAI Gym}},
  year = {2019},
  publisher = {GitHub},
  howpublished = {\url{https://github.com/Kautenja/gym-tetris}},
}

参考文献

以下参考资料有助于本项目的建设。

  1. Tetris (NES): RAM Mapdata crystal rom黑客攻击
  2. Tetris: Memory Addressesnes黑客。
  3. Applying Artificial Intelligence to Nintendo Tetris肉食斗士。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Hibernate:jpamodelgen生成java而不是类   java如何在第二次活动结束后显示广告?   javascript如何在linux或windows上将java导出到jar   java One ArrayList添加了2个不同的选项   AmazonWeb服务如何在java中使用AWS Textract检索pdf中存在的表   java为什么RecycleView中的水平项在单击时不起作用?   java计算如果存在映射   java在捕获的组上应用正则表达式   如何使用Java在MySQL的同一个表中插入来自不同类的值   java字符串中最常见的字母(大写和小写)   Spring SessionBean实例正在由java中的多个用户共享   使用Spring Boot将@WebInitParam中的值外部化   java一创建线程就开始执行(多线程)   java是安卓所需的系统权限。意图行动给你打电话?