A Generalized Algorithm for Multi-Objective Reinforcement Learning and Policy Adaptation复现部分过程记录

论文链接 :https://arxiv.org/pdf/1908.08342

论文代码:https://github.com/RunzheYang/MORL

博客https://blog.csdn.net/weixin_56760882/article/details/145572826以深海宝藏环境(DST 域)举例展示复现结果,本文以FTN 域(水果树导航)为例展示复现过程。

复现过程中,git原论文代码,在笔记本上(RTX 4060)配置环境,并运行。


该项目是通用多目标强化学习算法,核心是envelope MOQ-learning,落地在4 类环境(2 个合成环境 + 2 个真实环境):

两个合成环境:

  • Deep Sea Treasure (DST):深海寻宝。
  • Fruit Tree Navigation (FTN):果树导航。

两个复杂真实环境:

  • Task-Oriented Dialog Policy Learning(Dialog):面向任务的对话策略学习。
  • SuperMario Game (SuperMario):超级马里奥游戏。

进入目录synthetic:

文件路径

核心作用

需理解的关键内容

synthetic/train.py

合成环境训练入口

命令行参数解析(如--env-name ft

指定 FTN 环境、--method crl-envelope

指定核心算法)、训练循环逻辑

synthetic/crl/envelope/meta.py

核心算法实现

envelope MOQ-learning 的核心逻辑(多目标奖励加权、策略更新、经验回放)

synthetic/crl/envelope/models

网络结构

线性 / 非线性网络配置(适配不同合成环境的状态 / 动作空间)

synthetic/envs

合成环境定义

DST/FTN 环境的状态、动作、多目标奖励函数定义(理解环境规则是复现的前提)

一、环境搭建——基础依赖安装

原代码依赖的 torch 0.4.0(2018 年版本)对 RTX40 系列显卡的 CUDA 架构支持不足(RTX4060 是 Ada Lovelace 架构,sm_89,而 torch 0.4.0 最高仅支持到 sm_75/Turing 架构)。

为适配RTX4060,升级pytorch:

# 1. 创建新环境(指定Python3.6.15)
conda create -n morl-synthetic python=3.6.15 -y

# 2. 激活新环境
conda activate morl-synthetic

# 3. 安装Python3.6兼容的核心依赖(适配RTX4060)
# 先装numpy/scipy(Python3.6最高兼容版)
pip install numpy==1.19.5 scipy==1.5.4 -i https://pypi.tuna.tsinghua.edu.cn/simple

# 4. 安装torch 1.10.2+cu113(Python3.6唯一支持的高版本,适配RTX4060)
pip install torch==1.10.2+cu113 torchvision==0.11.3+cu113 torchaudio==0.10.2+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html -i https://pypi.tuna.tsinghua.edu.cn/simple

验证 PyTorch+CUDA 是否适配 RTX4060:

