【MARL】基于强化学习的红蓝双方对抗作战仿真

embedded/2025/1/15 16:43:14/

文章目录

  • 前言
  • 一、环境
    • 规则
    • 具体参数
  • 二、原理
    • 价值评估
    • 执行
    • Critic给Actor指导
  • 三、实验效果
    • 训练情况
    • 探索噪音设置
  • 四、总结


前言

临近期末,要交一次python大作业,乘这次机会,将之前做的项目的一个类似于红蓝对战的小游戏,再次整理一下,做成作业上交。

这里并不对报告形式做约束,
按照环境,原理,实验效果,做一次小的总结。

环境由同门@Jordan-Haidee@stardusthub
及个人共同打造。

但是我对游戏规则进行了一些修改。
游戏本身只是简单的模拟双方对抗的场景,一些复杂的考虑并没有包含在内。

为了符合报告的形式,这里尽量不以我为主语,以本研究为主语。
github代码:https://github.com/wild-firefox/toy_env_file


一、环境

规则

名称:3v3坦克对战

简述:
双方(蓝方和红方)分别控制三个坦克,每次开始游戏,随机蓝方或者红方开始行动,每一次行动都是三个坦克一个一个动作,坦克1动作完然后坦克2动作然后坦克3动作,然后轮到对方动作。

有点类似于回合制的游戏
设定:
行动:一次行动指自己的三个坦克的动作均执行完毕,且伤害结算完毕,算一次行动结束

规则设置:
1.先行动的一方的伤害先结算。例:如果一方坦克的子弹先打出,此伤害就结算,那么被打中的一方坦克若是阵亡,则不能行动。

2.结束条件:
1.只要有一方全部阵亡则游戏正常结束,胜利的一方视为大胜。
2.若是双方在互相进行30次的行动后,未有一方全部阵亡,则比较双方的血量总和,多的一方视为小胜,游戏也结束。
3.双方都将弹药消耗空,未有一方全部阵亡,则比较双方的血量总和,多的一方视为小胜,游戏也结束。

具体参数

环境的参数具体如下:
在这里插入图片描述
状态信息设置
在这里插入图片描述
动作信息设置
奖励设置

奖励信息设置
在这里插入图片描述

二、原理

多智能体 DDPG(muli-agent DDPG,MADDPG)算法的核心思想就是为每个智能体实现一个 DDPG 的算法。
在多智能体强化学习环境中,我们考虑 N 个智能体,每个智能体 i 的状态、动作和奖励分别表示为 sᵢ, aᵢ 和 rᵢ。所有智能体的状态和动作可以分别表示为向量 s = (s₁, s₂, …, sₙ) 和 a = (a₁, a₂, …, aₙ)。

MADDPG 算法为每个智能体 i 训练两个网络:
Actor 网络 (μᵢ): 输入为智能体 i 的状态 sᵢ,输出为智能体 i 的动作 aᵢ = μᵢ(sᵢ)。
Critic 网络 (Qᵢ): 输入为所有智能体的状态 s 和所有智能体的动作 a,输出为智能体 i 在该联合状态-动作下的 Q 值 Qᵢ(s, a)。
关键区别: 与传统的 DDPG 不同,MADDPG 中每个智能体的 Critic 网络的输入包含所有智能体的状态和动作,而不是仅仅该智能体自身的状态和动作。 这使得 Critic 可以评估在其他智能体采取特定动作的前提下,当前智能体采取某个动作的价值,从而更好地处理多智能体环境中的相互影响。

训练过程:
1.经验回放:每个智能体通过当前状态s获得的动作a不断与环境进行交互获得奖励r和下一个状态 s’,然后将此经验元组 (s, a, r, s’)存储到经验回放缓冲区。
2.Critic 更新: 对于每个智能体 i,使用目标网络计算目标 Q 值。
3.Actor 更新: 对于每个智能体 i,通过最大化 Critic 网络的输出更新 Actor 网络。
4.目标网络更新: 使用软更新方式更新目标 Actor 和 Critic 网络。

MADDPG训练框架图如下:
在这里插入图片描述

价值评估

所有的智能体共享一个中心化的价值评估网络(即Critic网络),Critic的输入为所有智能体的状态向量和动作,输出为对应智能体的价值,如下图所示。
在这里插入图片描述

执行

虽然每个智能体都有一个Crtic网络,但其网络参数其实是一样的,该 Critic 网络在训练的过程中同时对每个智能体的 Actor 网络给出指导而执行时每个智能体的 Actor 网络则是完全独立做出行动,即去中心化地执行,如下图所示。
在这里插入图片描述

Critic给Actor指导

关于Critic 网络在训练的过程中如何对每个智能体的 Actor 网络给出指导,如下图所示,首先从经验池中随机采样出所有智能体的历史状态信息和历史动作信息,随后将历史状态信息输入Actor网络得到当前智能体的动作策略,再将当前智能体的动作,和其他所有信息输入Critic,得到当前智能体的价值,最后以此为梯度更新Actor网络,以实现坦克价值的最大化。
在这里插入图片描述

三、实验效果

训练情况

此环境的奖励设置和参数,经过多次调参和修改,最终得到一个比较满意的环境效果和模型的收敛效果(在3v3的简单环境下)。

假设此研究要训练的一方为红方,要对抗的一方为蓝方。

