gym atari 游戏安装和使用

2023-11-02 09:40
文章标签 安装 使用 游戏 gym atari

本文主要是介绍gym atari 游戏安装和使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文链接: gym atari 游戏安装和使用

上一篇: 使用 tkinter 监听键盘和鼠标事件

下一篇: opencv HITMISS 基本操作

github

https://github.com/openai/gym

安装

pip install gym
pip install --no-index -f https://github.com/Kojoley/atari-py/releases atari_py

测试是否成功

import gym
import time'''
pip install gym
pip install --no-index -f https://github.com/Kojoley/atari-py/releases atari_py
'''
# env = gym.make('Pong-v0')
env = gym.make('SpaceInvaders-ram-v4')
# env = gym.make('Breakout-v4')for i_episode in range(1):env.reset()while True:env.render()action = env.action_space.sample()observation, reward, done, info = env.step(action)if done:print("Episode finished")breaktime.sleep(.1)
# 避免结束报错
env.close()

打砖块游戏

返回的observation 是一个 h,w,c 的uint8 数组 表示一幅游戏画面

0 等待

1 发射 小球 (如果没有的话,有的话什么都不做)

2 右

3 左

import gym
import time
env = gym.make('Breakout-v4')
# Discrete(4) set{0, 1, 2, 3}
print(env.action_space)
# Box(210, 160, 3)
print(env.observation_space)for i_episode in range(1):env.reset()while True:env.render()action = env.action_space.sample()observation, reward, done, info = env.step(action)if done:print("Episode finished")breaktime.sleep(.05)
# 避免结束报错
env.close()

3b632556260412cebb53922f5dc6b03bdd7.jpg

随机动作采样,符合均匀分布

import gym
from collections import Counter
env = gym.make('Breakout-v4')a = []
for i_episode in range(1000):env.reset()action = env.action_space.sample()observation, reward, done, info = env.step(action)a.append(action)if done:env.reset()print(Counter(a))Counter({0: 255, 1: 253, 3: 251, 2: 241})

手动玩, 标准动作

ACTION_MEANING = {0 : "NOOP",1 : "FIRE",2 : "UP",3 : "RIGHT",4 : "LEFT",5 : "DOWN",6 : "UPRIGHT",7 : "UPLEFT",8 : "DOWNRIGHT",9 : "DOWNLEFT",10 : "UPFIRE",11 : "RIGHTFIRE",12 : "LEFTFIRE",13 : "DOWNFIRE",14 : "UPRIGHTFIRE",15 : "UPLEFTFIRE",16 : "DOWNRIGHTFIRE",17 : "DOWNLEFTFIRE",
}


通过线程 实现控制,但是不是很流畅

import gym
import time
from threading import Threadclass Game(Thread):def __init__(self):super(Game, self).__init__()self.env = gym.make('Breakout-v4')self.env.reset()self.action = 0def run(self):while True:self.env.render()observation, reward, done, info = self.env.step(self.action)if done:print("Episode finished")breaktime.sleep(.2)g = Game()
g.start()
print('start')while True:s = input('action:\n')if s != '':print(s, int(s))g.action = int(s)

使用多线程

一个线程渲染游戏画面,主线程获取键盘事件并控制游戏中的动作

注意执行动作返回的reward 是该次动作的奖励,只有该动作打到砖块后才会返回正值,全局奖励需要进行求和

import gym
import time
from threading import Thread
from tkinter import *class Game(Thread):def __init__(self):super(Game, self).__init__()self.env = gym.make('Breakout-v4')self.env.reset()self.action = 0self.total_reward = 0def run(self):while True:self.env.render()observation, reward, done, info = self.env.step(self.action)self.total_reward += rewardif done:print("Episode finished")print(self.total_reward)breaktime.sleep(.05)g = Game()
g.start()
print('start')root = Tk()def key(event):# print(event.char)key_map = {'w': 1,  # 发射's': 0,  # 停止'a': 3,  # 左'd': 2  # 右}if event.char != '':g.action = key_map[event.char]print(f'reword:{g.total_reward}')frame = Frame(root, width=100, height=100)
frame.focus_set()
frame.bind("<Key>", key)
frame.pack()
root.mainloop()

这篇关于gym atari 游戏安装和使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/329732

相关文章

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

Python中Flask模板的使用与高级技巧详解

《Python中Flask模板的使用与高级技巧详解》在Web开发中,直接将HTML代码写在Python文件中会导致诸多问题,Flask内置了Jinja2模板引擎,完美解决了这些问题,下面我们就来看看F... 目录一、模板渲染基础1.1 为什么需要模板引擎1.2 第一个模板渲染示例1.3 模板渲染原理二、模板

浅析如何使用xstream实现javaBean与xml互转

《浅析如何使用xstream实现javaBean与xml互转》XStream是一个用于将Java对象与XML之间进行转换的库,它非常简单易用,下面将详细介绍如何使用XStream实现JavaBean与... 目录1. 引入依赖2. 定义 JavaBean3. JavaBean 转 XML4. XML 转 J

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设