python -c "import torch; 
print('PyTorch版本:', torch.__version__);
print('CUDA版本:', torch.version.cuda);
print('CUDA是否可用:', torch.cuda.is_available());
print('GPU名称:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else '未识别')"

安装其他辅助依赖:

# 其他辅助依赖
pip install termcolor==1.1.0 torchfile==0.1.0 Pillow==8.4.0 six==1.16.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

安装visdom:

(之所以着重单列出来,是因为visdom 启动时会尝试从外网下载前端静态资源(js/css),但网络总是超时 / 访问失败。最后选择离线下载以及编译)

1.下载 visdom 离线资源包:

cd D:\ProgramData\论文复现\FirRL
# 克隆 visdom 仓库
git clone https://github.com/fossasia/visdom.git【我自己直接下载了zip】
#进入解压的visdom-master目录
cd D:\ProgramData\论文复现\FirRL\visdom-master
# 切换yarn镜像源(解决国内下载依赖慢的问题)
yarn config set registry https://registry.npmmirror.com
# 设置electron镜像源
yarn config set electron_mirror https://npmmirror.com/mirrors/electron/
# 安装Visdom前端编译依赖(耗时3-8分钟,无Error即成功)跳过可选依赖(electron属于可选依赖)
yarn install --ignore-optional
# 编译生成static文件夹(1-2分钟,看到Compiled successfully即成功)
yarn run build
# 查找visdom安装目录(复制输出的路径)
python -c "import visdom; print(visdom.__path__[0])"
输出:D:\Anaconda\envs\morl-synthetic\lib\site-packages\visdom
# 复制编译好的文件夹
xcopy /E /I /Y D:\ProgramData\论文复现\FirRL\visdom-master\py\visdom\static D:\Anaconda\envs\morl-synthetic\lib\site-packages\visdom\static

其中:【/E:递归复制所有子目录和文件;】
【/I:如果目标不存在,视为创建目录。】注意地址替换成自己的地址。

该步骤会生成static,原先没有编译前,直接在visdom-master中是没有的。

2.解压 static.zip 到 visdom 安装目录的 static 文件夹:

路径:D:\Anaconda\envs\morl-synthetic\Lib\site-packages\visdom\static
(若没有 static 文件夹,先创建)

3.修复 visdom 启动代码的异常处理:

修改D:\Anaconda\envs\morl-synthetic\Lib\site-packages\visdom\server.py第671-673行:
# 原错误代码
# logging.error('Error {} while downloading {}'.format(exc.code, key))
# 替换为
if hasattr(exc, 'code'):
    logging.error('Error {} while downloading {}'.format(exc.code, key))
else:
    logging.error('Error while downloading {}: {}'.format(key, exc))

解决目录日志问题:
打开 D:\ProgramData\论文复现\FirRL\synthetic\utils\monitor.py,找到init_log函数,添加 1 行创建目录的代码:
def init_log(self, save_path, name):
    # 新增这1行(解决FileNotFoundError,不改动论文原逻辑)
    import os; os.makedirs(save_path, exist_ok=True)
    # 论文原代码保留不动
    self.log_file = open("{}{}.log".format(save_path, name), 'w')

4.跳过资源下载启动 visdom:

打开 D:\Anaconda\envs\morl-synthetic\lib\site-packages\visdom\server.py,找到download_scripts()函数,替换整个函数内容:

def download_scripts():
    """
    重写函数:跳过所有外网资源下载,直接使用本地static文件夹
    """
    import os
    # 定义本地static文件夹路径(和你复制的路径一致)
    static_dir = os.path.join(os.path.dirname(__file__), 'static')
    # 检查本地static文件是否存在(确保你复制的文件有效)
    if os.path.exists(os.path.join(static_dir, 'js', 'main.js')):
        print("检测到本地static文件夹,跳过外网资源下载!")
        return
    # 若本地无文件,仅打印提示(不再报错)
    print("本地static文件夹缺失,建议检查复制路径!")
    return

保持morl-synthetic环境激活,启动Visdom(新开一个PowerShell窗口执行

python -m visdom.server
# 成功启动会看到:It's Alive! 且提示可访问http://localhost:8097

成功后的输出:
Checking for scripts.
It's Alive!
INFO:root:Application Started
You can navigate to http://localhost:8097

二、模型训练

FTN 域(水果树导航):
是一个树形导航游戏——agent(智能体)从树根出发,每一步选择分支,目标是收集 6 种水果(多目标),走到树叶(终点)结束一轮;日志里的步数、累计步数、动作、奖励列表就是 agent 在这个树形场景里的行走记录,True表示走到了树叶(本轮结束)。

保持morl-synthetic环境激活

先进入synthetic目录

cd D:\ProgramData\论文复现\FirRL\synthetic

运行代码:

python train.py --env-name dst --method crl-envelope --model linear --gamma 0.99 `
>> --mem-size 4000 --batch-size 256 --lr 1e-3 --epsilon 0.5 --epsilon-decay `
>> --weight-num 32 --episode-num 2000 --optimizer Adam --save crl/envelope/saved/ `
>> --log crl/envelope/logs/ --update-freq 100 --beta 0.96 --name s3_r9 `
>> 2>&1 | Tee-Object -FilePath "crl/envelope/logs/training_s3_r9_$timestamp.log"

训练过程与结果

三、评估

评估代码:

$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"; python test/eval_dst.py --env-name dst --method crl-envelope --model linear --gamma 0.99 --save crl/envelope/saved/ --pltpareto --name s3_r9 2>&1 | Tee-Object -FilePath "crl/envelope/logs/eval_s3_r9_$timestamp.log"

结果:

  • policy-0.936策略 F1 分数(衡量模型生成的策略接近最优解的程度),正常范围 0.85~0.98;
  • prediction-0.945预测 F1 分数(衡量模型对收益 / 代价的预测准确度);这两个指标远高于阈值(通常 F1>0.85 即达标),说明训练的s3_r9模型在 DST 环境下效果优异。

深海宝藏(DST)环境下多目标强化学习(MORL)的 Pareto 前沿评估图:

元素

含义

X 轴teasure value

宝藏价值,越大表示获得的宝藏越多(目标 1)。

Y 轴time penalty

时间惩罚(负值),越负表示消耗的时间越多 / 惩罚越大(目标 2)。

黑色虚线 + 黑点Pareto

理论最优 Pareto 前沿(真实值),是算法需要逼近的目标。

橙色点Recovered

策略实际执行得到的解(通过 agent.act 执行策略采样得到)。

绿色点 / 线Predicted

模型直接预测的解(通过 agent.predict 输出的 HQ 值)。

绿色(Predicted)和橙色(Recovered)点整体紧密贴合黑色虚线(理论 Pareto),说明:

  • 模型预测的 Pareto 解(绿色)几乎和理论最优一致;
  • 策略实际执行的解(橙色)也高度匹配理论前沿,算法学到的策略能有效复现最优权衡。

四、高版本 PyTorch 适配注意事项(避免报错)

原代码基于 PyTorch 0.4.0,高版本需微调:

1. Tensor 数据类型兼容

找到synthetic/train.py/roijers_train.py中类似代码:

# 原代码(0.4.0)
FloatTensor = torch.cuda.FloatTensor if use_cuda else torch.FloatTensor
LongTensor = torch.cuda.LongTensor if use_cuda else torch.LongTensor

修改为(适配 1.0+):

# 适配PyTorch 1.10
FloatTensor = torch.cuda.FloatTensor if use_cuda else torch.FloatTensor
LongTensor = torch.cuda.LongTensor if use_cuda else torch.LongTensor
# 新增:修复高版本Tensor赋值警告
torch.set_default_tensor_type(FloatTensor)

2. data.cpu()改为cpu().data(部分文件)

act_1 = act_1.data.cpu()可能触发警告

原代码基于 PyTorch 0.4.0,高版本需微调train.py中 Tensor 操作:

操作文件:D:\ProgramData\论文复现\FirRL\synthetic\train.py

找到以下代码:

if args.method == "crl-naive":
    act_1 = act_1.data.cpu()
    act_2 = act_2.data.cpu()
elif args.method == "crl-envelope":
    act_1 = probe.dot(act_1.data)
    act_2 = probe.dot(act_2.data)
elif args.method == "crl-energy":
    act_1 = probe.dot(act_1.data)
    act_2 = probe.dot(act_2.data)

修改为(适配 PyTorch 1.0+):

if args.method == "crl-naive":
    act_1 = act_1.cpu().data  # 调换cpu()和data顺序
    act_2 = act_2.cpu().data
elif args.method == "crl-envelope":
    act_1 = probe.dot(act_1.cpu().data)  # 新增cpu()避免CUDA Tensor报错
    act_2 = probe.dot(act_2.cpu().data)
elif args.method == "crl-energy":
    act_1 = probe.dot(act_1.cpu().data)
    act_2 = probe.dot(act_2.cpu().data)

在合成环境中,使用了论文中推荐的参数训练,实现以上可收敛效果。对源代码修改很少,主要还是花费在配置环境上。使用--episode-num 2000 训练时间在3-4小时左右(暂时没有运行5000的)。

另:正常代码输出的log文件并没有保存终端中输出的文件,需要单独存储,然后利用这些数据进行分析和画图,这样较为直观。

内容概要:本文提出了一种基于“空调-电动汽车”联合虚拟储能的海岛微电网优化调度方法,旨在解决海岛地区能源供给不稳定及可再生能源波动性大的挑战。通过综合利用空调负荷的热惰性与电动汽车的灵活充放电能力,构建联合虚拟储能系统,有效提升微电网对风电、光伏等间歇性电源的消纳能力,并增强系统的调节灵活性和运行经济性。研究建立了涵盖发电侧、负荷侧与储能侧协同互动的多目标优化调度模型,综合考虑用户舒适度、出行需求、设备运行约束等因素,采用Matlab进行仿真验证,实现了系统运行成本降低、弃风弃光减少以及能源利用效率提升的目标。该方法充分挖掘了需求侧资源的潜在储能价值,为偏远地区独立微电网的安全、低碳、经济运行提供了有效的技术路径。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事微电网、综合能源系统、虚拟储能或需求侧响应相关研究的研究生及科研人员。; 使用场景及目标:①应用于海岛、偏远地区等独立微电网的优化调度设计;②研究如何利用温控负荷与电动汽车协同提供虚拟储能服务;③实现可再生能源高比例消纳与系统经济性运行的平衡; 阅读建议:建议结合Matlab代码深入理解模型构建细节,重点关注目标函数设定、约束条件处理以及空调与电动汽车建模方法,可进一步拓展至多时间尺度调度或引入不确定性因素进行改进研究。
内容概要:本文围绕“基于多维核密度估计的光伏-负荷场景生成方法”展开研究,提出利用多维核密度估计技术对光伏发电与电力负荷的不确定性进行建模,生成高精度、高还原度的典型运行场景。该方法能够有效捕捉光伏出力与负荷需求之间的时空相关性及时变特性,克服传统场景生成方法中对数据分布假设过强、忽略变量间依赖关系等局限性。研究通过Matlab编程实现了完整的场景生成流程,涵盖数据预处理、多维核密度估计建模、随机场景抽样及场景削减等关键环节,并结合实测数据验证了所提方法在提升场景代表性、减少冗余场景数量以及增强优化模型求解效率方面的显著优势。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源并网、微电网优化、综合能源系统等领域的工程技术人员。; 使用场景及目标:①用于可再生能源接入背景下的电力系统随机优化、鲁棒优化等需要输入典型场景的研究与应用;②支撑微电网调度、储能配置、需求响应等场景下的不确定性建模与仿真分析;③为学术论文复现、课题研究提供可靠的技术路径与代码支持。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注多维核密度估计的实现细节与场景削减算法的应用逻辑,同时可参考文档中列出的其他相关研究方向以拓展技术视野。
内容概要:本文针对传统三电平并网逆变器存在的谐波含量高、电网不平衡工况适应性差及动态响应滞后等问题,以有源中点箝位(ANPC)三电平逆变器为研究对象,提出一套融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相与电网电压前馈的复合控制策略。文章系统阐述了ANPC拓扑的结构优势,详细设计了DPWMA调制机制以提升等效开关频率、降低输出谐波;采用正负序分离锁相技术实现不平衡电网下的精确相位同步,抑制负序分量引起的功率振荡;引入电网电压前馈控制增强系统对电压扰动的快速响应能力,改善动态性能。通过Simulink平台搭建仿真模型,在稳态、电网不平衡及动态扰动等多种工况下验证了所提策略的有效性,结果表明该方案能显著提升并网电能质量、增强系统稳定性和抗扰能力,适用于新能源并网、工业大功率变流等复杂应用场景。; 适合人群:具备电力电子与电力系统基础知识,熟悉Matlab/Simulink仿真环境的高校研究生、科研人员及从事新能源并网、逆变器控制研发的工程技术人员。; 使用场景及目标:①掌握ANPC三电平逆变器的拓扑特性与建模方法;②学习DPWMA调制、正负序分离锁相、电网前馈等先进控制技术的原理与实现;③为高电能质量并网系统的设计与优化提供技术参考和仿真案例支持。; 阅读建议:建议读者结合文中提供的完整仿真资源,按照目录结构逐步实践各控制模块的搭建与调试,重点关注不同工况下的波形对比分析,深入理解复合控制策略的作用机理,并可进一步拓展至低电压穿越、多机并联等实际工程问题的研究。
内容概要:本文针对有限控制集约束下的三相并网逆变器,深入研究了电流与功率双模态模型预测控制(MPC)的等效机理及其性能边界,结合Simulink仿真与Matlab代码实现,系统分析了在不同运行条件下逆变器的动态响应、稳定性表现及控制精度。研究构建了电流-功率双模式MPC统一控制框架,有效实现了并网电流畸变抑制与功率无差拍响应的协同调控,揭示了两种控制模式之间的内在等效关系与自适应切换机制,并通过理论推导与仿真实验界定了控制系统的性能极限与稳定边界,为高比例新能源并网系统的高性能控制提供了坚实的理论依据与技术支撑。; 适合人群:具备电力电子、自动控制理论及新能源并网技术背景,熟练掌握Matlab/Simulink仿真工具,从事电力系统自动化、可再生能源并网控制等领域研究的研究生、高校科研人员及工程技术人员。; 使用场景及目标:①深入理解有限控制集模型预测控制(FCS-MPC)在三相并网逆变器中的应用原理与设计方法;②掌握电流与功率双目标预测控制的建模、代价函数设计、预测时域优化及仿真验证全流程;③探究控制性能的边界条件与系统稳定性机理,为实际工程中提升电能质量与并网可靠性提供优化策略。; 阅读建议:建议结合文中提供的Matlab代码与Simulink仿真模型进行动手实践,重点剖析双模态控制的切换逻辑、预测模型构建过程及参数敏感性分析,通过对比不同工况下的仿真结果,深入理解控制策略的动态特性与鲁棒性表现。
内容概要:本文针对传统三电平并网逆变器在谐波抑制、电网不平衡工况适应性及动态响应方面的不足,以有源中点箝位(ANPC)三电平逆变器为研究对象,提出一种融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相与电网电压前馈控制的复合控制策略。通过深入分析ANPC拓扑的结构特征,充分发挥其在开关损耗均衡、输出波形质量及中点电位可控性方面的固有优势。在此基础上,采用DPWMA调制提升等效开关频率,显著降低输出电流谐波含量;引入正负序分离锁相技术,实现电网电压正负序分量的精准解耦,确保在电网不平衡条件下仍能维持精确的相位同步;结合电网电压前馈控制,构建前馈-反馈复合控制体系,有效抑制电网电压扰动对并网电流的影响,大幅缩短系统动态响应时间,提升抗扰能力。最终通过Simulink平台搭建完整的仿真模型,对系统在稳态运行、电网电压不平衡及动态工况切换等多种场景下进行了全面验证,结果表明该复合控制策略能显著提升并网电能质量与系统整体稳定性。; 适合人群:电力电子、新能源并网、自动化及相关专业的研究生、科研人员及从事逆变器控制算法开发的工程技术人员。; 使用场景及目标:① 提升大功率并网逆变器在复杂电网环境下的运行性能;② 解决电网电压不平衡导致的锁相偏差与功率波动问题;③ 优化并网电流波形质量,满足高电能质量标准;④ 为ANPC等多电平逆变器的高性能控制提供仿真设计参考。; 阅读建议:建议结合Simulink仿真模型同步学习,重点关注DPWMA调制实现逻辑、正负序分离锁相环设计及前馈-反馈复合控制结构的搭建,可通过对比实验深入理解各项技术对系统性能的提升效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值