Python人形机踊跃跨栏举重投篮高维数动作算法模型

🎯要点

🎯运动功能: 1 m / s 1 m / s 1m/s上台阶、站立平衡、 1 m / s 1 m / s 1m/s行走、坐椅子、 5 m / s 5 m / s 5m/s跑步、 1 m / s 1 m / s 1m/s爬行、穿越森林、取物、穿越迷宫、 1 m / s 1 m / s 1m/s上滑梯、 5 m / s 5 m / s 5m/s​​​跨栏 | 🎯小范围静态:桌上用勺子、开窗户、桌上插入物品、厨房动作、推动桌上物品、打开柜子抽屉或门、书架取书、玩魔方 | 🎯小范围动态:跳高、举重、投篮、搬运货车物品、开门入室 | 🎯机器人机体主功能布局:感受关节角度和速度和物体姿态和速度 | 🎯全身400多个触觉感应,提供三维数据 | 🎯实验确定指定目标关节位置控制频率

📜协作机器人:Python协作运动机器人刚体力学解耦模型

📜机器人运动学和动力学用例:Python | C++ | MATLAB机器人正逆向运动学动力学求解器及算法

📜机器人运动学和动力学用例:Python | C# | MATLAB 库卡机器人微分运动学 | 欧拉-拉格朗日动力学 | 混合动力控制

在这里插入图片描述
在这里插入图片描述

🍇Python连续动作空间算法

此算法使用四个神经网络:Q 网络、确定性策略网络、目标 Q 网络和目标策略网络。Q 网络和策略网络非常类似于简单的 A2C,但在此算法中,参与者直接将状态映射到动作(网络的输出直接为输出),而不是输出离散动作空间中的概率分布。

目标网络是原始网络的延时副本,可以缓慢跟踪学习到的网络。使用这些目标值网络可以大大提高学习的稳定性。原因如下:在不使用目标网络的方法中,网络的更新方程与网络本身计算的值相互依赖,这使其容易发散。例如:
Q ( s , a ) ← Q ( s , a ) + α [ R ( s , a ) + γ max ⁡ Q ( s ′ , a ′ ) − Q ( s , a ) ] Q(s, a) \leftarrow Q(s, a)+\alpha\left[R(s, a)+\gamma \max Q\left(s^{\prime}, a^{\prime}\right)-Q(s, a)\right] Q(s,a)Q(s,a)+α[R(s,a)+γmaxQ(s,a)Q(s,a)]

因此,我们有确定性策略网络和 Q 网络的标准 Actor & Critic 代码结构:

