OpenAI Gym入门与实操(3)

news2025/1/11 2:26:24

接前一篇文章:OpenAI Gym入门与实操(2)

本文内容参考:

Getting Started With OpenAI Gym | Paperspace Blog,

【强化学习】 OpenAI Gym入门:基础组件(Getting Started With OpenAI Gym: The Basic Building Blocks)_iioSnail的博客-CSDN博客

4. 与Environment进行交互

在本节中,我们将介绍Env类中帮助智能体与环境交互的函数。 与Environment进行交互换句话说就是打游戏。其主要通过调用env对象的函数来完成,其包含两个重要函数:

  • reset

此函数将环境重置为初始状态,并返回与初始状态相对应的环境观察结果。

重置环境,就是重置游戏。其会对环境进行状态初始化,并返回初始化后的observation。

注意:虽然是重置,但也是初始化,也就是env即使是第一次使用也要调用reset。

  • step

此函数将动作作为输入,并将其应用于环境,从而导致环境转换到新状态。

采取行动。就是让Agent采取一个动作,例如向前移动。step函数返回做完该动作后的信息,包括以下4个返回值:

  • observation:对环境状态的观察,即执行该动作后的游戏状态。
  • reward:执行作为step函数输入的动作后,从环境中获得的奖励,即执行该动作后得到的奖励。
  • done:(本次)游戏是否终止。如果为true,则需要结束模拟或重置环境以重新启动游戏。例如命都用完了,则游戏终止,done=True。
  • info:此项提供了取决于环境的附加信息,诸如剩余生命的数量或可能有助于调试的一般信息。。通俗地说就是一些额外的信息,例如还剩几条命等。不同的游戏info不同。

现在让我们看一个例子,说明上面讨论的概念。我们首先重置环境,之后检查观察结果。然后,我们应用一个操作并检查新的观察结果。 代码演示:

import matplotlib.pyplot as plt 

# reset the environment and see the initial observation
obs = env.reset()
print("The initial observation is {}".format(obs))

# Sample a random action from the entire action space
random_action = env.action_space.sample()

# # Take the action and get the new observation space
new_obs, reward, done, info = env.step(random_action)
print("The new observation is {}".format(new_obs))

(1)obs = env.reset()

重置环境,虽说是重置,第一次使用env前,也要调用reset,会返回与初始状态相对应的observation。

(2)random_action = env.action_space.sample()

从所有动作中随机选择一个,random_action。

(3)new_obs, reward, done, info = env.step(random_action)

调用step,执行上述动作,得到下一个状态。

输出结果如下:

The initial observation is [-0.48235664  0.]
The new observation is [-0.48366517 -0.00130853]

在本例中,我们的观察结果不是正在执行的任务的屏幕截图。在许多其它环境中(如我们将看到的雅达利),观察结果是游戏的屏幕截图。无论在这两种情况的哪一种中,如果要查看环境在当前状态下的外观,都可以使用渲染方法。

env.render(mode = "human")

这会在弹出窗口中显示当前状态下的环境。你可以使用close函数关闭窗口。

env.close()

如果想将游戏的屏幕截图显示为图像,而不是弹出窗口,则应将render函数的模式参数设置为rgb_array。

env_screen = env.render(mode = 'rgb_array')
env.close()

import matplotlib.pyplot as plt 
plt.imshow(env_screen)

 收集到目前为止我们已经涵盖的所有代码块,在MountainCar环境中运行代理的典型代码如下所示:

import time 

# Number of steps you run the agent for 
num_steps = 1500

obs = env.reset()

for step in range(num_steps):
    # take random action, but you can also do something more intelligent
    # action = my_intelligent_agent_fn(obs) 
    action = env.action_space.sample()
    
    # apply the action
    obs, reward, done, info = env.step(action)
    
    # Render the env
    env.render()

    # Wait a bit before the next frame unless you want to see a crazy fast video
    time.sleep(0.001)
    
    # If the epsiode is up, then start another one
    if done:
        env.reset()

# Close the env
env.close()

在本例中,我们只是采取随机行动,但你可以使智能体根据得到的观察结果做一些更智能的事情。

你也可以依据你的具体环境(Jupyter, Py等)来在上面的代码中使用env.render来增加实时动画,例如如果使用Google Colab,则你可以使用以下代码来显示动画:

apt install xvfb

pip install pyvirtualdisplay
from pyvirtualdisplay import Display
virtual_display = Display(visible=0, size=(1400, 900))
virtual_display.start()

%matplotlib inline
import matplotlib.pyplot as plt

from IPython import display

import time
import gym

env = gym.make('MountainCar-v0')

# 初始化环境
obs = env.reset()
img = plt.imshow(env.render(mode='rgb_array'))

# 让Agent进行1500次动作
for step in range(1500):
	# 选择一个随机的动作,这里可以替换成你训练好的智能算法
    action = env.action_space.sample()
    
	# 采取行动,然后得到下个状态
    obs, reward, done, info = env.step(action)
    
    img.set_data(env.render(mode='rgb_array'))
    display.display(plt.gcf())
    display.clear_output(wait=True)

    # 如果游戏结束,则重置环境
    if done:
        env.reset()

# 关闭env
env.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/712915.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode 989.数组形式的整数加法

⭐️ 题目描述 🌟 leetcode链接: 数组形式的整数加法 ⭕️ 代码: /*思路:数组从后往前和k的低位相加,若大于等于10则进一.[1 , 2 , 0 , 0] 3 44 3 2 1 最后逆置数组即可。 */ int* addToArrayForm(…

【进程】快速上手进程操作

目录 0. 进程概述 1. 创建进程 1.1 进程的创建:fork函数 1.2 进程的等待:wait()、waitpid() 1.3 特殊进程:僵尸进程、孤儿进程、守护进程 1.4 进程的终止:exit和_exit函数 1.5 进程退出清理:atexit函数 1.6 进…

自动部署代码导致接口访问404

问题原因:.user.ini文件中open_basedir与线上服务器中不同导致 由于.user.ini文件特殊性质 需要修改其中文件需要root权限也无法完成 推荐文章(linux系统中文件有哪些隐藏属性_帮助中心_文汇软件_山东文汇信息【官方网站】) 即可解决

【elementplus】body设置zoom后,el-table开启show-overflow-tooltip后,表格的tooltip显示会错位的解决方案

由于我的项目是无法避免使用zoom,所以只记录zoom后的解决方案 示例:明明划过的是第一行,tooltip却显示到了第四行的位置; 正确显示:划过第一行,tooltip显示在第一行的位置 代码:使用transfor…

关于 Asyncio,别再使用run_until_complete了

熟悉Python 的 Asyncio 进行异步编程的小伙伴肯定对下面的写法不陌生: import asyncioasync def test():await asyncio.sleep(3)print("Test rersult")loop asyncio.get_event_loop() loop.run_until_complete(test())这种写法也是在网上搜到的最多的协…

VUE小白学习-官方网站资料学习-2023年5月22日

VUE小白学习-官方网站资料学习-2023年5月22日 VUE干啥的?单文件组件?官方说,VUE前端万金油。 日期:2023年5月22日 VUE干啥的? 是一个前端框架,有自己的一套规则,方便前端开发。 单文件组件&am…

企业微信扫码登陆-详细案例

以下是实现的pc端企微扫码登陆,话不多时,直接上代码。。。 第1步:企业微信自建应用 第二步:获取到之后拿到 整体流程: 1.企业发起授权登录请求,企业微信用户允许授权后,企业微信会重定向到企业…

Windows基于WSL搭建Python数据分析环境

最近配置了一台较为不错的台式机,记录下自己配置环境的过程。 安装WSL,提供Linux环境 如果你发现后续的命令无法运行或者说软件商城中找不到,这可能意味着你的操作系统不符合要求。WSL安装要求 Windows 10 version 2004(Build 19…

C++之H数回信

void H数(int 数) {int Lin 数;while (Lin>1){if (!(Lin % 2) || !(Lin % 3) || !(Lin % 5) || !(Lin % 7)){if (!(Lin % 2))Lin / 2;else if (!(Lin % 3))Lin / 3;else if (!(Lin % 5))Lin / 5;else if (!(Lin % 7))Lin / 7;}else return;}cout << 数 << ends…

Proxmox 8.0 “Virtual Environment”发布

导读Proxmox发布新产品Proxmox VE8.0&#xff0c;基于Debian 12.该版本集成了新的Linux内核6.2、QEMU 8.0.2、LXC 5.0.2和OpenZFS 2.1.12&#xff0c;并且还有其他一些新功能和改进。 更新的部分包括更新的Ceph服务器、安装程序ISO增加基于文本的用户界面、整合主机网络桥和VN…

STM32 Proteus UCOSII系统DS1302万年历时钟秒表控制系统-0056

STM32 Proteus UCOSII系统DS1302万年历时钟秒表控制系统-0056 Proteus仿真小实验&#xff1a; STM32 Proteus UCOSII系统DS1302万年历时钟秒表控制系统-0056 功能&#xff1a; 硬件组成&#xff1a;STM32F103R6单片机 LCD1602显示器多个按键DS1302北京时间 1.单片机程序使…

java 分布式事务seata的使用

首先创建一个seata的springboot模块并引入seata的起步依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId> </dependency>模块的目录结构如下 seata.yaml中的内容为&…

vscode高亮插件——highlight-words(高亮代码、高亮变量、突出显示)

文章目录 官方教程高亮文字使用方法配置 演示变量高亮&#xff08;Highlight Toggle Current&#xff09;选择高亮&#xff08;Highlight Selection with Options&#xff09;删除高亮&#xff08;Highlight Remove&#xff09;侧边栏&#xff08;Highlight Toggle Sidebar&…

软件测试用例编写规范文档,模板都给你了我看谁还不会写测试用例

目录 前言 一 概述 1.1目的 1.2使用范围 二 测试用例编写原则 2.1系统性 2.2连贯性 2.3全面性 三 测试用例设计方法 3.1 等价类划分法&#xff1a; 3.2 边界值分析法&#xff1a; 3.3 因果图法&#xff1a; 3.4功能图法 3.5错误推测法 四 测试用例编写规范 4.1…

【ARM】-指令预取中止异常中断处理程序的返回

文章目录 处理流程示例 处理流程 在指令预取时&#xff0c;如果目标地址是非法的&#xff0c;该指令被标记成有问题的指令。这时&#xff0c;流水线上该指令之前的指令继续执行。当执行到该被标记成有问题的指令时&#xff0c;处理器产生指令预取中止异常中断。 当发生指令预取…

解决进入虚拟环境venv后pip路径仍然是在全局路径usr/bin下的问题

问题 解决方法 尝试手动安装pip到你的虚拟环境中。首先&#xff0c;确保在虚拟环境中运行以下命令&#xff1a; python -m ensurepip然后&#xff0c;使用以下命令安装pip到你的虚拟环境中&#xff1a; python -m pip install --upgrade pip

XR-FRAME 开始

目录 新建一个XR组件在页面中使用这个组件添加一个物体来点颜色和灯光有点寡淡&#xff0c;加上图像让场景更丰富&#xff0c;环境数据动起来&#xff0c;加入动画还是不够&#xff0c;放个模型再来点交互组件通信&#xff0c;加上HUD虚拟 x 现实&#xff0c;追加AR能力识别人脸…

ChatGLM6B LORA微调

ChatGLM6B&ChatGLM2-6B微调 目录 ChatGLM6B&ChatGLM2-6B微调 微调硬件需求 3.1. LoRA概述 3.2. LoRA微调ChatGLM步骤 3.2.1. 项目和环境搭建 3.2.2. 数据集处理 3.2.3. 微调 3.2.4. 推理 3.2.5. 完整过程 3.3. LoRA微调ChatGLM步骤-——huggingface PEFT 3.3.1. 项目和…

通过动态地址解决网络数据采集问题

动态地址的作用 说到Python网络爬虫&#xff0c;很多人都会遇到困难。最常见的就是爬取过程中IP地址被屏蔽。虽然大部分都是几个小时内自动解封的&#xff0c;但这对于分秒必争的python网络爬虫来说&#xff0c;是一个关键性的打击&#xff01;当一个爬虫被阻塞时&#xff0c;…

Qt项目环境构建

工欲善其事必先利其器&#xff0c;使用Qt来进行开发&#xff0c;得先配置好一个合适的环境。下面是我关于Qt项目环境构建的一些小结 Qt的项目构建主要依赖.pro文件&#xff08;和.pri文件&#xff1a;include包含文件&#xff0c;提供pro的复用性高的东西给多个项目包含) 所以新…