文章目录
- 前言
- 一、环境
- 规则
- 具体参数
- 二、原理
- 价值评估
- 执行
- 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
四、总结
该研究不仅丰富了多智能体强化学习的理论基础,还通过实际对抗场景的构建,验证和改进相关算法,促进理论与实践的良性互动。研究红蓝双方对抗不仅在理论上深化了多智能体系统和强化学习的理解,还在实际应用中具备重要的战略和技术价值。通过持续的研究和优化,有望在多个领域产生深远的影响,推动智能系统向更高效、可靠和自主的方向发展。