✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
✅如需沟通交流,查看文章底部二维码
(1)基于改进深度Q网络的六自由度采样空间自适应规划:
针对煤炭采样机械臂在煤堆形态多变、采样点需实时调整的场景,提出了一种融合注意力机制的深度Q网络DQN-Attn进行运动规划。机械臂的状态空间由六关节角度、末端执行器与目标采样点的三维距离以及障碍物包围盒信息组成,动作空间设计为各关节角度增量离散化后的组合,并加入末端启停与吸样触发命令。DQN-Attn在传统DQN的基础上,于Q值估计网络的最后一层嵌入了一个自注意力层,该层能够动态关注对当前动作选择贡献最大的状态特征维度,例如当采样点被部分掩埋时,网络会提高对Z轴距离和偏航角特征的关注权重,从而产生更合理的避让与接近策略。奖励函数采用分段设计,包含到达奖励、步数惩罚、碰撞惩罚以及采样成功奖励,其中采样成功奖励根据煤块粒度与采样完整度进行分级。为加速训练,引入示范数据进行预训练,通过行为克隆使网络初步具备趋向采样点并规避大型障碍的能力,随后在仿真环境中使用ε-衰减贪婪策略进行微调。优化器选用Lookahead结合RAdam,批标准化使用Layer Normalization以适应单样本推理。在基于RoboDK搭建的煤矿仿真场景中进行测试,训练800个周期后,机械臂成功一次到达采样点的比例达到93.7%,较原生DQN提升11.2%,平均路径长度缩短18.5%。
(2)基于RRT*-Connect与时序差分网络的混合避障重规划:
面对动态掉落的煤块或突发采样面坍塌等在线扰动,构建了RRT*-Connect与TD3结合的混合重规划框架。RRT*-Connect负责在关节空间中快速生成初始无碰路径,其采样策略引入基于势场的偏置,使采样点以更大概率落在当前关节构型与目标构型之间的高质量区域,并且每次扩展后利用重布线步骤优化树结构。当机器人沿该路径运动时,TD3深度强化学习模块以40Hz频率进行局部路径修正,其策略网络接收关节角度、速度、力矩以及最近动态障碍物的相对运动信息,输出关节速度修调量。TD3设计中采用了双截断Q网络和延迟策略更新,防止局部振荡;奖励函数包含路径跟踪偏差惩罚、碰撞风险惩罚以及速度平滑奖励。每次检测到碰撞风险超过阈值时,RRT*-Connect立刻以当前构型和估计的临时目标构型为端点重新规划,并用三次埃尔米特插值将新旧路径进行平滑拼接。该混合框架在含随机掉落煤块的水煤浆场景中测试,碰撞率从未重规划时的23.6%下降到3.1%,平均路径跟踪误差由8.3°降至2.5°,规划耗时平均为65 ms,满足在线需求。
(3)基于联邦域泛化的多矿山采样策略迁移:
为解决单一矿山训练策略向新矿山环境迁移时数据分布偏移导致性能下降的问题,设计了联邦域泛化迁移框架FedDG-Sample。在3个不同地质条件(软煤、硬煤、夹矸煤)的矿山本地部署采样机器人,各自用本地数据训练一个域专属DQN-Attn模型,同时参与联邦迭代。联邦聚合不采用直接平均权重,而是采用基于注意力权重融合的加权方式,中心服务器维护一个可学习的权重分配网络P-Net,根据各客户端上载的模型梯度特征向量生成聚合系数,并迫使全局模型在保留共性采样策略的同时具备域间不变性。本地训练时额外引入域鉴别器对抗损失,使得特征编码器提取的隐层表征难以区分数据域来源,增强跨域泛化能力。在新矿山部署时,仅需使用少量无标注数据通过对抗适配即可完成迁移。在一座未参与联邦训练的新煤矿上进行零样本直接部署测试,模型一次采样成功率从无迁移的61.3%提升至87.2%,经过50轮在线自适应后达到91.8%,证明该框架具备良好的泛化与快速适配能力。
import torch import torch.nn as nn import torch.nn.functional as F import numpy as np # 注意力DQN网络 class DQNAttn(nn.Module): def __init__(self, state_dim, action_dim, hidden=256): super().__init__() self.fc1 = nn.Linear(state_dim, hidden) self.ln1 = nn.LayerNorm(hidden) self.attn = nn.MultiheadAttention(embed_dim=hidden, num_heads=4) self.fc2 = nn.Linear(hidden, hidden) self.ln2 = nn.LayerNorm(hidden) self.q_head = nn.Linear(hidden, action_dim) def forward(self, state): x = F.elu(self.ln1(self.fc1(state))) x = x.unsqueeze(0) attn_out, _ = self.attn(x, x, x) x = self.ln2(self.fc2(attn_out.squeeze(0))) q_vals = self.q_head(x) return q_vals # 联邦域泛化聚合中的注意力权重网络P-Net class PNet(nn.Module): def __init__(self, grad_dim, num_clients, hidden=64): super().__init__() self.fc1 = nn.Linear(grad_dim * num_clients, hidden) self.fc2 = nn.Linear(hidden, num_clients) def forward(self, grad_vecs): h = F.relu(self.fc1(grad_vecs)) weight = F.softmax(self.fc2(h), dim=-1) return weight # TD3 策略网络 class TD3Policy(nn.Module): def __init__(self, state_dim, action_dim, hidden=128): super().__init__() self.net = nn.Sequential( nn.Linear(state_dim, hidden), nn.ReLU(), nn.Linear(hidden, hidden), nn.ReLU(), nn.Linear(hidden, action_dim), nn.Tanh() ) def forward(self, s): return self.net(s) # 分段奖励函数 def calc_reward(dist_to_target, collision, success, step): r = -0.1 * step if collision: return -10.0 if success: return 20.0 r -= 1.5 * dist_to_target return r # 联邦训练伪代码 def federated_aggregation(global_model, client_models, p_net, optimizer): grads = [] for cm in client_models: grad = [] for param in cm.parameters(): grad.append(param.grad.detach().view(-1)) grads.append(torch.cat(grad)) all_grads = torch.cat(grads).unsqueeze(0) alpha = p_net(all_grads) avg_params = None for i, cm in enumerate(client_models): if avg_params is None: avg_params = [p.data.clone() * alpha[0, i] for p in cm.parameters()] else: for j, p in enumerate(cm.parameters()): avg_params[j] += p.data.clone() * alpha[0, i] for param, avg in zip(global_model.parameters(), avg_params): param.data = avg return global_model如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