1. 倒立摆: Pendulum-v1

1 环境描述

Pendulum-v1 是一个经典的强化学习环境,属于 OpenAI Gym 库的一部分。这个环境模拟了一个倒立摆的问题,目标是通过施加适当的扭矩使摆杆保持在竖直向上的位置。

  • 目标:控制摆杆使其保持在竖直向上的位置(即角度为 0 弧度)。

  • 状态空间 (observation_space):一个三维向量,包含以下信息:

    • theta:摆杆的角度(弧度),范围为 [-π, π]
    • theta_dot:摆杆的角速度(弧度/秒),范围为 [-8, 8]
    • cos(theta)sin(theta):这两个值通常用于表示角度,避免角度值的不连续性。
  • 动作空间 (action_space):一个一维向量,表示施加在摆杆上的扭矩:

    • 范围为 [-2, 2](牛顿·米)。
  • 奖励函数:每一步的奖励计算公式为:
    r = − ( θ 2 + 0.1 ⋅ θ dot 2 + 0.001 ⋅ torque 2 ) r = -( \theta^2 + 0.1 \cdot \theta_{\text{dot}}^2 + 0.001 \cdot \text{torque}^2 ) r=(θ2+0.1θdot2+0.001torque2)
    其中:

    • θ \theta θ 是摆杆的角度(弧度)。
    • θ dot \theta_{\text{dot}} θdot 是摆杆的角速度(弧度/秒)。
    • torque \text{torque} torque 是施加的扭矩(牛顿·米)。

    最小的奖励是 -16.2736044,当摆杆处于竖直向下位置( θ = π \theta = π θ=π),角速度最大( θ dot = 8 \theta_{\text{dot}} = 8 θdot=8),并且施加最大扭矩( torque = 2 \text{torque} = 2 torque=2)时。
    最大的奖励是 0,当摆杆处于竖直向上位置( θ = 0 \theta = 0 θ=0),角速度为零( θ dot = 0 \theta_{\text{dot}} = 0 θdot=0),并且没有施加扭矩( torque = 0 \text{torque} = 0 torque=0)时。

  • 初始状态

    • 角度 θ \theta θ 随机初始化在 [ − π , π ] [-π, π] [π,π] 范围内。
    • 角速度 θ dot \theta_{\text{dot}} θdot 随机初始化在 [ − 1 , 1 ] [-1, 1] [1,1] 范围内。
  • 终止条件:默认情况下,Pendulum-v1 环境没有明确的终止条件,通常会在达到最大步数(例如 200 步)后终止。

2 示例代码

以下是一个简单的示例代码,演示如何在 Pendulum-v1 环境中执行随机动作并观察环境的变化:

import gym
import numpy as np
import time

# 创建环境
env = gym.make('Pendulum-v1')
env.reset()

for _ in range(200):  # 运行200步
    
    # 随机选择一个动作
    action = env.action_space.sample()
    
    # 执行动作
    observation, reward, done, info = env.step(action)
    
    print(f"Observation: {observation}, Reward: {reward}, Done: {done}, Info: {info}")
    
    if done:
        print("Episode finished after {} timesteps".format(_ + 1))
        break

# 关闭环境
env.close()
  • 总结

Pendulum-v1 是一个经典的控制问题,适用于测试和评估各种强化学习算法。通过控制施加在摆杆上的扭矩,使摆杆保持在竖直向上的位置,可以训练出高效的控制策略。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024-09-01 - 分布式集群网关 - LoadBalancer - 阿里篇 - 流雨声

摘要 通过公有云部署创建类似 MateLB 的应用负载,可以更加方便的对系统资源进行合理规划。 应用实践 CCM提供Kubernetes与阿里云基础产品(例如CLB、VPC等)对接的能力,支持在同一个CLB后端挂载集群内节点和集群外服务器&#xf…

【销帮帮-注册_登录安全分析报告-试用页面存在安全隐患】

联通支付注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨…

初识Linux · 匿名管道

目录 前言: 匿名管道 理解为什么? 理解是什么? 理解怎么做? 前言: 引入管道之前,我们引入几个问题,进程通信的相关问题。 第一个是进程之间为什么要通信,对于进程间通信来说&…

Linux(CentOS)设置防火墙开放8080端口,运行jar包,接收请求

1、查看防火墙状态 systemctl status firewalld 防火墙开启状态 2、运行 jar 包,使用8080端口 程序正常启动 3、使用 postman 发送请求,失败 4、检查端口是否开放(需更换到 root 用户) firewall-cmd --zonepublic --query-por…

window11安装elasticsearch+Kibana

1、下载elasticsearch与elasticsearch 下载elasticsearch 查看elasticsearch对应的Kibana版本 下载elasticsearch解压后文件目录如下 可执行脚本文件,包括启动elasticsearch服务、插件管理、函数命令等 bin配置文件目录,如elasticsearch配置、角色配置、jvm配置等 conf 默认…

[单例模式]