class Critic(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(Critic, self).__init__()
        self.linear1 = nn.Linear(input_size, hidden_size)
        self.linear2 = nn.Linear(hidden_size, hidden_size)
        self.linear3 = nn.Linear(hidden_size, output_size)

    def forward(self, state, action):
        """
        Params state and actions are torch tensors
        """
        x = torch.cat([state, action], 1)
        x = F.relu(self.linear1(x))
        x = F.relu(self.linear2(x))
        x = self.linear3(x)

        return x

class Actor(nn.Module):
    def __init__(self, input_size, hidden_size, output_size, learning_rate = 3e-4):
        super(Actor, self).__init__()
        self.linear1 = nn.Linear(input_size, hidden_size)
        self.linear2 = nn.Linear(hidden_size, hidden_size)
        self.linear3 = nn.Linear(hidden_size, output_size)
        
    def forward(self, state):
        """
        Param state is a torch tensor
        """
        x = F.relu(self.linear1(state))
        x = F.relu(self.linear2(x))
        x = torch.tanh(self.linear3(x))

        return x

我们将网络和目标网络初始化为:

actor = Actor(num_states, hidden_size, num_actions)
actor_target = Actor(num_states, hidden_size, num_actions)
critic = Critic(num_states + num_actions, hidden_size, num_actions)
critic_target = Critic(num_states + num_actions, hidden_size, num_actions)

for target_param, param in zip(actor_target.parameters(), actor.parameters()):
    target_param.data.copy_(param.data)
for target_param, param in zip(critic_target.parameters(), critic.parameters()):
    target_param.data.copy_(param.data)

与深度 Q 学习(以及许多其他 RL 算法)一样,此算法也使用重放缓冲区来采样经验以更新神经网络参数。在每次轨迹展开期间,我们保存所有经验元组(状态、动作、奖励、下一个状态)并将它们存储在有限大小的缓存中——即“重放缓冲区”。然后,当我们更新价值和策略网络时,我们会从重放缓冲区中随机采样小批量经验。

重播缓冲区如下所示:

import random
from collections import deque

class Memory:
    def __init__(self, max_size):
        self.buffer = deque(maxlen=max_size)
    
    def push(self, state, action, reward, next_state, done):
        experience = (state, action, np.array([reward]), next_state, done)
        self.buffer.append(experience)

    def sample(self, batch_size):
        state_batch = []
        action_batch = []
        reward_batch = []
        next_state_batch = []
        done_batch = []

        batch = random.sample(self.buffer, batch_size)

        for experience in batch:
            state, action, reward, next_state, done = experience
            state_batch.append(state)
            action_batch.append(action)
            reward_batch.append(reward)
            next_state_batch.append(next_state)
            done_batch.append(done)
        
        return state_batch, action_batch, reward_batch, next_state_batch, done_batch

    def __len__(self):
        return len(self.buffer)

值网络的更新与 Q 学习中的更新类似。更新后的Q值由贝尔曼方程得到:
y i = r i + γ Q ′ ( s i + 1 , μ ′ ( s i + 1 ∣ θ μ ′ ) ∣ θ Q ′ ) y_i=r_i+\gamma Q^{\prime}\left(s_{i+1}, \mu^{\prime}\left(s_{i+1} \mid \theta^{\mu^{\prime}}\right) \mid \theta^{Q^{\prime}}\right) yi=ri+γQ(si+1,μ(si+1θμ)θQ)
然而,在此算法中,下一状态Q值是通过目标值网络和目标策略网络来计算的。然后,我们最小化更新后的 Q 值和原始 Q 值之间的均方损失:
 Loss  = 1 N ∑ i ( y i − Q ( s i , a i ∣ θ Q ) ) 2 \text { Loss }=\frac{1}{N} \sum_i\left(y_i-Q\left(s_i, a_i \mid \theta^Q\right)\right)^2  Loss =N1i(yiQ(si,aiθQ))2
代码如下:

Qvals = critic.forward(states, actions)
next_actions = actor_target.forward(next_states)
next_Q = critic_target.forward(next_states, next_actions.detach())
Qprime = rewards + gamma * next_Q

critic_loss = nn.MSELoss(Qvals, Qprime)
critic_optimizer.zero_grad()
critic_loss.backward() 
critic_optimizer.step()

对于策略函数,我们的目标是最大化预期回报:
J ( θ ) = E [ Q ( s , a ) ∣ s = s t , a t = μ ( s t ) ] J(\theta)= E \left[\left.Q(s, a)\right|_{s=s_t, a_t=\mu\left(s_t\right)}\right] J(θ)=E[Q(s,a)s=st,at=μ(st)]
为了计算策略损失,我们取目标函数相对于策略参数的导数。请记住,参与者(策略)函数是可微的,因此我们必须应用链式法则。

👉参阅&更新:计算思维 | 亚图跨际

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

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

相关文章

iOS多target时怎么对InfoPlist进行国际化

由于不同target要显示不同的App名称、不同的权限提示语,国际化InfoPlist文件必须创建名称为InfoPlist.strings的文件,那么多个target时怎么进行国际化呢?步骤如下: 一、首先我们在项目根目录创建不同的文件夹对应多个不同的targe…

自然之美无需雕琢

《自然之美,无需雕琢 ”》在这个颜值至上的时代,但在温馨氛围中,单依纯以一种意想不到的方式,为我们诠释了自然之美的真谛。而医生的回答,如同一股清流耳目一新。“我说医生你看我这张脸,有没有哪里要动的。…

09 docker 安装tomcat 详解

目录 一、安装tomcat 1. tomcat镜像的获取 2. docker创建容器实列 3. 访问测试 404错误 4. 解决方案 5. 使用免修改版容器镜像 5.1. 运行实列的创建 5.2. 出现问题及解决: 6. 验证 OK 一、安装tomcat 1. tomcat镜像的获取 docker search tomcat #docker …

最灵活且易用的C++开源串口通信调试软件

这款C开源串口调试软件,集成了丰富的功能,为用户提供高效、便捷的串口通信调试体验。以下是其核心功能亮点: 基础功能: 数据交互自如:支持串口数据的轻松读取与发送,让数据交换变得简单直接。 灵活配置参…

【后端面试题】【中间件】【NoSQL】MongoDB查询优化3(拆分、嵌入文档,操作系统)

拆分大文档 很常见的一种优化手段,在一些特定的业务场景中,会有一些很大的文档,这些文档有很多字段,而且有一些特定的字段还特别的大。可以考虑拆分这些文档 大文档对MongoDB的性能影响还是很大的,就我个人经验而言&…

【TB作品】基于ATmega48的开机登录程序设计

使用Proteus仿真软件设计一个开机登录程序,单片机选用ATmegga48. 基础要求: 1.程序启动后在LCD1602液晶屏上提示用户通过独立按键输入密码(6位)。 2.密码输入错误则在屏幕上提示密码错误,密码输入正确则在屏幕上提示密 码正确后等待约3秒后进入主界面,在屏幕中央显示HelloWorld…

基于RK3588的8路摄像头实时全景拼接

基于RK3588的8路摄像头实时全景拼接 输入:2路csi转8路mpi的ahd摄像头,分辨率1920 * 1080 8路拼接结果: 6路拼接结果: UI界面: UI节目设计原理

数字时代如果你的企业还未上线B端系统助力则后果很严重

**数字时代如果你的企业还未上线B端系统助力则后果很严重** 数字化浪潮席卷全球,企业对于数字化转型的重视程度日益提高。B端系统,作为企业数字化转型的核心组成部分,其重要性不言而喻。如果你的企业还未上线B端系统助力,那么后果…

异步主从复制

主从复制的概念 主从复制是一种在数据库系统中常用的数据备份和读取扩展技术,通过将一个数据库服务器(主服务器)上的数据变更自动同步到一个或多个数据库服务器(从服务器)上,以此来实现数据的冗余备份、读…

2024年6月后2周重要的大语言模型论文总结:LLM进展、微调、推理和对齐

本文总结了2024年6月后两周发表的一些最重要的大语言模型论文。这些论文涵盖了塑造下一代语言模型的各种主题,从模型优化和缩放到推理、基准测试和增强性能。 LLM进展与基准 1、 BigCodeBench: Benchmarking Code Generation with Diverse Function Calls and Com…

图文识别0难度上手~基于飞浆对pdf简易ocr并转txt

前言 本篇pdf适用windows对视觉识别0基础的的纯小白用户。大佬请绕道~~ 注意: 本项目pdf的ocr对于表格、画图文字,水印等干扰没做任何处理,因此希望各位使用该功能的pdf尽量不要含有这些干扰项,以免影响翻译效果。 流程 1.构建…

收银系统源码-收银台副屏广告

1. 功能描述 门店广告:双屏收银机,副屏广告,主屏和副屏同步,总部可统一控制广告位,也可以给门店开放权限,门店独立上传广告位; 2.适用场景 新店开业、门店周年庆、节假日门店活动宣传&#x…

Nginx实战:nginx性能压测(ab)

在nginx的生产实践中,不管是服务上线,还是性能优化,都会遇到需要对nginx的性能压测,本文介绍一个简单的压测工具:ab命令 ab(Apache Bench)是一个常用的HTTP压力测试工具,可以用来测试Nginx的性能和压力。ab命令可以指定并发请求数、请求数、请求类型等参数,并输出测试…

SpringBoot 启动流程四

SpringBoot启动流程四 前面这个创建对象是初始化SpringApplication对象 是加载了SpringBoot程序的所有相关配置 我们接下来要将这个run方法 run过程是一个运行 初始化容器 我们看我们的运行结果是得到一个ConfigurableApplicationContext对象 package com.bigdata1421.star…

MySQL 集群

MySQL 集群有多种类型,每种类型都有其特定的用途和优势。以下是一些常见的 MySQL 集群解决方案: 1. MySQL Replication 描述:MySQL 复制是一种异步复制机制,允许将一个 MySQL 数据库的数据复制到一个或多个从服务器。 用途&…

医疗器械企业CRM系统推荐清单(2024版)

近年来,我国医疗器械行业在国家政策支持、医改深入、人口老龄化和消费能力提升等因素推动下,得到了快速发展,正日益成为创新能力增强、市场需求旺盛的朝阳产业。然而,行业也面临价格压力、市场份额重新分配、合规风险以及产品和服…

mac 安装nvm的教程

在macOS上切换Node.js版本,可以使用nvm(Node Version Manager)。以下是安装nvm和切换Node.js版本的步骤: 安装nvm 下载方式 终端复制输入: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.…

Odoo14使用hiPrint实现打印功能

使用hiPrint代替odoo原生的打印功能 可以实现快速自定义修改打印模板,无需每次都调整打印模板 无论是表单分页还是各种需求,都能满足 目录 1 使用命令创建新的模块,无用的demo文件可以删除掉 2 新建“打印模板”,用于保存打印…

MySQL表的增删改查(CRUD)

MySQL表的增删改查(CRUD) 文章目录 MySQL表的增删改查(CRUD)1. Create1.1 单行数据 全列插入1.2 多行数据 指定列插入1.3 插入否则更新1.4 替换 2. Retrieve2.1 SELECT 列2.1.1 全列查询2.1.2 指定列查询2.1.3 查询字段为表达式…