应用DDPG实现无人机追击任务研究(Python代码实现)

  💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

 ⛳️赠与读者

💥1 概述

DDPG:

强化学习相关:

observation space:

action space:

reward:

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

在可视化战场上,左半部分有三个友方无人机在随机位置生成,右半部分有两个敌方无人机在随机位置生成。

敌方无人机通过函数控制来采取固定轨迹的移动,友方无人机通过DDPG输出的action进行移动。

任务目标是使得友方无人机可以察觉到敌方无人机的位置,并协同合作不断跟踪两个敌方无人机。

DDPG:

Critic的输入是状态+动作,输出是打分,更新是最小二乘 TD误差。

Actor的输入是状态,输出是一个动作,确定性动作的更新是最大化打分。

critic_target和actor_target都是在计算next_q的时候被使用。

target net网络采用参数软替换,tau设置为0.005(有点高)。

学习率设定为1e-4(有点大)。

折扣因子设定为0.95,即主要朝前看20步(有点小),episode长度为300。

replay buffer设定为2e-6,没有采用PER。

动作的探索噪声采用高斯噪声,整个训练过程固定均值为0标准差为0.15(前期可以尝试增大方差提高探索)。

强化学习相关:

obs,action,reward都没有做归一化

observation space:

状态空间3x2+2x2=10,对应三个友方无人机的xy和两个敌方无人机的xy,因为三个agent共用一个网络,所以把每个step的采样分成三份,每次把需要执行动作的agent的位置放在最前面。

action space:

输出-pi~pi的一个角度,控制agent移动的方向。

reward:

每个agent单独计算奖励。

  1. 时间惩罚,逗留越长,受到的小惩罚越大。(后来取消agent死亡的设定后,这个惩罚应该没用了)

  2. 绝对距离奖励,当距离敌方无人机的最小距离大于一定值或小于一定值时,会获得一定惩罚或奖励。

  3. 相对距离奖励,当友方无人机距离敌方无人机的最短距离更进一步的时候,获得奖励,距离变远的时候,获得惩罚。 通过设计一个距离的势能函数y = dist-5/(1+dist),可以保证在正区间内单调且变化平稳,即agent距离敌人较远时前半部分用于计算相对距离奖励,agent距离敌人较近时后半部分用于计算相对距离奖励。

  4. 针对出现的三追一的问题做了一些处理:以0.5的概率更换两个敌方无人机输入的位置;如果三个无人机追击目标相同的话,绝对距离奖励减少一半。

📚2 运行结果

运行录像:

部分代码:

# 这里只需要把state输入就可以了
    def forward(self, state):
        q = F.leaky_relu(self.l1(state))
        q = F.leaky_relu(self.l2(q))
        q = self.bn(q)
        q = F.leaky_relu(self.l3(q))
        q = self.l4(q)
        # actions_value1 = self.q_eval1(state).cpu().data.numpy().flatten()
        # action1 = np.argmax(actions_value1)
        # q = q.cpu().data.numpy().flatten()
        # q = np.argmax(q)
        return q

class DQN(object):
    def __init__(self, state_dim, action_dim, max_action):
        self.q_eval1 = Q_Value(state_dim).to(device)
        self.q_eval2 = Q_Value(state_dim).to(device)
        self.q_eval3 = Q_Value(state_dim).to(device)

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]张耀中、许佳林、姚康佳、刘洁凌.基于DDPG算法的无人机集群追击任务[J].航空学报, 2020, 41(10):13.DOI:10.7527/S1000-6893.2020.24000.

[2]李华伟.多无人机协同任务规划研究与实现[D].西安电子科技大学,2014.DOI:10.7666/d.D726818.

[3]Xiaowei FU,Zhe XU,Hui WANG.基于DDPG的无人机追捕任务泛化策略设计[J].西北工业大学学报, 2022, 40(1):47-55.DOI:10.1051/jnwpu/20224010047. 

🌈4 Matlab代码实现

资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取

                                                           在这里插入图片描述

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值