【OS安装与使用】part6-ubuntu 22.04+CUDA 12.4运行MARL算法(多智能体强化学习)
文章目录
- 一、待解决问题
- 1.1 问题描述
- 1.2 解决方法
- 二、方法详述
- 2.1 必要说明
- 2.2 应用步骤
- 2.2.1 下载源码并安装
- 2.2.2 安装缺失的依赖项
- 2.2.3 训练+执行MAPPO算法实例
- 三、疑问
- 四、总结
一、待解决问题
1.1 问题描述
已配置好基础的运行环境,尝试运行MARL算法。
1.2 解决方法
(1)基于论文源码,尝试实例运行MAPPO算法
论文链接:The Surprising Effectiveness of PPO in Cooperative, Multi-Agent Games
源码链接:This is the official implementation of Multi-Agent PPO (MAPPO).
二、方法详述
2.1 必要说明
硬件、软件运行环境配置如下:
操作系统:ubuntu 22.04 LTS
显卡型号:Geforce RTX 4060 Mobile
显卡驱动:nvidia-550.120
CUDA版本:CUDA 12.4
预装软件:Anaconda | pip3
python版本:3.11.11
Pytorch版本:torch2.6.0 | torchaudio 2.6.0 | torchvision 0.21.0
TensorFlow版本: 2.17.0 (base + GPU)
2.2 应用步骤
2.2.1 下载源码并安装
github下载源码到本地,进入到虚拟环境开始安装
conda create -n mappo python=3.11
conda activate mappo
cd code/on-policy-main/
pip install -e .
出现个提示,但还是成功安装:

2.2.2 安装缺失的依赖项
由于最后测试代码是在MPE环境中,先安装依赖,再跑测试代码
conda install seaborn
cd onpolicy/scripts/train_mpe_scripts/
chmod +x ./train_mpe_spread.sh
./train_mpe_spread.sh
预期之内,缺少模块 ‘wandb’ ,报错如下:
过程当中还有许多模块存在缺失。
ModuleNotFoundError: No module named ‘wandb’
ModuleNotFoundError: No module named ‘absl’
ModuleNotFoundError: No module named ‘gym’
ModuleNotFoundError: No module named ‘tensorboardX’
ModuleNotFoundError: No module named ‘imageio’
没有咱就安装!但遵从一个原则:
🪶🪶🪶 “能用conda install就用,不能再用 pip3 install ,使用 conda 安装包可以避免依赖冲突,确保环境的稳定性” 🪶🪶🪶
pip3 install wandb
#安装了pytorch就没必要再安装
#pip3 install torch torchvision torchaudio
conda install absl-py
pip3 install gym
conda install tensorboardX
conda install imageio
./train_mpe_spread.sh
2.2.3 训练+执行MAPPO算法实例
./train_mpe_spread.sh
重新执行脚本,出现如下画面,简而言之,wandb 是一个机器学习实验跟踪和分析工具,可以线上共享结果和日志记录,可以看个人需求自行选择是否使用该工具。