[设计模式] 设计模式是软件工程中的一种常见做法, 它可以理解为"模板", 是针对一些常见的特定场景, 给出的一些比较好的固定的解决方案. 不同语言适用的设计模式是不一样的. 这里我们接下来要谈到的是java中典型的设计模式. 而且由于设计模式比较适合有一定编程经…

MethodChannel插件的用法

文章目录 1 知识回顾2 示例代码3 经验总结我们在上一章回中介绍了通道相关的内容,本章回中将介绍其中的一种通道:MethodChannnel.闲话休提,让我们一起Talk Flutter吧。 1 知识回顾 我们在上一章回中介绍了通道的概念和作用,并且提到了通道有不同的类型,本章回将其中一种通…

Golang | Leetcode Golang题解之第554题砖墙

题目: 题解: func leastBricks(wall [][]int) int {cnt : map[int]int{}for _, widths : range wall {sum : 0for _, width : range widths[:len(widths)-1] {sum widthcnt[sum]}}maxCnt : 0for _, c : range cnt {if c > maxCnt {maxCnt c}}retur…

通讯录(C 语言)

目录 一、通讯录设计思路1. 伪代码设计思路2. 代码设计思路 二、代码实现三、程序运行演示四、整体分析 一、通讯录设计思路 1. 伪代码设计思路 通讯录可以用来存储 100 个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址。 提供方法&#x…

深入解析四种核心网络设备:集线器、桥接器、路由器和交换机

计算机网络系列课程《网络核心设备》 在现代网络技术中,集线器、桥接器、路由器和交换机扮演着至关重要的角色。本文,将深入探讨这四种设备的功能、工作原理及其在网络架构中的重要性。 集线器:基础网络连接设备 集线器(Hub&…

01 Oracle 数据库存储结构深度解析:从数据文件到性能优化的全链路探究

文章目录 Oracle 数据库存储结构深度解析:从数据文件到性能优化的全链路探究一、Oracle存储结构的物理层次1.1 控制文件(Control File)1.2 联机重做日志文件(Online Redo Log File)1.3 数据文件(Data File&…

Type-C转DP线方案

在现代数字化生活中,高清视频传输已成为日常需求的重要组成部分。无论是工作中的多屏协作,还是娱乐中的沉浸式体验,高清显示器都扮演着不可或缺的角色。然而,随着设备接口的多样化,如何高效地将Type-C设备连接至Displa…

【c++篇】:栈、队列、优先队列:容器世界里的秩序魔法 - stack,queue与priority_queue探秘

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:c篇–CSDN博客 文章目录 前言一.容器stack1.介绍2.成员函数3.模拟实现4.注意事项 二.容器qu…

Java基础——循环switch大数值更改器访问器深浅拷贝

目录 1.循环 2.switch多分支选择结构 3.大数值 4.浅拷贝&深拷贝 5.Arrays.sort排序 6.面向对象 7.更改器&访问器 1.循环 for-each循环 在 Java 中,for-each 循环(也称为增强型 for 循环)是一种用于遍历数组或集合&#xff08…

引入 axios,根据 api 文档生成调用接口

起步 | Axios Docs 安装 axios npm install axios 生成 api 调用接口【可选】 https://github.com/ferdikoomen/openapi-typescript-codegen 安装 npm install openapi-typescript-codegen --save-dev 然后执行生成代码 # http://localhost:8805/api/user/v3/api-docs&a…

wsl2+Ubuntu安装图形化界面(VNC方式)

本章教程,记录在wsl2+Ubuntu操作系统中安装可视化界面步骤。 一、安装桌面环境 尽量以root用户进行安装,避免因权限不足导致部分依赖无法安装。 sudo apt update sudo apt upgrade -y sudo apt install ubuntu-desktop由于可视化桌面程序安装包比较大,网速慢的小伙伴,需要耐…

Linux应用——线程池

1. 线程池要求 我们创建线程池的目的本质上是用空间换取时间,而我们选择于 C 的类内包装原生线程库的形式来创建,其具体实行逻辑如图 可以看到,整个线程池其实就是一个大型的 CP 模型,接下来我们来完成它 2. 整体模板 #pragma …

学习日记_241110_局部线性嵌入(Locally Linear Embedding, LLE)

前言 提醒: 文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。 其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展…

【我的 Anti-AV 学习手札】DLL注入

无敌舍友s神免杀学了一个阶段,达者为师,向s师傅学习!! ps:我的基础实在薄弱,WIN编程甚至都没做过,所以笔记翔实些 一、注入思路 1.在进程中开辟一段空间 2.存入dll绝对路径地址的字符串 3.使用…

【HarmonyOS NEXT】一次开发多端部署(以轮播图、Tab栏、列表为例,配合栅格布局与媒体查询,进行 UI 的一多开发)

关键词:一多、响应式、媒体查询、栅格布局、断点、UI 随着设备形态的逐渐增多,应用界面适配也面临着很大问题,在以往的安卓应用开发过程中,往往需要重新开发一套适用于大屏展示的应用,耗时又耗力,而鸿蒙提供…