您的位置:首页 > 文旅 > 旅游 > 24/8/18算法笔记 MARL多智能体算法

24/8/18算法笔记 MARL多智能体算法

2024/12/23 10:46:48 来源:https://blog.csdn.net/yyyy2711/article/details/141292026  浏览:    关键词:24/8/18算法笔记 MARL多智能体算法

多智能体,想象一场2v2的对决

多智能体强化学习(Multi-Agent Reinforcement Learning,简称 MARL)是强化学习的一个分支,它涉及多个智能体在同一个环境中相互作用和学习。在多智能体环境中,每个智能体都有自己的观察、动作空间和奖励信号,它们需要通过合作或竞争来实现各自的目标。以下是多智能体强化学习的一些关键特点:

  1. 合作与竞争:在多智能体环境中,智能体可以是合作的(共同实现一个目标),也可以是竞争的(争夺资源或达成个人目标)。

  2. 共同环境:所有智能体都存在于同一个环境或世界中,它们的动作可能会相互影响环境的状态。

  3. 策略交互:智能体的策略不仅取决于自身的观察和目标,还可能受到其他智能体策略的影响。

  4. 信用分配:在多智能体环境中,确定哪些智能体对成功或失败的团队结果负责是一个挑战。

  5. 通信与协调:智能体可能需要通过通信来协调它们的行动,以实现更有效的合作或竞争。

  6. 部分可观察性:每个智能体可能只能观察到环境的一部分,需要通过局部信息来做出决策。

  7. 多样化的策略:在多智能体环境中,可能需要学习多种策略来应对不同的对手或合作伙伴。

  8. 学习稳定性:多智能体环境中的策略学习可能更加复杂和不稳定,因为每个智能体的学习过程都可能受到其他智能体策略变化的影响。

  9. 算法设计:设计多智能体强化学习算法时,需要考虑智能体之间的相互作用和潜在的非平稳性。

  10. 应用领域:多智能体强化学习在多个领域都有应用,包括机器人协作、自动驾驶车辆的交通管理、经济市场模拟、社交网络分析、多人游戏等。

多智能体强化学习的一些常见算法包括:

  • 独立学习:每个智能体独立地使用强化学习算法学习,不考虑其他智能体的存在。
  • 联合学习:智能体在一定程度上共享知识或模型,以促进合作或协调。
  • 通信机制:智能体通过某种形式的通信来交换信息,以协调它们的行动。
  • 竞争性学习:智能体学习如何在其他智能体存在的情况下优化自己的策略。
  • 模仿学习:智能体通过模仿其他智能体的行为来学习策略
#测试环境,15x15的棋盘,两个己方棋子,两个对方的
from combat import Combatdef test_env():state = env.reset()action = env.action_space.sample()next_state,reward,over,_ = env.step(action)print('state=',len(state[0]),len(state[1]))print('action=',action)print('reward=',reward)print('next_state=',len(next_state[0]),len(next_state[1]))print('over',over)env = Combat(grid_shape = (15,15),n_agents= 2,n_opponents= 2)test_env()

定义PPO模型,省略http://t.csdnimg.cn/teQs3

获取一局游戏数据

def get_data():data0= {'state' : [],'action':[],'reward' :[],'next_state':[],'over':[],}data1 = {'state' : [],'action':[],'reward' :[],'next_state':[],'over':[],}state = env.reset()over =Falsewhile not over:action= [None,None]action[0] = ppo.get_action(state[0])action[0] = ppo.get_action(state[1])next_state,reward,over,info = env.step(action)win = info['win']del info#对reward进行偏移if win:reward[0] +=100reward[1]+=100else:reward[0] -=0.1reward[1] -=0.1data0['state'].append(state[0])data0['action'].append(state[0])data0['reward'].append(state[0])data0['next_state'].append(next_state[0])data0['over'].append(False)#常量data1['state'].append(state[1])data1['action'].append(state[1])data1['reward'].append(state[1])data1['next_state'].append(next_state[1])data1['over'].append(False)#常量state = next_stateover = over[0] and over[1]data0['state'] = torch.FloatTensor(data0['state']).reshpe(-1,150)data0['action'] = torch.LongTensor(data0['action']).reshpe(-1,1)data0['reward'] = torch.FloatTensor(data0['reward']).reshpe(-1,1)data0['next_state'] = torch.FloatTensor(data0['next_state']).reshpe(-1,150)data0['over'] = torch.LongTensor(data0['over']).reshpe(-1,1)data1['state'] = torch.FloatTensor(data0['state']).reshpe(-1,150)data1['action'] = torch.LongTensor(data0['action']).reshpe(-1,1)data1['reward'] = torch.FloatTensor(data0['reward']).reshpe(-1,1)data1['next_state'] = torch.FloatTensor(data0['next_state']).reshpe(-1,150)data1['over'] = torch.LongTensor(data0['over']).reshpe(-1,1)return data0,data1,win

训练

wins = []
for i in range(200000):data0,data1,win=get_data()wins.append(win)ppo.train(**data0)ppo.train(**data1)if i %10000 == 0:wins = wins[-100:]print(i,sum(wins)/len(wins))wins=[]

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com