当前位置: 首页 > news >正文

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=[]

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【免费】企业级大模型应用推荐:星环科技无涯·问知
  • 解决firefly rk3399使用ffmpeg硬解码rga报错的问题
  • PHP中如何将变量从函数传递给acf_add_filter
  • Golang基于DTM的分布式事务SAGA实战
  • 微前端架构:使用不同框架构建可扩展的大型应用
  • 【生成式人工智能-十一一个不修改模型就能加速语言模型生成的方法】
  • C语言进阶(9)
  • Python进阶之3D图形
  • Taro+Vue 创建微信小程序
  • Python Scripts: 超过60个Python脚本,助您自动化地完成各种任务,提升工作效率
  • Hadoop如何搭建计算和存储节点分离
  • Nginx--虚拟机配置
  • Redis 哈希(Hash)
  • 【LiteX】【仿真】使用litex_sim在Python环境中实现FPGA SoC仿真测试
  • 谷歌的高级指令有哪些
  • 【mysql】环境安装、服务启动、密码设置
  • Flannel解读
  • Git学习与使用心得(1)—— 初始化
  • Java 内存分配及垃圾回收机制初探
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Java,console输出实时的转向GUI textbox
  • PHP的类修饰符与访问修饰符
  • Ruby 2.x 源代码分析:扩展 概述
  • SQLServer之创建显式事务
  • Vue组件定义
  • 前端_面试
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • Android开发者必备:推荐一款助力开发的开源APP
  • 我们雇佣了一只大猴子...
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • # Redis 入门到精通(九)-- 主从复制(1)
  • # Redis 入门到精通(一)数据类型(4)
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (待修改)PyG安装步骤
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (篇九)MySQL常用内置函数
  • (十三)Flask之特殊装饰器详解
  • (四)opengl函数加载和错误处理
  • (万字长文)Spring的核心知识尽揽其中
  • (原)本想说脏话,奈何已放下
  • (转)甲方乙方——赵民谈找工作
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .net 简单实现MD5
  • .NET 解决重复提交问题
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @开发者,一文搞懂什么是 C# 计时器!
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [023-2].第2节:SpringBoot中接收参数相关注解
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [android] 请求码和结果码的作用