【前言】在人群之间导航的机器人通常使用避碰算法来实现安全高效的导航。针对人群中机器人的导航问题,本文采用强化学习SAC算法,并结合LSTM长短期记忆网络,提高移动机器人的导航性能。在我们的方法中,机器人使用奖励来学习避碰策略,这种方法可以惩罚干扰行人运动的机器人行为。

【问题描述】
状态 移动机器人在人群中的导航问题可描述为部分可观测马尔可夫决策过程(POMDP)。其中,机器人的状态为s_t = [so_t, sh_t ],由机器人可以观测到的状态 so_t 和机器人本身隐藏状态 sh_t 组成。其中,so_t表示为:

sh_t表示为:

动作 机器人的动作由平移和旋转速度组成,即:a_t=[w,v],在我们的方法中,设置机器人的动作为一种连续性动作。
奖励函数 奖励机器人达到其目标并惩罚机器人与行人碰撞或离行人太近。此外,设置一个基于势能的奖励塑造来引导机器人接近目标:

【训练策略】
长短期记忆网络(LSTM)可以接受可变大小的输入,因此我们将行人状态(so_t)编码为状态序列,作为LSTM的输入,其网络结构如下图所式:

LSTM 将相关信息存储在其隐藏状态中,并忘记输入中不太重要的部分。输入最终行人的状态后,我们可以将 LSTM 的最终隐藏状态作为该决策步骤的固定长度、编码的环境状态。在具有大量智能体状态的情况下,为了减轻智能体忘记早期状态的影响,将这些状态以与智能体的距离相反的顺序输入,这意味着距离最近的智能体对应最终的隐藏状态:hn。将hn与机器人自身的状态拼接joint_state=[self_state,hn],joint_state作为全连接网络的输入。
关于SAC_LSTM的Actor Critic网络结构参考下图,

策略的更新我们采用自动熵的SAC算法,关于SAC算法描述参考文献[3]。
关于Q网络和策略部分代码如下:
class DQFunc(nn.Module):
def __init__(self, state_dim, action_dim, hidden_size, lstm_hidden_dim, self_state_dim):
super(DQFunc, self).__init__()
self.action_dim = action_dim
self.self_state_dim = self_state_dim
self.lstm_hidden_dim = lstm_hidden_dim
self.lstm = nn.LSTM(state_dim - self_state_dim, lstm_hidden_dim, batch_first=True)
self.linear1 = nn.Linear(action_dim + lstm_hidden_dim + self_state_dim, hidden_size)
self.linear2 = nn.Linear(hidden_size, hidden_size)
self.network1 = nn.Linear(hidden_size, 1)
self.network2 = nn.Linear(hidden_size, 1)
def forward(self, state, action):
size = state.shape
self_state = state[:, 0, :self.self_state_dim]
human_state = state[:, :, self.self_state_dim:]
h0 = torch.zeros(1, size[0], self.lstm_hidden_dim)
c0 = torch.zeros(1, size[0], self.lstm_hidden_dim)
output, (hn, cn) = self.lstm(human_state, (h0, c0))
hn = hn.squeeze(0)
joint_state = torch.cat([hn, self_state], dim=1)
action = action.reshape(-1, self.action_dim)
x = torch.cat((joint_state, action), -1)
x = torch.tanh(self.linear1(x))
x = torch.tanh(self.linear2(x))
x1 = self.network1(x)
x2 = self.network2(x)
return x1, x2
class PolicyNetGaussian(nn.Module):
def __init__(self, state_dim, action_dim, hidden_size, self_state_dim, lstm_hidden_dim):
super(PolicyNetGaussian, self).__init__()
# print(state_dim)
self.self_state_dim = self_state_dim
self.lstm_hidden_dim = lstm_hidden_dim
self.lstm1 = nn.LSTM(state_dim - self_state_dim, lstm_hidden_dim, batch_first=True)
self.linear1 = nn.Linear(lstm_hidden_dim + self_state_dim, hidden_size)
self.linear2 = nn.Linear(hidden_size, hidden_size)
self.mean_linear = nn.Linear(hidden_size, action_dim)
self.log_std_linear = nn.Linear(hidden_size, action_dim)
def forward(self, state):
# print(state)
size = state.shape # torch.Size([1, 5, 13])
self_state = state[:, 0, :self.self_state_dim] # torch.Size([1, 6])
human_state = state[:, :, self.self_state_dim:]
h0 = torch.zeros(1, size[0], self.lstm_hidden_dim)
c0 = torch.zeros(1, size[0], self.lstm_hidden_dim)
output, (hn, cn) = self.lstm1(human_state, (h0, c0))
hn = hn.squeeze(0) # torch.Size([1, 128])
joint_state = torch.cat([self_state, hn], dim=1)
x = torch.relu(self.linear1(joint_state))
x = torch.relu(self.linear2(x))
mean = self.mean_linear(x)
log_std = self.log_std_linear(x)
# weights initialize
log_std = torch.clamp(log_std, -20, 2)
return mean, log_std
训练结果
其中黄色圆形表示机器人,其余圆圈表示移动的行人。

参考文献
1.Collision Avoidance in Pedestrian-Rich Environments with Deep Reinforcement Learning
2.Motion Planning Among Dynamic, Decision-Making Agents with Deep Reinforcement Learning
3.Soft Actor-Critic Algorithms and Applications
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源