暂时先选择 “3” ,开始 “ 漫长 ”的训练过程。
Scenario simple_spread Algo rmappo Exp check updates 0/6250 episodes, total num timesteps 3200/20000000, FPS 1838.
average episode rewards is -224.03669357299805
…
…
Scenario simple_spread Algo rmappo Exp check updates 6245/6250 episodes, total num timesteps 19987200/20000000, FPS 2333.
average episode rewards is -112.2522234916687
看起来像是总共跑了6250个episodes,不断优化奖励值reward,平均episode reward从初始的-224到最终的-112。
最终还有一些其它的数据统计,看样子是完美运行了,运行环境搭建 “ 大成功 ”!!!
wandb: Run history:
wandb: actor_grad_norm ▆▅█▆▇▆█▇▇▅▂▄▄▃▃▃▂▃▂▄▃▃▂▄▃▃▅▂▃▁▆▃▃▄▃▃▄▃▃▃
wandb: agent0/individual_rewards ▁▂▄▅▆▇▇▇▇█▇▇██▇█▇█▇█████████████████████
wandb: agent1/individual_rewards ▁▄▅▅▅▆▆▆▆▆▇▆▇▇▇▇▇█▇▇▇█▇▇▇█▇▇██▇███████▇█
wandb: agent2/individual_rewards ▁▃▄▅▆▇▇▇▇▇▇▇▇▇▇▇█▇▇▇▇▇█▇█▇█▇█▇█████▇▇▇██
wandb: average_episode_rewards ▁▃▄▄▅▆▇▇▇▇▇▇▇█▇▇▇████▇▇█▇▇▇▇████▇███████
wandb: critic_grad_norm █▆▄▄▂▃▂▂▂▂▁▁▁▂▁▂▂▂▂▁▂▃▁▂▂▁▂▂▂▂▁▂▁▁▂▁▁▂▂▁
wandb: dist_entropy █▇▇▇▅▅▄▅▅▄▄▄▄▄▄▃▃▃▂▂▂▂▂▂▂▂▂▂▂▂▁▁▁▁▁▁▁▁▁▁
wandb: policy_loss █▄▄▁▃▄▁▁▂▄▂▂▁▂▂▃▃▁▂▁▃▂▂▁▂▂▁▂▂▁▂▂▃▁▂▂▃▁▃▃
wandb: ratio ▅▅▆▃█▃▄▄▆█▃▄▃▄▆▄▅▅▂▃▇▅▂▄▃▅▂▂▄▁▅▄▃▅▄▅▅▅▂▄
wandb: value_loss █▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▁▁▂▁▁▁▂▂▁▁▁▁▁▁▂▂▁▁▁
wandb:
wandb: Run summary:
wandb: actor_grad_norm 0.22411
wandb: agent0/individual_rewards -1.17638
wandb: agent1/individual_rewards -1.19982
wandb: agent2/individual_rewards -1.19982
wandb: average_episode_rewards -112.25222
wandb: critic_grad_norm 0.03261
wandb: dist_entropy 0.41139
wandb: policy_loss -0.00934
wandb: ratio 0.99943
wandb: value_loss 0.01067
(下一步,进入到MAPPO算法原理学习环节,可跳转至【动手学强化学习】篇,共同学习!!!)
💐💐💐 完结撒花 💐💐💐
三、疑问
暂无。
四、总结
- 搭建一个学习环境,还是要以“目标导向”来实现,例如【OS安装与使用】这个系列就是为了运行MARL算法。学习的过程就像是 “搭积木” ,哪里缺失补充哪里,不要想着一口吃成一个胖子,一步一步解决当前存在的问题,脚踏实地。
- 遇到问题,不要总想着依赖其它人或物,先自身寻找答案,耐心一些,仔细一些。先确定问题本质,如若是创新性的难题,无人遇到过,可直接找 “大同行” 交流;如若是大家都做过的事项,先从自身出发,寻找解决之道,尝试许多方法,依然无解过后,再另寻他见。
相关文章:
【OS安装与使用】part6-ubuntu 22.04+CUDA 12.4运行MARL算法(多智能体强化学习)
文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 下载源码并安装2.2.2 安装缺失的依赖项2.2.3 训练执行MAPPO算法实例 三、疑问四、总结 一、待解决问题 1.1 问题描述 已配置好基础的运行环境,尝试运行MARL算法。 1…...
【Python爬虫(35)】解锁Python多进程爬虫:高效数据抓取秘籍
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
HarmonyOS 开发套件 介绍 ——上篇
HarmonyOS 开发套件 介绍 ——上篇 在当今科技飞速发展的时代,操作系统作为智能设备的核心,其重要性不言而喻。而HarmonyOS,作为华为推出的全新操作系统,正以其独特的魅力和强大的功能,吸引着越来越多的开发者和用户的…...
Linux 高级篇 日志管理、定制自己的Linux系统、备份与恢复
一、日志管理 (1)基本介绍 日志文件是重要的系统信息文件,记录了如用户登录、系统启动、系统安全、邮件及各种服务等相关重要系统事件在安全方面,日志也至关重要,它能记录系统日常发生的各类事情,可用于检…...
deepseek与其他大模型配合组合
DeepSeek与其他大模型的配合组合,展现了其在多个领域中的强大应用潜力和灵活性。以下是对DeepSeek与其他大模型配合组合的详细分析: 一、DeepSeek与华知大模型的组合 背景介绍: 华知大模型是同方知网与华为联手打造的,具备全学科…...
经验分享—WEB渗透测试中遇到加密内容的数据包该如何测试!
经验分享—WEB渗透测试中遇到加密内容的数据包该如何测试! 01 加解密的意义 现阶段的渗透测试让我发现越来越多的系统不只是在漏洞修补方面做了功夫,还对一些参数进行加密,干扰爬虫或者渗透测试的进行。 在我小白阶段看到下图这种加密方式…...
JUC并发—9.并发安全集合四
大纲 1.并发安全的数组列表CopyOnWriteArrayList 2.并发安全的链表队列ConcurrentLinkedQueue 3.并发编程中的阻塞队列概述 4.JUC的各种阻塞队列介绍 5.LinkedBlockingQueue的具体实现原理 6.基于两个队列实现的集群同步机制 4.JUC的各种阻塞队列介绍 (1)基于数组的阻塞…...
JSON格式,C语言自己实现,以及直接调用库函数(一)
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。以下为你提供不同场景下常见的 JSON 格式示例。 1. 简单对象 JSON 对象是由键值对组成,用花括号 {} 包裹&…...
MinkowskiEngine安装(CUDA11.8+torch2.0.1+RTX4070TI)
1、背景 1)因为项目要用这个库:MinkowskiEngine,Minkowski Engine — MinkowskiEngine 0.5.3 documentation 然后就用了之前安装好 MinkowskiEngine 的torch1.8.1,cuda11.1的环境。 2)自己的代码出现cuda不支持torch用gpu进行矩…...
Spring监听器Listener
目录 1、Spring监听器简介 2、事件(Event) 3、监听器(Listener) 3、事件发布器 4、监听器使用 4.1、自定义事件 4.2、自定义监听器 4.3、发布事件 4.4、测试 4.5、使用注解方式监听 4.6、异步事件处理 5、总结 1、Spri…...
【深度学习在图像配准中的应用与挑战】
图像配准在深度学习中的解决方案越来越多,尤其是通过卷积神经网络(CNN)和生成对抗网络(GAN)等方法,可以显著提升图像配准的效果,尤其是在处理复杂的非刚性变换和大范围的图像差异时。 1. 基于深…...
使用 Docker-compose 部署 MySQL
使用 Docker Compose 部署 MySQL 本文将详细指导如何使用 docker-compose 部署 MySQL,包括基本配置、启动步骤、数据持久化以及一些高级选项。通过容器化部署 MySQL,你可以快速搭建一个隔离的数据库环境,适用于开发、测试或小型生产场景。 关…...
blender笔记2
一、物体贴地 物体->变换->对齐物体 ->对齐弹窗(对齐模式:反方,相对于:场景原点,对齐:z)。 之后可以设置原点->原点--3d游标 二、面上有阴影 在编辑模式下操作过后,物体面有阴影。 数据-&g…...
特殊符号_符号图案_特殊符号大全
特殊符号↑返回顶部 © ℗ ร ಗ ย ☫ ౖ ஃ ⁜ ☊ ☋ ❡ ๑ ి ▧ ◘ ▩ ▣ ◙ ▨ ۞ ۩ ಔ ృ ☎ ☏ ⍝ ⍦ ▤ ▥ ▦ ✠ @ ಓ ↂ ూ ☮ ி ﺴ ✈ ✉ ✁ ✎ ✐ 〄 # ‡ ☪ ⌚ ☢ ▪ ▫ ✆ ✑ ✒ ☌ ❢ ▬ ☍ □ ■ ؟ ‼ ‽ ☭ ✏ ⌨…...
Unity学习part4
1、ui界面的基础使用 ui可以在2d和矩形工具界面下操作,更方便,画布与游戏窗口的比例一般默认相同 如图所示,图片在画布上显示的位置和在游戏窗口上显示的位置是相同的 渲染模式:屏幕空间--覆盖,指画布覆盖在游戏物体渲…...
【AI绘画】大卫• 霍克尼风格——自然的魔法(一丹一世界)
大卫• 霍克尼,很喜欢这个老头,“艺术是一场战斗”。老先生零九年有了iphone,开始用iphone画画,一零年开始用ipad画画,用指头划拉,据说五分钟就能画一幅,每天早上随手画几幅送给身边的朋友。很c…...
MySQL日志undo log、redo log和binlog详解
MySQL 日志:undo log、redo log、binlog 有什么用? 一、前言 在MySQL数据库中,undo log、redo log和binlog这三种日志扮演着至关重要的角色,它们各自承担着不同的功能,共同保障了数据库的正常运行和数据的完整性。了解…...
C++中的指针
一.指针的定义 在C中,指针是一种特殊的变量,它存储另一个变量的内存地址。简单的说,指针是指向另一个数据类型的“指针”或“引用”,我们可以通过指针来间接操作其他变量的值。 指针的基本语法: 数据类型 *指针变量名 …...
拆解微软CEO纳德拉战略蓝图:AI、量子计算、游戏革命如何改写未来规则!
2025年2月19日 知名博主Dwarkesh Patel对话微软CEO萨蒂亚纳德拉 在最新访谈释放重磅信号:AI将掀起工业革命级增长,量子计算突破引爆材料科学革命,游戏引擎进化为世界模拟器。 整个视频梳理出几大核心观点,揭示科技巨头的未来十年…...
智能算法如何优化数字内容体验的个性化推荐效果
内容概要 在数字内容体验的优化过程中,个性化推荐系统的核心价值在于通过数据驱动的技术手段,将用户需求与内容资源进行高效匹配。系统首先基于用户行为轨迹分析,捕捉包括点击频次、停留时长、交互路径等关键指标,形成对用户兴趣…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
