干微电网优化的人应该都有印象:一个园区里,A栋屋顶光伏在午间发得多了,消纳不掉,逆变器被迫限功率;隔壁B栋是商业综合体,午间恰恰是负荷高峰,正在按尖峰电价从网上买电。两边物理上只隔几百米,心理上却隔着一条“利益鸿沟”——因为没人牵头让他们互相卖电。这种场景在分布式能源快速推进的背景下越来越多:单个微网的源荷不匹配是常态,自己的储能又贵又装不下,对外买电的峰谷价差越来越扎心。多微网电能共享,本质就是把这些单点资源织成一张网,用“互济”替代“互斥”。
但问题跟着就来了:局域网内部的电能共享,不是让调度中心一声令下“你给我送电”就能办成的。各微网可能分属不同业主,有不同的成本结构、不同的负荷特性、不同的谈判筹码。合作联盟确实能创造总收益,可收益怎么分?谁多分一点、谁少分一点,直接决定这个联盟能不能稳定运转。我研究这个方向时,把合作博弈里的纳什谈判理论引了进来,做成了“基于非对称纳什谈判的多微网电能共享运行优化策略”,并在Matlab里完成了全流程仿真验证。这篇文章把它拆开讲清楚:模型怎么建、道理为什么是这么个道理、代码落地时会卡在哪些地方。
1. 多微网电能共享到底解决什么问题:从单微网运行痛点说起
1.1 单微网运行的三类典型困境
单个微网大概率是“光伏+储能+负荷”,或者“风机+储能+可控机组”的组合。光伏中午出力最大,负荷中午不一定最大;夜间负荷大,光伏却为零。负荷曲线和可再生出力曲线之间天然存在相位差。在不能与邻居交易、只能按分时电价与大电网交易的情况下,这种错配要么表现为弃风弃光,要么表现为高价购电。
举一个具体的例子。某园区微网,屋顶光伏装机1.2MW,中午光伏出力能到1MW,自身负荷只有400kW,剩余600kW如果附近有另一个微网正在缺电,就能直接送过去;如果没有,这600kW只能以“限功率”的方式白白浪费。另一边,一家冷链仓库微网,制冷机组全天负荷很大,午间需要从电网买电,电价是峰时段价格。两边一个弃电一个买电,放在一个系统内一看就是典型的资源错配。
储能当然能缓解这个问题,但储能容量有限,投资成本线性增加,边际收益递减。尤其当配储比例已经按最恶劣的净负荷波动算过一遍之后,再往上加储能的收益就很低了。所以单靠储能去扛源荷不确定性,经济上并不划算。
1.2 共享创造的增量价值从哪里来
多微网电能共享的增量价值,我总结下来有三个来源。
第一是时间互补性。不同微网的负荷峰值时段错开,共享之后,系统总负荷曲线会比各个微网单独负荷曲线之和更平坦。曲线平坦意味着更少的峰段高价购电,也意味着联络线和上级变压器容量利用率更高。
第二是空间互补性。有的微网新能源盈余,有的短缺,就地平衡省去了远距离输送的网损和输配电价。在低压配网里,相邻馈线之间几百米的线路损耗几乎可以忽略,这时候“本地消纳”的经济价值就非常明显。
第三是调节资源共用。不必要求每个微网都配足储能,共享模式下可以由某几个微网的储能统一承担全系统的调节任务。算下来,同样的总储能容量,在全系统统筹下能削峰填谷的幅度更大,这就是所谓“容量复用效应”。
从数学上看,在忽略网损的理想情况下,全系统按一个大微网去优化,总成本一定不高于各微网单独运行的成本之和。这个差额就是共享创造的合作盈余。决策层要做的第一件事,就是把这块盈余在物理层面最大化地“做出来”,这是第一阶段优化要解决的事情。
1.3 纳什谈判在多微网机制里扮演的角色
有了盈余,就需要分配。这里有一个容易被忽略的事实:多微网系统的全局最优运行点,未必是每个微网都愿意接受的运行点。某个微网可能为了让全局成本最低,被迫承担更多储能调节义务,如果结算上没有好处,它就不会配合。因此,一个可执行的多微网能量管理策略必须包含“利益分配”这一层,否则联合优化结果只能停留在论文里。
纳什谈判不是简单的“按贡献分钱”,它提供了一套公理化推导下的分配规则,保证分配结果满足帕累托最优和个体理性。简单说,它回答的问题是:一群理性的谈判者,各自在不合作时有确定的收益底线,合作后创造了额外的总盈余,那么盈余按什么比例分,才能让每个人都觉得自己没吃亏、并且整体分配是有效率的?
非对称权重则把“各微网议价能力不同”这个现实因素纳入进去。比如,新能源渗透率高的微网虽然自身波动大,但它为系统提供了绿色电力和能量支撑,话语权可以更高;又比如,掌握储能的微网在谈判中更有筹码。这就是标题里“非对称纳什谈判”出现的原因——对称版本实际上是它的特例。
2. 非对称纳什谈判的分账逻辑:为什么权重决定盈余分配
2.1 从“分账”直觉到公理化谈判解
谈判这个词听起来玄,其实可以类比成一桌人分一笔合作奖金。每个参与者有个“底线收益”,合作之后总奖金变大了,现在要决定每个人拿多少。纳什谈判理论给出的答案非常优雅:最大化各参与者“超额收益”的乘积。
符号化表达就是,设可行效用向量为 (u=(u_1,u_2,\dots,u_N)),谈判破裂点为 (d=(d_1,d_2,\dots,d_N)),则对称纳什谈判解是求解:
[ \max_u \prod_{i=1}^N (u_i - d_i) ]
这个解满足帕累托最优、个体理性、无关替代独立性等一系列公理。在多微网场景下,效用 (u_i) 可以取成本节约额,即不合作时的最优成本减去合作后的实际成本。
2.2 一个关键结论:加权盈余分配公式
非对称版本把目标函数改成加权乘积:
[ \max_u \prod_{i=1}^N (u_i - d_i)^{\omega_i}, \quad \omega_i > 0,\ \sum_{i=1}^N \omega_i = 1 ]
其中 (\omega_i) 就是第 (i) 个微网的谈判权重。当所有权重都等于 (1/N) 时,退化为对称情形。
如果谈判破裂点相同(这里都取0,因为 (d_i) 是成本节约维度的底线),且可行集只受“总盈余固定”的约束,那么拉格朗日乘子法给出一组极其简洁的闭式解:
[ u_i^* = \omega_i \cdot T ]
其中 (T = \sum_{i=1}^N u_i) 是联盟总成本节约。换句话说,非对称纳什谈判的结果就是按权重把合作总盈余直接分掉。权重大的微网拿大头,权重小的拿小头。
很多人第一次看到这个结论都会觉得太简单了,但它是理解后文所有分配结果的关键钥匙。实际代码里我不直接用这个闭式公式,而是用优化模型去求,原因是:当存在额外约束时(例如某微网的成本节约额有上限,或支付额有预算约束),闭式解不再成立,必须回到优化问题。但理解这个公式,对调试结果非常有帮助——一旦仿真输出的分配比例和权重比例严重不一致,多半就是约束或者目标写错了。
2.3 谈判破裂点不只是“不合作的成本”
谈判破裂点 (d_i) 在文献里常被解释为“不一致点”,意思是:谈崩了之后你还能拿到什么。在多微网电能共享里,谈崩了就意味着每个微网恢复独立运行,不与其他微网交换任何功率,只按照自己的储能和上级电网交易来优化。
所以我取破裂点的方法是:对每一个微网单独求解一次运行优化问题,去掉交易耦合变量,记录它的最低运行成本 (C_i^0)。这个 (C_i^0) 不是某个固定策略下的购电成本,而是包含储能调度、弃电惩罚、分时电价嵌套在内的最优结果。这一步看着简单,但我实测发现很多人会做错——直接把某个固定电价下的购电费当破裂点,导致后续成本节约额偏大,谈判结果失真。
这里顺便强调一点:独立运行最低成本要严格考虑储能的全天SOC循环约束,也要考虑弃风弃光惩罚。如果惩罚系数设得太低,解出来可能大量弃电,破裂点数值失真;如果太高,又可能过度压榨储能寿命。惩罚系数本身值得单独做敏感性分析。
2.4 工程上权重到底怎么取
权重 (\omega_i) 没有唯一的“标准答案”,它取决于多微网系统由谁发起、利益协调规则是什么。我在项目里总结出几种常见取法。
一是按新能源贡献度取。统计一个调度周期内各微网向系统注入的新能源电量,注入越多,权重越高。这种取法鼓励更多微网投资光伏、风机,适合要提升可再生能源渗透率的场景。
二是按灵活性资源容量取。储能容量大、可控机组多的微网,调节能力强,在谈判中自然有更强议价能力。权重按可调容量比例分配,适合系统需要大量灵活调节资源的场景。
三是按负荷重要性或违约风险取。关键用户负荷的微网,断电损失大,谈判地位可以更高;历史交易信用好的微网,权重也可以更高。
四是等权加修正。先所有微网等权,再由协调者根据后评估指标对个别微网做加减修正,收敛到折中方案。
需要提醒的是,权重设置直接影响分配结果,工程上要由所有参与微网事先协商确定,而不是优化后才能定。否则就会出现“先看结果再改权重”的循环博弈,联盟稳定性无从谈起。
3. 两阶段优化模型:先做大联盟收益,再谈利益分配
3.1 第一阶段模型:联盟总运行成本最小化
第一阶段不考虑内部结算,把整个多微网系统当作一个虚拟大微网来优化。目标函数是系统总运行成本最小,包括从上级电网购电成本、售电收入、弃风弃光惩罚、储能退化成本等。
典型约束包括:节点功率平衡、储能SOC递推与充放电功率上下限、充放电互斥、与上级电网交互功率限值、微网间交易功率限值等。以交易功率为例,微网 (i) 与微网 (j) 之间的交易必须满足:
[ P_{i,j,t} + P_{j,i,t} = 0 ]
这个约束是所有微网之间的耦合点,也是后面ADMM要处理的核心。第一阶段解出来的交易功率序列,决定了合作能够实现的最低总成本。
需要说明的是,模型里我加入了储能退化成本项,形式类似 (c_{ess} \cdot (P_{ch}+P_{dch})) 的线性近似。没有这一项时,优化器会疯狂启停储能来赚取峰谷价差,结果虽然账面成本低,实际电池寿命损失被忽略了,工程上不可接受。
3.2 第二阶段模型:非对称纳什谈判分配支付
第一阶段得到的是物理层的最优调度,第二阶段要解决金融层的转移支付。对于微网 (i),定义它的本地运行成本为 (c_i)(包括购电成本、弃电惩罚、储能退化等),它收到的内部支付为 (p_i)。系统内部支付满足 (\sum_{i=1}^N p_i = 0),也就是一个微网收到的钱来自其他微网,不产生额外外部现金流。
微网 (i) 参与合作后的实际成本为 (c_i + p_i),成本节约为:
[ u_i = C_i^0 - (c_i + p_i) ]
第二阶段目标函数是最大化成本节约的加权乘积,等价于最小化:
[ \min_p \ -\sum_{i=1}^N \omega_i \ln\big(C_i^0 - (c_i + p_i)\big) ]
再加上个体理性约束 (u_i \ge 0) 和收支平衡约束 (\sum_i p_i = 0)。这里每个微网的 (c_i) 是第一阶段解出来的固定值,所以这其实是一个非常小的连续优化问题,变量只有 (N) 个支付额。求解完之后,各微网的实际运行成本和内部结算量都确定下来,整个策略也就闭环了。
3.3 为什么要拆成两阶段而不是一口气求解
可能有人会想:能不能把第一阶段和第二阶段合并成一个大规模优化一次性解出来?答案是可以写,但求解非常吃力,而且没必要。
原因在于,如果把支付额和交易功率同时作为变量,目标里会出现交易功率与价格相乘的双线性项,问题变成非凸;即使能解,也无法保证全局最优。两阶段法先从物理上求出最大合作盈余,再在盈余固定的前提下做分配,数学上利用了合作博弈的经典性质:先求联盟最优,再求谈判解,两步得到的结果就是非对称纳什谈判的均衡点。
从工程实现角度看,两阶段法也更友好。第一阶段是MILP,用成熟求解器可以稳定求解;第二阶段变量少、解法简单,哪怕用最基础的序列二次规划都能收敛。拆开之后,每一层的数值稳定性都更容易控制,调试也更容易定位问题出在物理调度还是出在利益分配。
4. ADMM分布式求解:隐私保护下的迭代落地
4.1 为什么集中式求解“好看但不可行”
第一阶段模型如果把所有微网的数据汇总到一起,就是标准MILP,求解器交出来就能用。但在真实多微网场景里,各微网分属不同业主,负荷数据、储能配置、生产成本都算商业隐私,没人愿意把原始数据交给一个中心调度者。
这就需要一个分布式求解框架:每次迭代只交换少量“边界信息”,比如联络线功率期望值和拉格朗日乘子,不泄露内部约束和目标。ADMM是这类问题的标准工具,我选用它而不是普通对偶分解,是因为ADMM对目标函数非严格凸的情形更鲁棒,收敛性在实际测试中也更稳定。
4.2 交易耦合约束如何改写成ADMM形式
ADMM的核心思路是引入辅助变量,把耦合约束转化为“本地变量等于辅助变量”的一致性约束。对交易约束 (P_{i,j,t} + P_{j,i,t}=0),可以定义辅助变量 (\hat P_{i,j,t}),然后改写为:
[ P_{i,j,t} = \hat P_{i,j,t}, \quad P_{j,i,t} = -\hat P_{i,j,t} ]
这样每个微网只和辅助变量 (\hat P) 发生联系,不再直接依赖其他微网的具体决策。第 (k) 轮迭代中,微网 (i) 的本地子问题为:
[ \min_{x_i \in \mathcal{X}i} \ f_i(x_i) + \sum{t} \lambda_{t}^\top (P_{i,t} - \hat P_t) + \frac{\rho}{2} | P_{i,t} - \hat P_t |_2^2 ]
其中 (\mathcal{X}_i) 是微网 (i) 的本地可行域,(\lambda) 是拉格朗日乘子,(\rho) 是惩罚参数。求解完所有子问题后,用所有微网的平均决策更新辅助变量,再更新乘子,进入下一轮。
4.3 迭代主循环与收敛判据
我习惯用的ADMM主循环如下:
- 初始化辅助变量 (\hat P^0)、乘子 (\lambda^0),设定最大迭代次数 (K_{max});
- 对每个微网 (i),求解上述本地子问题,得到 (P_i^{k+1});
- 更新辅助变量:(\hat P^{k+1} = \frac{1}{N}\sum_{i=1}^N P_i^{k+1});
- 更新乘子:(\lambda^{k+1} = \lambda^k + \rho (P_{avg}^{k+1} - \hat P^{k+1}));
- 计算原残差 (r^k = |P_{avg}^{k} - \hat P^{k}|_2) 和对偶残差 (s^k = \rho |\hat P^{k} - \hat P^{k-1}|_2);
- 当 (r^k) 和 (s^k) 都小于容差时终止,否则回到步骤2。
容差设置上,我通常取 (10^{-4}) 到 (10^{-3}) 量级。如果任务对结算精度要求高,可以再压一档,但要注意过小的容差会让迭代次数爆炸,尤其是模型本身存在数值噪声时。
4.4 惩罚参数与初值设置的实用经验
(\rho) 的调节是ADMM落地的头号难题。(\rho) 太小,辅助变量更新缓慢,需要很长时间才能逼近一致;(\rho) 太大,乘子更新步长大,容易出现振荡甚至发散。我通常的做法是先把 (\rho) 固定在功率基值倒数的量级上跑一遍,观察原残差和对偶残差的比值。
如果 (r^k / s^k) 大于10,就增大 (\rho);如果小于0.1,就减小 (\rho)。有些文献里用自适应调节,我实测下来稳定但容易过调,反而用固定值加手动微调更快。
另一个容易被忽略的是初值。ADMM对初值不敏感,但好的初值能显著减少迭代次数。我一般先把所有微网独立求解一次,用独立运行的交易功率作为辅助变量 (\hat P^0) 的初值。这个初值在物理上是可行的,后续收敛一般都在100到300轮之内。
5. Matlab代码实现的关键节点与实测坑点
5.1 代码模块划分与数据准备
整套Matlab代码我按模块拆成几个文件,避免把建模和迭代逻辑混在一起。
main.m:主程序,负责读入数据、设置参数、调用两阶段求解、汇总输出;data_load.m:读入负荷曲线、光伏出力曲线、分时电价等基础数据;subproblem_i.m:微网 (i) 的本地子问题建模,用yalmip描述目标与约束;admm_solve.m:ADMM迭代主循环;nash_alloc.m:第二阶段纳什谈判分配;plot_results.m:绘制功率曲线、SOC曲线、成本条形图等。
数据准备阶段,我最常用的是从开源数据集下载典型的工业园区负荷和光伏数据,重采样到15分钟或1小时分辨率。时间分辨率会影响储能SOC递推的约束数,1小时分辨率下一天24点,储能SOC约束和交易功率约束数量都不大,调试速度快;要呈现更精细的调度细节时再换15分钟分辨率。
5.2 第一阶段子问题的Yalmip实现要点
每个微网的本地子问题,我用yalmip建模,然后用商用求解器求解。核心结构大致长这样:
function [obj, x] = subproblem_i(P_hat, lambda, rho, param) % P_hat, lambda 为 ADMM 变量;param 包含负荷、光伏、储能参数 P_pv = sdpvar(T,1); P_load = sdpvar(T,1); P_buy = sdpvar(T,1); P_sell = sdpvar(T,1); P_trd = sdpvar(T,1); % 对外交易功率,正为卖出,负为买入 P_ch = sdpvar(T,1); P_dch = sdpvar(T,1); SOC = sdpvar(T+1,1); z = binvar(T,1); % 储能充放电互斥变量 Constraints = []; % 功率平衡:P_load + P_ch = P_pv + P_dch + P_buy - P_sell + P_trd % 储能SOC递推、充放电上下限、互斥约束 % 交易功率与P_hat的耦合:P_trd = P_hat + 松弛偏差(ADMM中使用) Objective = cost_buy - cost_sell + cost_curtail + cost_ess; Objective = Objective + sum(lambda .* (P_trd - P_hat)); Objective = Objective + (rho/2) * sum((P_trd - P_hat).^2); ops = sdpsettings('verbose', 0, 'solver', 'gurobi'); optimize(Constraints, Objective, ops); end这段代码里有几个容易踩坑的点。
第一个坑是储能互斥约束。如果不加二进制变量,优化器可能让储能同时充电和放电——物理上不可能,但目标函数里充电放电成本一抵消,数值上反而显得很“划算”。我加约束 (0 \le P_{ch} \le z \cdot P_{ch,max})、(0 \le P_{dch} \le (1-z) \cdot P_{dch,max}) 来解决。
第二个坑是ADMM增广项的二次项。当本地模型含二进制变量时,子问题变成MIQP。如果求解器不支持MIQP,就得把二次项做分段线性化,或者改用近端线性化近似。我强烈建议直接用支持MIQP的求解器,省掉大量手写线性化的时间。
第三个坑是频繁求解时的输出刷屏问题。ADMM迭代几百轮,每轮都要调一次求解器,如果求解器把日志打到控制台,整个程序会慢得让人怀疑人生。务必把verbose关掉,只在主程序里手动打印迭代残差。
5.3 第二阶段纳什谈判的简洁实现
第二阶段变量少,实现反而比第一阶段容易出彩。我用yalmip写目标函数,核心代码就只有几行:
function [p, u] = nash_alloc(C0, c_fixed, omega) N = length(C0); p = sdpvar(N,1); % 支付额,正表示该微网向系统支付 u = C0 - (c_fixed + p); % 成本节约 Objective = -sum(omega .* log(u)); Constraints = [sum(p) == 0, u >= 0]; ops = sdpsettings('verbose', 0, 'solver', 'gurobi'); optimize(Constraints, Objective, ops); end这里有个容易遇到的问题:如果 (C0 - c_fixed) 里面某个值本来就很小,加上支付额后可能让某个 (u_i) 接近0,对数函数会出现数值警告。我在实现里给 (u) 加了一个下限保护,比如 (u \ge 10^{-6}),避免数值溢出。
另一个值得注意的点是,如果求解器不支持指数锥约束(log函数需要指数锥),会直接报错。新版Gurobi和某些求解器支持,但老版本不一定。如果不支持,我建议把对数目标改成分段线性近似,或者用闭式解公式直接算——在无额外约束的算例中,闭式解 (u_i^*=\omega_i T) 就是解析答案,根本不需要调用求解器。
5.4 实测中遇到的四个典型问题
我在跑通整套代码的过程中,遇到过几个特别典型的工程问题,这里逐一记录。
第一个问题是一阶段一阶段的顺序依赖。如果先跑第一阶段时不保存各微网的本地成本 (c_i),第二阶段就无法计算成本节约。所以主程序里必须显式把每个微网的目标值拆出来,而不是只记录总成本。这个信息在yalmip中可以用value(Objective)逐段累加得到。
第二个问题是交易功率符号约定混乱。有的代码用“正表示买入”,有的用“正表示卖出”,一旦在多个模块里混用,查错极其痛苦。我后来统一规定:面向微网 (i) 的交易功率 (P_{i,t}>0) 表示该微网净买入,并且把符号定义写在程序头部注释里,所有函数传参都遵守同一约定。
第三个问题是ADMM收敛但结果不可行。迭代结束后,某些微网之间的交易功率可能还有微小不一致。我在主循环结束后加了一道“修正校验”:检查所有交易联络线两边的一致性残差,如果超过阈值就继续迭代若干轮,而不是直接接受当前解。这个后处理步骤虽然简单,但能避免把带瑕疵的调度结果直接用于第二阶段,导致分配结果出现奇怪的偏差。
第四个问题是求解器许可证和平台差异。Matlab的yalmip调用求解器时,不同求解器对同一个MILP的性能差异可能非常大。我的经验是:小规模算例用免费求解器完全够用,但模型规模上到几十个微网、时间分辨率15分钟的时候,还是商业求解器更稳。这里没有贬低免费求解器的意思,只是说大规模场景下优先考虑求解器性能,不要因为一个子问题解不出来而卡住整个ADMM流程。
6. 算例结果怎么读:三微网系统的分配效果验证
6.1 三微网算例的设置与独立运行基准
为了验证整套策略,我设计了一个三微网算例。微网1是工业园区,光伏装机较大,午间出力高峰和自身负荷高峰错位明显;微网2是商业综合体,全天负荷较高,几乎没有新能源;微网3是科技园区,光伏加储能配置齐全,调节能力强。三个微网通过一条低压交流母线连接,联络线功率限值设为300kW。
分时电价设置为峰、平、谷三段,峰时段购电电价约是谷时段的3倍左右,这种价差结构在工商业用户中很常见。储能参数统一设为容量1MWh、最大充放电功率250kW、效率95%。
首先跑独立运行基准。每个微网单独优化,记录各自的 (C_i^0)。这个基准值就是谈判破裂点。微网1独立运行时午间弃光比较严重,微网2独立运行时不得不大量在峰时段购电,微网3独立运行时储能基本只做自身削峰填谷。三者合计成本作为对比基线。
6.2 共享前后系统成本的对比
运行两阶段优化后,系统总成本比独立运行时下降了约18%。下降主要来自三块:一是微网1午间盈余的光伏直接供给微网2,代替了微网2的峰段购电;二是微网3的储能在夜间低价时段充电,午间通过交易母线放电给其他两个微网,减少了全系统的峰段购电量;三是弃光惩罚几乎降为零,微网1不再需要频繁限功率。
这些结果用条形图和日运行曲线展示都很直观。我一般会画三张图:第一张是三个微网各自独立运行与共享运行的成本对比条形图;第二张是联络线交易功率的24小时曲线,标出每个时段哪个微网是卖方、哪个是买方;第三张是各微网储能SOC曲线,用来检查储能没有被过度滥用。
6.3 不同权重方案下的分配差异
非对称权重的影响在分配结果上体现得非常直接。我对比了三种方案:
| 方案 | 微网1权重 | 微网2权重 | 微网3权重 | 微网1成本节约占比 | 微网2成本节约占比 | 微网3成本节约占比 |
|---|---|---|---|---|---|---|
| 对称 | 0.333 | 0.333 | 0.333 | 33.3% | 33.3% | 33.3% |
| 新能源导向 | 0.5 | 0.2 | 0.3 | 50.0% | 20.0% | 30.0% |
| 储能贡献导向 | 0.25 | 0.2 | 0.55 | 25.0% | 20.0% | 55.0% |
表格里的数值和理论推导的闭式解完全一致——在无额外约束条件下,成本节约占比就等于权重占比。这个结果验证了模型正确性,也说明了权重设置才是利益分配的真正“旋钮”。如果想让某个微网有更强的参与意愿,就把它对应的权重调高;但也不能无限调高,否则会让其他微网的节约额太小,个体理性约束可能被触发,联盟在现实中就会破裂。
6.4 权重设计之外的几个观察
除权重本身之外,还有几个因素会影响最终分配,我建议在汇报结果时一并检查。
第一是联络线容量。如果把联络线功率限值从300kW提高到600kW,系统总成本会继续下降,但边际效益递减,而且已经下降的成本会在第二阶段的谈判中重新分配。联络线容量越紧,交易功率受限,第一阶段成本下降幅度越小,分配空间也越小。
第二是储能退化成本的系数。我把储能退化成本从0调到0.05元/kWh再调到0.1元/kWh,系统会逐步减少储能出力频率,交易功率曲线也会变化。如果完全不考虑退化成本,储能会在峰谷价差下频繁充放,看似成本很低,实则是把电池寿命成本隐性转移给了未来。
第三是权重方案对“个体理性”的影响。在极端权重分配下,某个微网的成本节约虽然大于0,但小到难以覆盖其参与交易的技术改造成本。在工程实施中,这种“纸面有利、实际无感”的分配不会被接受。所以我在每个算例最后都会检查每一方的成本节约额是否大于某个工程意义上的最小可接受阈值,比如每月的通信与计量设备分摊成本。
最后说几句
这套“两阶段优化+非对称纳什谈判分配”的框架,我在实际项目里前前后后调了一个多月才跑顺。回头看成片,其实最难的不是公式推导,而是那些不起眼的细节:符号约定、求解器参数、ADMM的惩罚参数、储能互斥约束、交易功率一致性后校验。只要有一个环节没卡住,结果就会以各种离谱的方式呈现出来——比如某个微网成本节约为负还“乐于合作”,或者ADMM迭代800轮还在振荡。
我个人的体会是,如果只做理论仿真,对称权重和闭式解已经够用;但要往工程落地走,非对称权重带来的“分配可调性”才是真正的核心价值。它让运营者有了一个可解释、可协商的工具:每个微网该拿多少,不是黑箱算出来的,而是由一个所有人都事先认可的权重规则决定。这一点在多方参与的能源项目里,比任何高深的数学都管用。
另外再分享一个调试小技巧:写完第二阶段之后,先用只有两个微网的算例跑一遍,手动验证交易功率、支付额和成本节约三者的勾稽关系,再扩展到三微网、多微网。两微网情况下整个逻辑一目了然,任何错误都能被一眼发现。等你把两微网跑通了,后面无非是对着同一套逻辑放大规模而已。