<aside> <img src="/icons/condense_yellow.svg" alt="/icons/condense_yellow.svg" width="40px" /> Python | 机器人 | 人形 | 运动 | 静态操作 | 动态操作 | 动力学 | 运动学 | 算法 | 机器学习
</aside>
🎯运动功能:1 m / s上台阶、站立平衡、1 m / s行走、坐椅子、5 m / s跑步、1 m / s爬行、穿越森林、取物、穿越迷宫、1 m / s上滑梯、5 m / s跨栏 | 🎯小范围静态:桌上用勺子、开窗户、桌上插入物品、厨房动作、推动桌上物品、打开柜子抽屉或门、书架取书、玩魔方 | 🎯小范围动态:跳高、举重、投篮、搬运货车物品、开门入室 | 🎯机器人机体主功能布局:感受关节角度和速度和物体姿态和速度 | 🎯全身400多个触觉感应,提供三维数据 | 🎯实验确定指定目标关节位置控制频率
🎯人形机连续动作空间离策略最大熵深度强化学习算法
📜 机器人运动学和动力学用例:Python | C++ | MATLAB机器人正逆向运动学动力学求解器及算法
📜 机器人运动学和动力学用例:Python | C# | MATLAB 库卡机器人微分运动学 | 欧拉-拉格朗日动力学 | 混合动力控制
pie title 语言分比
"Python":90
"C++":30
pie title 内容分比
"机器人":90
"机器学习":50
"运动功能":30
"静态操作动作":30
"动态操作动作":40
"算法":20
"运动学、动力学":50
"物理硬件":30
"数学计算":30
此算法使用四个神经网络:Q 网络、确定性策略网络、目标 Q 网络和目标策略网络。Q 网络和策略网络非常类似于简单的 A2C,但在此算法中,参与者直接将状态映射到动作(网络的输出直接为输出),而不是输出离散动作空间中的概率分布。
目标网络是原始网络的延时副本,可以缓慢跟踪学习到的网络。使用这些目标值网络可以大大提高学习的稳定性。原因如下:在不使用目标网络的方法中,网络的更新方程与网络本身计算的值相互依赖,这使其容易发散。例如:
$$ 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 网络的标准 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 算法)一样,此算法也使用重放缓冲区来采样经验以更新神经网络参数。在每次轨迹展开期间,我们保存所有经验元组(状态、动作、奖励、下一个状态)并将它们存储在有限大小的缓存中——即“重放缓冲区”。然后,当我们更新价值和策略网络时,我们会从重放缓冲区中随机采样小批量经验。