协同多智能体学习的价值分解网络的原理与代码复现

本文介绍了强化学习中的马尔可夫决策过程和VDN算法。VDN通过将总Q值分解为多个Q值之和,实现多智能体的协调,但可能导致不具备具体情境意义。在算法实现中,使用RMSprop优化器,并提供了训练过程中的Q值计算和目标Q值的获取。同时,讨论了双Q-learning的情况。
摘要由CSDN通过智能技术生成

概念引入

强化学习

马尔可夫决策过程

算法思想

VDN可以说是QMIX算法的前身
在这里插入图片描述
主要思想是把总的Q分解为多个Q之和,Q即对应智能体的动作价值

在这里插入图片描述
即:视多为一

但是也有副作用,那就是,累计出来的Q并不是针对具体情况,具体条件的Q,并没有具体意义。

算法复现

首先定义每个智能体的 QLearner类,将默认参数初始化后,判断为VDN网络,则将self.mixer初始化为VDNMixer(),并将网络参数复制给 self.optimiser使用优化算法RMSprop,其中参数根据类中的默认参数设置。

class QLearner:
	def __init__(self,mac,scheme,logger,args):
		self.args = args
		self.mac=mac
		self.logger = logger
		self.params = list(mac.parametes())
		self.last_target_update_episode=0
		self.mixer = None
		if args.mixer is not None:
			if args.mixer == "vdn":
				self.mixer = VDNMixer()
			else:
				raise ValueError("Mixer {} not recognised.".format(args.mixer))
				self.params += list(self.mixer.parametes())
				self.target_mixer = copy,deepcopy(self.mixer)
		self.optimiser = RMSprop(params = self.params,lr = args.lr,alpha = args.optm_alpha,eps = args.optm_eps)
		self.log_stats_t = -self.args.leraner_log_interval -1

在训练函数中,先获取有关参数的值,之后计算估计Q的值,将 agent_outs 存入 mac_out中,循环结束后,将 mac_out第一个维度数值进行叠加,形成新的tensor,最后为每个智能体所采取的操作选择Q值

def train(self,batch:EpisodeBatch,t_env:int,episode_num:int):
	rewards = batch["rewards"][:,:-1]#视多为一
	actions = batch["actions"][:,:-1]
	terminated = batch["terminated"][:,:-1].float()
	mask = batch["filled"][:,:-1].float()
	mask[:,:-1]=mask[:,:-1]*(1 - terminated[:,:-1])
	avail_actions = batch["avail_actions"]


	mac_out = []
	self.mac.init_hidden(batch.batch_size)
	for t in range(batch.max_seq_length):
		agent_outs = self.max.forward(batch,t = t)
		mac_out.append(agent_outs)
	mac_out - torch.stack(mac,dim = 1)
	chosen_action_qvals = th.gather(mac_out[:,:-1],dim = 3,index = actions).squeeze(3)

之后计算目标网络所需的Q值,得到 target_mac_out.同上,对第一个维度进行叠加, target_mac_out = th.stack(target_mac_out[1:],dim=1)
剔除不可用动作,target_mac_out[avail_actions[:,1:]==0] = -9999999若设置为双Qlearning则同样的操作用于 mac_out
即原网络的Q值并得到其中的最大值索引,并提取 target_mac_out中对应的值,target_max_qvals = torch.gather(target_mac_out,3,cur_max_actions).squeeze(3)
否则,target_max_qvals = target_mac_out.max(dim=3)[0]

target_mac_out = []
self.target_mac.init_hidden(batch.batch_size)
for t in range(batch.max_seq_length):
	target_agent_outs = self.target_mac.forward(batch,t=t)
	target_mac_out.append(target_agent_outs)
	target_mac_out = th.stack(target_mac_out[1:],dim=1)
	target_mac_out[avail_actions[:,1:]==0] = -9999999

if self.args.double_q:
	mac_out[avail_actions==0] = -9999999
	cur_max_actions = mac_out[:,1:].max(dim=3,keepdim = True)[1]
else:
	target_max_qvals = target_mac_out.max(dim=3)[0]

原网络和目标网络分别将操作选择Q值和最大Q值估计输入网络,之后计算1步Q-learning目标,targets = rewards + self.args.gamma * (1 - terminated) * target_max_qvals
和 td_error = (chosen_action_qvals - targets.detach())输出来自填充数据的目标,masked_td_error = td_error * mask最后计算l2损失,即实际数据的平均值


if self,mixer is not None:
	chosen_action_qvals = self.mixer(chosen_action_qvals,batch["state"][:,:-1])
	target_max_qvals = self.target_mixer(target_max_qvals,batch["state"][:,:-1])
targets = rewards + self.args.gamma * (1 - terminated) * target_max_qvals
td_error = (chosen_action_qvals - targets.detach())
mask = mask.expend_as(td_error)
masked_td_error = td_error * mask
loss = (masked_td_error **2).sum()/mask.sum()
【项目介绍】 基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip 基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip 基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip 【说明】 1、项目源码在上传前,都经过本地成功运行,功能测试无误。请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、机械电子信息等相关专业背景的在校大学生、专业老师 行业从业人员等下载使用。 3、用途:项目代表性强,具有创新性和启发性,故具有挺高的学习借鉴价值。不仅适合小白入门进阶,还可作为毕设项目、课程设计、大作业、比赛初期项目立项演示等。 4、如果基础还不错,又热爱学习钻研,也可基于此项目基础上进行修改进行二次开发。 本人也是技术狂热者,如果觉得此项目对您有价值,欢迎下载使用! 无论您是运行还是二次开发,遇到问题或困惑,欢迎私信交流学习
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丰。。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值