实验时发现:
在使用一个固定规则的打法比较好的敌方进行对抗训练时,训练后的智能体容易过拟合。具体表现为:将训练后的智能体与固定规则的敌方进行对抗时,大胜率较高,但是与随机行动的敌方进行对抗时,几乎没有什么策略。

这里固定规则具体为:根据当前状态选择动作 :攻击在射击范围内最近的“活着的”敌人,如果射击范围内没有敌人,则向敌人靠近,若离敌人太近则后退。

而使用训练方和一个随机行动的敌方进行对抗训练时,学得的策略更加具有鲁棒性。在和固定规则的敌方进行对抗时策略也较好。

故,之后实验均为与随机行动的敌方进行游戏所进行的训练。

超参数设置:
在这里插入图片描述

探索噪音设置

在实验时发现,探索噪音标准差应该随着大胜率的增加而减小,并且探索噪音减小的同时还应该增加探索噪音标准差下降的门槛,这里的门槛即到一定大胜率才可以降低探索噪音标准差,这样才可以使得智能体循序渐进的缩小自己的探索范围,且在自己探索范内尽可能学习到好的策略。

具体的代码如下:
在这里插入图片描述

实验曲线效果图:
使用tensorboard来记录训练时要记录的值。
训练曲线图:以训练的坦克0为例:坦克0的奖励曲线图
在这里插入图片描述
胜率曲线图:
在这里插入图片描述
大胜率图
在这里插入图片描述
在使用与随机策略的敌方进行对抗训练,在训练了60万个回合之后,可以达到大概75%的大胜率以及近100%的大胜率。
于是使用此策略与固定规则的策略进行测试,测试时将固定规则动作引入0.12math.pi方差的噪音,来模拟博弈,例:剪刀石头布的游戏。
进行测试1000次,测试结果如下:

在这里插入图片描述
最终结果也稳定在82%左右,证明了此策略具有较好的鲁棒性。
使用python库函数中的matplotlib.pyplot来绘制实际的仿真对战图,红方为训练方,蓝方为使用固定策略的敌方,可以看出打击的位置较好,可以认为是学到了一个比较好的策略,其中,棋子上的数字为剩余的血量值。
测试渲染图:
在这里插入图片描述
但是基于其训练时状态有敌方位置的信息,所以其收敛才较快,后续进一步改进时,不将敌方位置的信息直接给训练网路训练,而是加入可视规则,与一方的距离在一定范围才能得知对方位置信息来进行训练,发现曲线收敛便较慢了。

github代码:https://github.com/wild-firefox/toy_env_file

四、总结

该研究不仅丰富了多智能体强化学习的理论基础,还通过实际对抗场景的构建,验证和改进相关算法,促进理论与实践的良性互动。研究红蓝双方对抗不仅在理论上深化了多智能体系统和强化学习的理解,还在实际应用中具备重要的战略和技术价值。通过持续的研究和优化,有望在多个领域产生深远的影响,推动智能系统向更高效、可靠和自主的方向发展。


http://www.ppmy.cn/embedded/154143.html

相关文章

【汇编】x86汇编编程寄存器资源心中有数

1. CPU状态及控制寄存器 TR,GDTR,LDTRcr0-cr3EFLAGS 等等 2. 业务计算寄存器(我起的名字) 业务寄存器用于访问内存、参数传递、数据传递、计算。 段寄存器6个: cs,ds,es,ss&…

基于 Python 和 OpenCV 的人脸识别上课考勤管理系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

开源AI模型的优势、挑战与未来发展分析

开放源代码模型在灵活性和生态系统方面具有竞争力,可能会超越闭源API 开放源代码模型在灵活性和生态系统方面的竞争力主要体现在以下几个方面: 1. 灵活性 定制化能力: 开放源代码模型允许用户根据特定需求进行修改和调整。这种灵活性使得开发者能够根…

解决无法远程管理Windows Server服务器核心安装

问题 有时,人们会为了节省运算资源,例如运行Hyper-V虚拟机,而选择Windows Server核心安装,即无图形化界面。这时,我们就只能通过Powershell命令对其进行操控,或为了获得图形化界面而使用远程服务器管理工具…

C# 将 List 转换为只读的 List

一、引言 在 C# 编程的广阔世界里,数据的安全性与稳定性始终是我们关注的焦点。当涉及到集合数据的处理时,有时我们会面临这样一个关键需求:将List转换为只读的List。这一操作看似简单,实则蕴含着重大意义。它如同为我们的数据披…

【优选算法篇】:模拟算法的力量--解决复杂问题的新视角

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:优选算法篇–CSDN博客 文章目录 一.模拟算法二.例题1.替换所有的问号2.提莫攻击3.外观数列4…

企业AI助理的自然语言处理:提升客服服务质量

在当今竞争激烈的市场环境中,优质的客户服务已成为企业脱颖而出的重要法宝。自然语言处理(NLP)技术在企业AI助理中的应用,极大地提升了客服服务的质量和效率,为企业带来了显著的竞争优势。 一、自然语言处理技术在企业…

Python对接GitHub:详细操作指南

在现代软件开发中,GitHub已经成为不可或缺的代码托管和版本控制平台。作为开发者,能够通过编程方式与GitHub交互可以大大提高工作效率。本文将详细介绍如何使用Python对接GitHub,实现仓库管理、文件操作、Issue处理、Pull Request管理以及Tag操作等功能。 © ivwdcwso (ID:…