多智能体强化学习示例

程序功能

这段代码实现了一个多智能体强化学习环境,其中两个智能体在5x5的网格上移动:
智能体目标:
Agent 1 从 (0, 0) 出发,目标是 (4, 4)。
Agent 2 从 (4, 4) 出发,目标是 (0, 0)。
动作空间:每个智能体有4个动作(上、下、左、右)。
奖励:到达目标位置获得 10 分,否则每步 -1 分。
终止条件:两个智能体都到达目标。
主程序中,两个智能体在随机动作下执行5个回合,并打印每一步的状态和奖励。
在这里插入图片描述

代码

import numpy as np
import gym
from gym import spaces# 定义多智能体环境
class MultiAgentEnv(gym.Env):def __init__(self):super(MultiAgentEnv, self).__init__()# 定义网格世界大小self.grid_size = 5# 智能体的初始位置self.agent1_pos = np.array([0, 0])  # Agent 1 起始点self.agent2_pos = np.array([4, 4])  # Agent 2 起始点# 智能体的目标位置self.goal1 = np.array([4, 4])  # Agent 1 的目标self.goal2 = np.array([0, 0])  # Agent 2 的目标# 定义动作空间和状态空间self.action_space = spaces.Discrete(4)  # 上、下、左、右 4 个动作self.observation_space = spaces.Box(low=0, high=self.grid_size - 1, shape=(2,), dtype=np.int32)def reset(self):# 重置智能体的位置self.agent1_pos = np.array([0, 0])self.agent2_pos = np.array([4, 4])return self._get_obs()def step(self, actions):# 传入两个智能体的动作action1, action2 = actions# 更新智能体1的位置self.agent1_pos = self._move(self.agent1_pos, action1)# 更新智能体2的位置self.agent2_pos = self._move(self.agent2_pos, action2)# 检查是否到达目标reward1 = 10 if np.array_equal(self.agent1_pos, self.goal1) else -1reward2 = 10 if np.array_equal(self.agent2_pos, self.goal2) else -1done1 = np.array_equal(self.agent1_pos, self.goal1)done2 = np.array_equal(self.agent2_pos, self.goal2)done = done1 and done2return self._get_obs(), [reward1, reward2], done, {}def _move(self, position, action):# 根据动作移动智能体if action == 0 and position[0] > 0:  # 向上position[0] -= 1elif action == 1 and position[0] < self.grid_size - 1:  # 向下position[0] += 1elif action == 2 and position[1] > 0:  # 向左position[1] -= 1elif action == 3 and position[1] < self.grid_size - 1:  # 向右position[1] += 1return positiondef _get_obs(self):# 返回两个智能体的当前状态return np.array([self.agent1_pos, self.agent2_pos])# 运行多智能体环境
if __name__ == '__main__':env = MultiAgentEnv()for episode in range(5):print(f"Episode {episode + 1}:")obs = env.reset()done = Falsestep = 0while not done:actions = [env.action_space.sample(), env.action_space.sample()]  # 随机动作obs, rewards, done, info = env.step(actions)step += 1print(f" Step {step}:")print(f"  Agent 1 Position: {obs[0]}, Reward: {rewards[0]}")print(f"  Agent 2 Position: {obs[1]}, Reward: {rewards[1]}")print("Episode finished!\n")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144292.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2023年全国研究生数学建模竞赛华为杯C题大规模创新类竞赛评审方案研究求解全过程文档及程序

2023年全国研究生数学建模竞赛华为杯 C题 大规模创新类竞赛评审方案研究 原题再现&#xff1a; 现在创新类竞赛很多&#xff0c;其中规模较大的竞赛&#xff0c;一般采用两阶段&#xff08;网评、现场评审&#xff09;或三阶段&#xff08;网评、现场评审和答辩&#xff09;评…

数据库加密算法

功能简介 对数据库字段进行加密,如下图: 一、yml配置 注意: MD5_32 MD5_16 BASE64 AES SM2 SM3 SM4 需要 password(14位 ,26位, 32 位) 就行 非对称算法如:SM2,RSA, 需要配置 密码:password 公钥:publicKey 私钥:privateKey yml: # 数据加密 mybatis-encry…

【Linux】从内核认识信号

一、阻塞信号 1 .信号的一些其他相关概念 实际执行信号的处理动作称为信号递达(Delivery) 信号从产生到递达之间的状态,称为信号未决(Pending)。 进程可以选择阻塞 (Block )某个信号。 被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作. 注…

商标转让成功,转让前和转让后的注意!

近日帮给某公司办理的商标转让证明成功下证&#xff0c;在购买闲置商标或者不同的主体之间商标需要更换的&#xff0c;就要做商标转让申请&#xff0c;大约是2个半月到3个月左右就可以下证。 商标转让时近似商标要一并转让&#xff0c;要不就没办法转让成功&#xff0c;比如在3…

第六天旅游线路预览——从乌鲁木齐到天山天池景区入口

第六天&#xff1a;从乌鲁木齐到天山天池&#xff0c;晚上回乌鲁木齐住宿。 第六天从乌鲁木齐到天山天池景区入口的规划结果见下图&#xff1a; 从乌鲁木齐市区到天山天池风景区停车场&#xff0c;路程69公里&#xff0c;车程约1小时&#xff0c;10&#xff1a;30左右到达天山…

使用Addressables+SpriteAtlas打包产生冗余

