做多微网协同优化的同行基本都有一个共识:多微网之间搞电能共享,真正让人头疼的不是潮流计算,也不是储能建模,而是“分钱”这个环节怎么让每个微网都觉得不吃亏。这篇内容就围绕“基于非对称纳什谈判的多微网电能共享运行优化策略Matlab代码”这个课题,把背后的数学模型、求解算法、代码实现和我在实际调试中踩过的坑完整拆一遍。无论你是刚接触合作博弈的硕士生,还是已经在做分布式优化但卡在分配环节的工程师,这篇都能给你一条可以直接落地的路线。
这类课题在电网侧和园区侧非常普遍。多微网之间如果各管各的,风光大发的时候微网内部消纳不完,只能低价卖回上级电网;晚高峰负荷起来又得高价买电。两者之间的价差就是白白浪费掉的利润空间。共享电力本质上就是把富余电量引导到缺电的微网里,但问题在于:谁提供电量、谁消纳电量、这笔交易按什么价格结算,如果靠“拍脑袋”定,合作一定散伙。所以这个课题的核心,不是算潮流,而是设计一套多主体都能接受的利益分配规则,并在Matlab里把规则变成可以迭代求解的代码。
1. 先把场景盘明白:多微网为什么要做电能共享
1.1 单微网的困境和共享的物理价值
单看一个微网,通常包含分布式光伏、风电、储能、常规负荷,有的还带柴油机。光伏午间大发,如果本地负荷小,储能又满了,那就只能弃光或者以很低的收购价卖给上级配电网。晚上负荷上来,光伏出力归零,储能容量又不够,就得从大电网买电。
我算过一组典型的工况数据:某个微网午间两小时的分布式光伏剩余电量可能有600多kWh,如果按当地燃煤基准电价卖给电网,收益很低;而隔壁几公里外的另一个微网,正好是商业负荷为主,午间空调用电高峰,需要从电网高价购电。两边一对比,共享电能的价差空间非常明显。
多微网电能共享的物理价值就在这里:把时空错配的电量在微网之间直接撮合,减少“低卖高买”。但请注意,这需要微网之间存在物理互联线路,通常是公共连接点下的低压配电网拓扑。也就是说,它们在物理上本来就连接在同一个配电台区里,具备P2P交易的条件。
1.2 为什么需要“优化策略”而不是简单的余缺互济
很多人会问:既然一个有余电、一个缺电,直接定个中间价交易不就完了?问题没有这么简单。
第一,微网不是单个用户,而是内部有多个分布式设备的小型系统。共享电量的前提是每个微网自身的经济调度要安排好,储能什么时候充、什么时候放,柴油机要不要开,这些决策和P2P交易量互相耦合。你不能先定个交易量,再去做内部调度,这两个问题必须联合求解,资源利用率和经济性才同时最优。
第二,交易价格不能预先固定。共享价格本身是一个要优化的变量,它影响每个微网的充放电策略和购售电量。价格定得太高,买方不愿意;定得太低,卖方觉得亏。最优价格应该是“引导性的”,让每个微网的边际运行成本向参考值靠拢,最终达成一个各方都接受的结果。
第三,微网之间是独立利益主体,不会服从统一调度。你不可能让某个微网无偿给另一个微网供电,哪怕数据上能算出一个“全局最优”,也必须考虑每个微网是否会接受这个结果。这就是从“单目标优化”升级到“多主体博弈”的根本原因。
1.3 这个课题到底在解决什么问题
“基于非对称纳什谈判的多微网电能共享运行优化策略”这个课题,本质上解决三件事:
- 建立一个多微网共享电能的协同运行框架,让每个微网参与共享后,运行成本不高于独立运行时的成本。
- 用非对称纳什谈判解来分配合作收益,体现不同微网在合作中的贡献差异、规模差异和话语权差异。
- 用分布式算法把分层问题解耦,让每个微网只保留自己的运行数据和设备信息,不向其他微网甚至上级透露完整调度细节。
用大白话讲:大家能不能一起干,干了之后多出来的那部分利润怎么分,分法要让每个参与方都觉得自己至少不比单干差。这就是纳什谈判做的事情。
2. 纳什谈判为什么会出现在电能共享里
2.1 合作博弈与谈判破裂点
纳什谈判来自合作博弈论。N个微网组成联盟协同运行,总成本比各自独立运行的成本之和要低,这个差值就是“合作剩余”。怎么分配合作剩余?直接平均分不合理,按功率大小分也可能扭曲激励。纳什谈判解是一种公理化的公平分配方案,它把分配问题转化成求解以下最优化问题:
目标函数是合作效用的乘积最大化,而并非让总成本最小化。每个参与者的效用定义为其独立运行成本与当前分配方案相应的成本之差,也就是参与合作后的“净收益”。这个净收益必须严格大于零,否则该微网会退出联盟,回到独立运行状态。“独立运行成本”就是谈判破裂点。
对于电能共享场景,谈判破裂点很直观:就是完全不和其他微网做P2P交易,只和上级配电网进行购售电时,每个微网独立运行的最小成本。做代码的时候,第一步就是先跑这N个独立优化问题,把每个微网的成本算出来作为基准值,后面所有收益分配都基于这个基准展开。
2.2 对称NBS的局限和非对称权重
经典纳什谈判解默认参与者是同权的,即每个微网在谈判中的重要性一样,这对应的是“对称纳什谈判”。但实际工程里,微网之间的差异很大:有的微网规模大、负荷基数大,有的微网主要负责在关键时段消纳多余电量,有的微网则拥有大容量储能可以在晚高峰顶上去。这种情况下,对称谈判表面公平,实则对出力多、支撑能力强的微网激励不足。
非对称纳什谈判就是在目标函数里给每个参与者加一个权重因子,把问题改成加权效用乘积最大化。权重越大,该微网在谈判中分到的合作剩余比例越高。权重怎么取是课题里非常关键的一环,常见思路有:
- 按微网的峰值负荷比例分配;
- 按共享电量贡献比例(供出电量与消纳电量之和占全部共享电量的比例);
- 按参与合作的成本降低幅度比例;
- 按储能容量或者可调资源容量占比。
从数学上看,非对称NBS解仍然满足帕累托最优和个体理性。加了权重之后,原来对称NBS得到的“平均分配”结果会偏向权重大的参与者,但是仍然保证每个参与者拿到的收益不低于谈判破裂点。这一点在代码里是要做硬性约束的:任何一轮迭代结果,如果某个微网的效用小到等于零了,整轮结果就直接作废,必须重新调整。
2.3 和几种常见分配方式对比
| 分配方式 | 优点 | 缺点 |
|---|---|---|
| 平均分配 | 简单易懂、计算快 | 忽略微网差异,贡献大的吃亏,容易导致合作破裂 |
| Shapley值 | 严格满足公平公理 | 需要计算2^N个联盟组合,微网数量稍多就爆炸 |
| 核仁法 | 考虑所有子联盟约束 | 线性规划规模大,解释困难 |
| 按交易量比例分 | 直观 | 只考虑量,没有考虑时段的边际成本差异 |
| 非对称纳什谈判 | 公平之外兼顾激励,计算可控 | 权重选取有一定主观性,但可通过客观指标量化 |
实际做代码时,QQ规模在3到5个微网内,Shapley值勉强能跑,但推广到十几个微网就完全不行了。非对称纳什谈判配合ADMM求解,微网数量到几十个仍可以处理,而且每个微网的子问题规模很小,计算压力可控。这是这个课题在实际项目中能落地的关键点。
3. 数学模型完整搭法
3.1 多微网系统结构与基本假设
假设系统里有N个微网,每个微网都通过公共连接点接入上级配电网,微网之间通过共享联络线传输电能。调度周期取一天24小时,步长1小时。各微网内部设备包括:
- 分布式光伏、风电:按预测出力给定,可以弃风弃光但会产生惩罚成本;
- 储能系统:考虑充放电功率上下限、SOC约束、充放电效率;
- 常规负荷:按预测曲线给定;
- 柴油机或燃气轮机:可选,出力有上下限和爬坡约束。
系统级约束是功率平衡约束,也就是对每个时段t,所有微网的P2P交易量之和为零。这是整个问题的耦合约束,也是分布式迭代的核心接口。
3.2 各微网独立运行的成本模型
每个微网的目标函数是自己一个调度周期内的总运行成本最小,包含:
- 向上级电网购电成本:分时电价下购电功率乘以实时价格;
- 向配电网售电收益:售电功率乘以售电价格(通常低于购电价格);
- 储能充放电损耗成本:折算到运行成本中;
- 弃风弃光惩罚成本:为了保证优先消纳新能源,弃掉的可再生出力按一定惩罚系数计入成本;
- 柴油机燃料成本:如果配置了,按二次函数拟合。
对微网i,可以写成一个混合整数线性规划或者二次规划问题。储能模型涉及0-1变量来避免同时充放电,属于MIQP/MILP,Matlab里用YALMIP建模后可以交给商业求解器处理。
我在实际搭建里,习惯把柴油机这类设备先不加,用纯“光伏+储能+电网交互”的模型跑通整套流程,再逐步加设备。这样每一步的调试范围都很小,出了问题容易定位。
3.3 P2P共享耦合约束
微网i和微网j之间在时段t的共享功率记为P_ij(t),方向为正表示i向j送电。由本方视角各微网送出功率之和必须等于接收功率之和,即对每个时段:
sum(P_ij(t)) = 0 对所有t成立
这个约束把N个微网耦合在一起。如果集中求解,一个N=5、T=24的模型,变量数量上千个,求解器完全能处理;但如果微网数量扩展到几十个,或者希望保留各微网数据隐私,就必须通过分布式算法把这个耦合约束拆开。
3.4 非对称纳什谈判目标函数与转化
整个协同运行问题可以分为两层:
第一层是“合作成本最小化”问题,即所有微网作为一个联合体,总运行成本最小,同时共享功率满足耦合平衡。这个问题的解给出了帕累托最优边界上总成本最小的运行方案。
第二层是“合作剩余分配”问题,用非对称纳什谈判解子来分配各微网的成本分摊。目标函数为:
max ∏(C_i_independent - C_i_cooperation)^w_i
其中C_i_independent是第i个微网独立运行成本,C_i_cooperation是参与合作后分摊到的成本,w_i是非对称权重。因为连乘直接优化不方便,通常取对数:
max sum( w_i * log(C_i_independent - C_i_cooperation) )
目标函数是凹函数,约束是线性的,整体是一个凸优化问题。这是这部分建模的亮点:对称NBS和非对称NBS经过对数变换后都保持凸性,在Matlab里用求解器求解非常稳定。
这里有一个很关键的技巧:如何确定C_i_cooperation?它不是直接把全局成本除以N,而是通过各微网的支付费用来定义。也就是说,在共享功率确定之后,各微网之间有内部结算电价,微网的最终成本是自身运营成本加上或减去与其他微网交易产生的支付额。谈判问题就是在调整内部结算电价,使之达到谈判解。
4. 分布式求解:ADMM是怎么把谈判问题跑起来的
4.1 为什么不能直接集中求解
有些教材里会把整个多微网模型直接扔给求解器,一次求出结果。这种做法代码简单,但有几个现实问题:
- 微网之间不愿意共享全部设备参数和负荷数据,集中求解等于要求所有微网把底牌亮给一个中心节点。
- 配电网运营商也未必允许某个第三方直接调用所有微网的详细模型。
- 一旦某个微网的数据有更新,集中模型要重算全部,计算效率低。
所以实际工程里更倾向于分布式优化。每个微网保留自己的调度子问题,只通过共享功率和对偶变量的迭代来达成一致性。ADMM(交替方向乘子法)正好为这种结构提供了框架。
ADMM对付的是一类可以被分解的目标函数,通过交替更新原始变量和对偶变量来逼近全局最优。它的好处是:子问题可以并行求解,对偶变量天然对应约束的影子价格,在电能共享里可以理解为P2P电价。
4.2 ADMM迭代格式与变量更新
把耦合约束写成等价的形式。我习惯引入“共享功率参考值”z_ij(t),作为各微网P2P功率的全局平均值。对微网i,本地变量是P_ij(t),全局参考值是z_ij(t),再加上拉格朗日乘子lambda_ij(t),三步迭代关系如下:
- 第一步:固定lambda和z,每个微网独立求解自己的优化子问题,目标函数在原有成本基础上加入二次增广项和线性项。这一步完全并行,微网之间不需要通信,只有计算。
- 第二步:更新全局参考值z = 所有微网变量值的平均,也就是强制满足功率平衡约束。
- 第三步:更新拉格朗日乘子 lambda = lambda + rho * (P - z),把共享功率不一致的部分反馈到下一步的定价里。
这段文字对应代码核心就是这样一个循环:
for k = 1:maxIter % 并行求解各微网本地子问题 for i = 1:N [P_local(:, :, i), info] = SolveMicrogridSubproblem(i, Z_k(:, :, i), Lambda_k(:, :, i), rho, data); end % 更新全局共享功率参考值(一致性约束) for t = 1:T for j = 1:N Z_fun(:, j) = mean(P_local(:, :, j), 3); end end % 更新拉格朗日乘子 Lambda_fun = Lambda_k + rho * (P_local_fun - Z_fun); % 计算原始残差和对偶残差,判断是否收敛 r_prim = norm(P_local_fun - Z_fun, 'fro'); s_dual = rho * norm(Z_fun - Z_prev, 'fro'); if r_prim < tol && s_dual < tol break; end end4.3 收敛判据与实现细节
ADMM的收敛判据是原始残差和对偶残差同时小于容忍度。我第一次跑这个代码的时候,只看了原始残差,结果迭代次数看着是收敛了,但是各微网成本分配结果和集中式求解对不上,反复排查才发现是对偶残差没有限制。加上对偶残差判据之后,结果才和基准解基本一致。
还有一个实操细节:共享功率初始化。我建议直接初始化为零,让每轮迭代从零开始自然演化,这样最不容易陷入一侧偏置。lambda初始化也影响收敛速度,通常从零开始,但有些场景下先用上一时段的解做热启动,可以大幅减少迭代次数。这部分在滚动优化里用途最大。
5. Matlab代码实现与框架拆解
5.1 环境与求解器选择
代码基于Matlab,建模工具用YALMIP,求解器现在主流用Gurobi或者CPLEX。如果机器上没装商业求解器,也可以用SDPT3或Sedumi过渡,但求解MIQP场景会慢很多,尤其是有储能0-1变量的情况下。
我的环境配置建议:Matlab R2020b以上,YALMIP最新版,Gurobi 10.x并配好Matlab接口。另外一个容易被忽略的点是YALMIP对MATLAB路径的管理,安装完Gurobi后要把gurobi的mex文件路径加到Matlab路径里,否则调用报错“solver not found”。
5.2 整体代码框架和函数模块
项目文件我建议拆成这些模块:
| 模块 | 文件名 | 作用 |
|---|---|---|
| 主程序 | main.m | 整套流程控制:读数据、初始化、迭代、输出 |
| 参数设置 | parameters.m | 微网数量、分时电价、设备参数、权重设置 |
| 场景生成 | generate_data.m | 生成各微网风光负荷预测数据 |
| 独立运行计算 | solve_isolated.m | 计算每个微网的谈判破裂点成本 |
| 子问题求解 | solve_subproblem.m | 求解单个微网的本地优化子问题 |
| ADMM更新 | admm_update.m | 更新全局变量和对偶变量 |
| 结果分析 | plot_results.m | 绘制共享功率、各微网成本、收益分配图 |
这种模块化拆法好处很明显:任何一个环节出问题,直接定位到对应文件。我自己写的时候,还会把每一轮迭代的残差输出到Command Window,方便实时观察收敛过程。
5.3 核心代码片段
参数初始化部分:
clc; clear; close all; addpath('yalmip'); addpath('gurobi'); % 基础参数 N = 3; % 微网数量 T = 24; % 调度时段数 rho = 1e-3; % ADMM罚因子 maxIter = 200; % 最大迭代次数 tol = 1e-4; % 收敛容忍度 % 非对称纳什谈判权重(归一化) w = [0.40, 0.35, 0.25]; w = w / sum(w);子问题目标函数示例(微网i的本地子问题):
% 变量定义 Pbuy = sdpvar(1, T); % 向配网购电功率 Psell = sdpvar(1, T); % 向配电网售电功率 E_soc = sdpvar(1, T+1); % 储能SOC Pch = sdpvar(1, T); % 储能充电功率 Pdis = sdpvar(1, T); % 储能放电功率 P_share = sdpvar(1, T); % 与其他微网共享功率(正值输出) % 目标函数:购电成本 - 售电收益 + 弃风弃光惩罚 + ADMM增广项 Objective = sum(Pbuy .* price_buy - Psell .* price_sell) ... + sum(penalty .* P_waste) ... + sum(lambda_share .* P_share) ... + (rho/2) * sum((P_share - z_share).^2); Constraints = []; Constraints = [Constraints, Pbuy >= 0, Psell >= 0]; Constraints = [Constraints, Pbuy + Pdis + P_wind_actual == Load + Pch + P_share]; Constraints = [Constraints, E_soc(t+1) == E_soc(t) + eta_ch * Pch - Pdis / eta_dis]; Constraints = [Constraints, 0 <= E_soc <= E_max]; Constraints = [Constraints, 0 <= Pch <= Pch_max, 0 <= Pdis <= Pdis_max]; % 避免同时充放电的约束可用二进制变量或互补条件简化处理 ops = sdpsettings('solver', 'gurobi', 'verbose', 0); optimize(Constraints, Objective, ops);注意子问题里P_share前面的方向要统一。我在第一次实现时没有统一共享功率正方向,导致两个微网迭代时共享功率符号相反,残差一直不下降。统一约定为“正方向表示流出本微网”,并且在所有微网的约束里保持这个约定,问题就消失了。
5.4 输入数据准备
数据是这套代码能不能跑出有意义结果的基础。模拟场景里我通常生成以下数据:
- 分时电价:峰段1.1元/kWh,平段0.7元/kWh,谷段0.4元/kWh;
- 售电电价:按燃煤基准价0.42元/kWh;
- 微网1为工业负荷,白天负荷高,装机光伏大;
- 微网2为商业办公,午间空调负荷高,自身光伏较少;
- 微网3为居民小区,晚高峰负荷高,配置较大储能。
生成数据时一个容易被忽略的细节是:风光曲线的峰值和负荷曲线要有相位差,这样共享场景才有经济意义。如果三者峰谷同步,共享后收益空间非常小,跑出来的结果很可能是不交易,课题看起来就像没有效果。为了验证策略,至少保证两个微网的余缺时段有明显错位。
还有储能SOC初始值问题。我习惯令SOC(1)=0.2*E_max,并要求调度结束SOC(T+1)不低于SOC(1)减去一个允许的小偏差,这样可以避免系统在末尾把储能电量耗尽来“作弊”降成本。如果要跑多日连续调度,这一步尤其重要。
6. 参数设置与调参避坑实录
6.1 罚因子rho的选取
ADMM罚因子rho直接决定收敛速度和全局解的精度。rho取得太小,原始残差下降慢,需要很多次迭代;rho取得太大,对偶残差会出现震荡,甚至来回发散。
我个人试下来的经验是:rho从1e-3起步,先跑一遍看残差曲线。如果原始残差下降到1e-3以下很慢,就把rho增大一个数量级;如果出现震荡,就减小。也可以在迭代过程中对rho做自适应调整,比如原始残差与对偶残差的比值持续大于10就增大rho,持续小于0.1就减小。代码不复杂,但效果明显。
6.2 非对称权重设置
权重w直接影响收益分配结果,这是整个课题里最需要向审稿人或者领导解释清楚的地方。我的建议是权重不要拍脑袋定,用可量化的指标生成:
比如定义微网i的“合作贡献度”为其参与的共享电量绝对值之和占所有微网共享电量绝对值之和的比例。把共享电量占比做归一化后作为权重,整个分配逻辑就有说服力。另一种做法是考虑每个微网独立运行时的成本占全部微网独立成本之和的比例,权重越大代表其独立运行的负担越重,在合作中应获得更多收益。
从代码角度,只需要改一行w的生成方式。但从项目验收角度,这部分必须写清楚设定依据。建议在结果分析里加一张对比图:对称NBS和非对称NBS下各微网成本下降比例,能直观体现权重的作用。
6.3 谈判破裂点怎么定
谈判破裂点就是独立运行成本,必须在多微网联合求解前单独计算。这一步要保证各微网独立运行问题的求解参数(分时电价、设备参数、负荷曲线)和后续联合问题完全一致,否则基准值不一致,合作剩余算出来是错的。
实际调试时,我遇到过一个坑:独立运行问题里没有加储能SOC终值约束,联合问题里加了,导致独立运行成本偏低,谈判破裂点被低估,有些微网在联合方案里的效用出现了微小的负值。后来统一了两个问题的约束集,结果才合理。
6.4 初始化与迭代技巧
初始化对ADMM的影响虽不决定最终解,但影响收敛速度和稳定性。共享功率变量初始化为零通常没问题。拉格朗日乘子lambda的初始化,有两种思路:
- 全零初始化:通用性最好,适合冷启动;
- 用电价均值初始化:如果共享价格接近分时购电价,收敛会快很多,但初始值不合理时可能把迭代带向不希望的局部区域。
我在滚动调度的场景里强烈建议使用上一轮迭代结果做热启动。因为相邻调度时段的风光负荷变化是连续的,上一时段的最优解和下一时段的解非常接近,热启动能把迭代次数压缩到原来的三分之一以下。
7. 常见问题排查速查表
| 现象 | 可能原因 | 处理思路 |
|---|---|---|
| 迭代不收敛,原始残差长期不降 | rho太小或初值不恰当 | 增大rho,或改用残差自适应调节 |
| 对偶残差震荡 | rho太大 | 减小rho,或调整容忍度 |
| 共享功率全部为零 | 微网间的余缺时段没有错配,或共享价格设置不合理 | 修改数据场景,在模型中加入最小共享量验证 |
| 某个微网效用出现负值 | 谈判破裂点计算有误,或权重导致收益分配失衡 | 检查独立运行成本和联合问题约束是否一致 |
| YALMIP报“solver not found” | 求解器路径未配置 | 重新配置Gurobi的Matlab接口路径 |
| 储能SOC最终不为零 | 缺乏终值约束 | 增加SOC_t_end等于初始值的约束 |
| 求解时间过长 | 储能0-1变量太多 | 用大M法松弛或减少二进制变量 |
| 购售电价出现异常值 | 模型中售电价格高于购电价格 | 检查分时电价数据,保证购电价始终高于售电价 |
7.1 一个典型的调试案例
我给一个模拟场景做过测试:N=3微网,24时段,无柴油机,储能各配一组。第一次跑完ADMM迭代,第20轮左右原始残差降到1e-3,看起来收敛了,但对偶残差还在1e-1以上,结果和集中式的全局解相差大约4%。排查后发现是子问题里加了绝对值形式的P2P目标项,破坏了原本的凸性。去掉绝对值、改用统一正方向的共享功率变量之后,第40轮左右原始残差和对偶残差都降到1e-4,结果和集中式解吻合到小数点后四位。
这件事给我的启发很大:ADMM对模型可分解性要求很苛刻,任何破坏凸性的小修改都会让结果偏移。调试时一定要准备一个“基准集中式模型”,用它对标分布式结果。这个对照模型很便宜,几行代码就多写一个,但能省下大量查错时间。
7.2 结果怎么展示才清晰
代码输出建议至少画三张图:
- 各微网的共享功率曲线,横轴时间,纵轴功率,正负表示潮流方向;
- 各微网在独立运行和合作运行下的成本柱状对比图,同时在图上标注合作总收益和非对称分配比例;
- 迭代残差曲线,横轴迭代次数,纵轴残差,验证收敛性。
第三张图在答辩和项目验收时非常加分,它能直接证明你的算法在有限迭代内收敛。我还会把每次迭代的合作总成本和全局解的成本画在同一张图上,如果两条线最后重合,说明ADMM没有因为分布式分解而损失经济性。
7.3 从对称到非对称的扩展步骤
如果之前已经实现了对称NBS版本,只需要把目标函数里的等权重改为权重向量w。具体改动点包括:
- 初始化w = ones(1,N)/N;
- 设置w为归一化的非对称权重;
- 在收益分配输出部分,把各个微网的效用乘上对应权重。
然后重新跑一遍,和对称结果的成本分配做对比。这组对比图可以直接写进报告里:对称分配下大微网收益偏低,换成非对称分配后大微网的收益明显提高,同时小微网依然保留不低于独立运行成本的下限约束。整个逻辑链条就完整了。
我在实际跑这个课题的时候,最大的感受是:数学推导部分看起来复杂,但真正费时间的反而是数据场景构造和参数调试。一个能体现共享收益的数据场景,比一堆公式更能说服人。如果你正准备复现这个课题,建议先把独立运行基线跑通,再上ADMM,最后再加入非对称权重。每一步都留有基准解做对照,整个过程就不会失控。最后提醒一点:涉及到P2P电价输出时,把迭代过程中对偶变量的变化曲线也保留下来,很多评审关注“电价是怎么形成的”,这张图能回答。
关于续写内容:如果你准备把这项工作扩展成期刊论文,可以考虑在后端加入碳交易成本,或者把确定性调度扩展到鲁棒优化/随机优化框架下。代码框架不需要重写,只需要在子问题目标函数里替换成本项,ADMM迭代结构和Matlab主循环完全不变,这项工作后续的扩展空间比你想的要大得多。