MAPPO动作类型改进(一)——连续动作改进

说明

在前几篇文章中博主已经大致介绍过MAPPO算法代码的大致流程,在接下来的文章中博主会针对如何改进动作类型以更好地帮助大家结合自己的环境使用MAPPO算法。
本文和后续改进全部基于light_mappo进行改进。所有截图均为未进行操作的原始代码,代码块里为更改后的代码

第一步:更改env_wappers.py里面的参数

1.更改self.discrete_action_space为False

self.discrete_action_space = False

2.定义连续动作空间
原始代码Box函数中的shape=(2,),代表连续动作空间为2维;high和low为连续动作的上下限。
在这里插入图片描述
这里的2最好改成self.signal_action_dim,这样跟env的动作空间维度能保持一致。

if self.discrete_action_space:
    u_action_space = spaces.Discrete(self.signal_action_dim)  # 5个离散的动作
else:
    u_action_space = spaces.Box(
						    low=-self.u_range, high=+self.u_range, 
						    shape=(self.signal_action_dim,), dtype=np.float32
						    )  # [-1,1]
if self.movable:
    total_action_space.append(u_action_space)

第二步:更改distributions.py参数

由于上面的改进action_space已经变为Box,所以在act.py中

        elif action_space.__class__.__name__ == "Box":(这里为true)
            action_dim = action_space.shape[0]
            self.action_out = DiagGaussian(inputs_dim, action_dim, use_orthogonal, gain)

但由于action_logits = self.action_out(x, available_actions)有两个参数需要传进函数,但class DiagGaussian下的def forward(self, x):只接受一个变量,因此可以:

action_logits = self.action_out(x)

或者可以:

def forward(self, x, available_actions=None):

第三步:更改env_runner.py

这里的代码基本意思就是把actions变成环境可识别的action_env,这个需要根据环境而定。在这里插入图片描述
这里不更改会报错,为了方便可以删除,直接把actions赋给actions_env,后期在环境env.py中处理actions_env。

actions_env = actions

第四步:更改act.py

  1. 上面改完后基本就可以运行一个episode了,但是在运行到train_infos = self.train()会出错,原因是act.py中evaluate_actions有问题。问题来源还是第二步中的问题一样,该进方法也是跟第二步一样,但处理方法需要前后保持一致。
    在这里插入图片描述
  2. 改到这里点击运行后会出现如下错误:

在这里插入图片描述
这里错误的原因是action_logits.entropy() active_masks.squeeze(-1)类型不一致造成的,action_logits.entropy() 的为Tensor:(2000, 5), active_masks.squeeze(-1) 为Tensor:(2000,),因此参照

  1. if self.mixed_action:为True 时执行的代码
  2. 基于MAPPO改进的HAPPO

把问题来源那一行改成:

if self.action_type=="Discrete":
	dist_entropy = (action_logits.entropy()*active_masks.squeeze(-1)).sum()/active_masks.sum()
else:
	dist_entropy = (action_logits.entropy()*active_masks).sum()/active_masks.sum()

这一行的公式具体是干什么的我也搞不清楚。

结语

以上改进都来自个人经验,正确性还有需要结合具体环境验证,如有错误,欢迎指正。

对MAPPO算法代码总体流程不太了解,可以参考多智能体强化学习MAPPO源代码解读
对MAPPO算法理论知识不太了解,可以参考多智能体强化学习之MAPPO理论解读多智能体强化学习(二) MAPPO算法详解

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值