1&#xff09;使用AddressablesSpriteAtlas打包产生冗余 2&#xff09;使用SBP打AssetBundle脚本引用丢失 3&#xff09;Unity构建后处理&#xff08;IPostprocessBuildWithReport等接口&#xff09;抛出异常后&#xff0c;构建不会停止 4&#xff09;Unity 2022.3.0版本使用Oc…

【w0网页制作】Html+Css网页制作影视主题之庆余年Ⅱ含轮播表单(5页面附源码)

庆余年2HTMLCSS网页开发目录 &#x1f354;涉及知识&#x1f964;写在前面&#x1f367;一、网页主题&#x1f333;二、网页效果效果1、轮播效果图Page1、首页Page2、角色介绍Page3、剧情介绍Page4、剧集评价Page5、留言模块 &#x1f40b;三、网页架构与技术3.1 脑海构思3.2 整…

PyQt5 导入ui文件报错 AttributeError: type object ‘Qt‘ has no attribute

问题描述&#xff1a; 利用 PyQt5 编写可视化界面是较为普遍的做法&#xff0c;但是使用全新UI版本的 Pycharm 修改之前正常的UI文件时&#xff0c;在没有动其他代码的情况下发现出现以下报错 AttributeError: type object Qt has no attribute Qt::ContextMenuPolicy::Defaul…

实力再证|海云安连续三年荣登中国网络安全产业联盟(CCIA)榜单,蝉联两届“中国网安产业成长之星”

9月6日&#xff0c;中国网络安全产业联盟&#xff08;CCIA&#xff09;正式公布了2024年中国网安产业竞争力50强、成长之星、潜力之星榜单&#xff0c;据悉&#xff0c;本次榜单调研共历时数月&#xff0c;从多个维度对调研企业进行了全面评估分析&#xff0c;遴选出2024年中国…

en造数据结构与算法C# 用Unity实现简单的群组行为算法 之 分散

因为还没写聚集并且材质没有设置摩擦系数&#xff0c;所以出现了这种刚体受力得到初速度却无法减少&#xff0c;从而乱飞的情况 本教程部分代码师承于siki学院siki老师的人工智能编程这一案例&#xff0c;我认为自己的水平有限&#xff0c;老师的写法太过高级&#xff0c;所以就…

供应十字线激光模组厂家如何选择

在工业自动化、机器视觉及精密测量领域&#xff0c;十字线激光模组作为关键部件&#xff0c;其性能与质量直接关乎到整个系统的稳定性和精确度。因此&#xff0c;选择合适的十字线激光模组厂家显得尤为重要。以下几点&#xff0c;是给大家在纷繁的市场中&#xff0c;提供一份清…

Vue3 项目引入阿里 iconfont 图标和字体的多种方式

&#x1f680; 个人简介&#xff1a;某大型国企资深软件研发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f9…

【PSINS】基于PSINS工具箱的EKF+UKF对比程序|三维定位|组合导航|MATLAB

文章目录 程序描述运行结果下载链接 程序描述 需要PSINS工具箱才能正常运行。集成了EKF和UKF&#xff0c;包含了滤波结果的对比。带中文注释。 运行结果 程序模块&#xff1a; 运动轨迹&#xff1a; 各轴位置误差的曲线&#xff1a; 下载链接 https://gf.bilibili.com/i…

JavaWeb笔记整理——Redis

目录 Redis数据类型 各种数据类型的特点 Redis常用命令 字符串操作命令 哈希操作命令 列表操作命令 集合操作命令 有序集合操作命令 通用命令 在Java中操作Redis Spring Data Redis的使用方式 操作字符串类型的数据 ​编辑操作hash类型的数据 ​编辑 操作列表类…

AI产品经理面试的问题和回复建议

如果你正在考虑找AI产品经理的岗位工作&#xff0c;建议好好准备以下的面试问题&#xff1a; 关于面试时间&#xff1a;一般AI产品经理的面试时间在40分钟-70分钟左右&#xff0c;主要看面试官是否对你感兴趣&#xff08;你的产品经验、气场是否相符&#xff09;。时间越长一般…

秋招面试注意了!网络安全工程师面试最怕遇到的问题,很多人都经历过!

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

IIS+Ngnix+Tomcat 部署网站 用IIS实现反向代理

文中所用到的软件可在此下载。 https://download.csdn.net/download/xingchengaiwei/89733788 1、当我在一台服务器中部署多个网站时遇到了这样的情况&#xff0c;一台Windows Server 2016 服务器上要部署多个APS.NET网站&#xff0c;还需要部署一套Tomcat。Tomcat网站使用的是…

FutureTask源码分析

Thread类的run方法返回值类型是void&#xff0c;因此我们无法直接通过Thread类获取线程执行结果。如果要获取线程执行结果就需要使用FutureTask。用法如下&#xff1a; class CallableImpl implements Callable{Overridepublic Object call() throws Exception {//do somethin…

实时加密机的工作原理

实时加密机&#xff0c;作为数据加密领域的一种高级硬件设备&#xff0c;主要承担着对敏感数据进行实时加密和解密的任务&#xff0c;以确保数据在传输和存储过程中的安全性和完整性。以下是对实时加密机的详细阐述&#xff1a; 一、定义与功能 实时加密机是一种采用先进加密算…

前端项目代码开发规范及工具配置

在项目开发中&#xff0c;良好的代码编写规范是项目组成的重要元素。本文将详细介绍在项目开发中如何集成相应的代码规范插件及使用方法。 项目规范及工具 集成 EditorConfig集成 Prettier1. 安装 Prettier2. 创建 Prettier 配置文件3. 配置 .prettierrc4. 使用 Prettier 集成 …