1. 合作博弈与核仁法在混合能源系统中的应用背景
电力市场中的混合能源联合外送正成为提升系统经济性的重要手段。当风电、光伏、水电等不同特性的能源主体需要协同外送时,如何公平合理地分配合作产生的额外收益,成为制约联合运营的关键难题。合作博弈论中的核仁法(Nucleolus)提供了一种基于"最小化最大不满"的分配方案,能够平衡各参与方的利益诉求。
在典型的混合能源联合外送场景中,不同能源主体具有互补特性:风电光伏具有波动性,水电具有可调节性,火电则提供稳定基荷。通过联合运行,整体可减少弃风弃光率约15-23%,提升输电通道利用率30%以上。但单纯按发电量比例分配收益会导致调节能力强的电源方利益受损,这正是核仁法需要解决的核心矛盾。
2. 核仁法的数学原理与计算步骤
2.1 合作博弈的基本概念
对于n个参与者的联盟S⊆N,特征函数v(S)表示该联盟能获得的最大收益。在能源联合外送中,v(S)通常取值为:
- 独立运行时各电源收益之和(无协同效应)
- 联合调度后的实际总收益(含协同效应)
核心(Core)是指满足以下条件的分配向量x∈ℝⁿ:
- 集体理性:∑xᵢ = v(N)
- 联盟理性:∀S⊆N, ∑_{i∈S}xᵢ ≥ v(S)
当核心非空时,核仁法是核心中"最公平"的分配方案。
2.2 核仁法的递推计算过程
定义不满度(excess):
e(S,x) = v(S) - ∑_{i∈S}xᵢ
核仁法的计算通过以下迭代步骤实现:
- 初始化:设当前解空间为X⁰ = Core
- 第k步优化:
- 找出使最大不满度最小化的分配x
- 固定已优化的联盟集合Θ
- 更新解空间X^{k+1} =
- 终止条件:当解空间唯一时停止
在MATLAB中实现时,通常采用线性规划序列求解:
matlab复制function [x, e] = nucleolus(v)
n = length(v);
Aeq = ones(1,n);
beq = v(end);
lb = zeros(n,1);
options = optimoptions('linprog','Display','none');
for iter = 1:2^n
[x,~,exitflag] = linprog(f,A,b,Aeq,beq,lb,[],[],options);
if exitflag ~= 1, break; end
% 更新约束条件...
end
end
3. 混合能源联合外送的博弈建模
3.1 特征函数构建方法
对于包含风电(W)、光伏(P)、水电(H)的三方联盟,特征函数可设计为:
v({W}) = P_w * λ_w - C_w
v({W,P}) = (P_w + P_p) * λ_{wp} - C_w - C_p - βσ_{wp}
v({W,P,H}) = (P_w + P_p + P_h) * λ_{wph} - C_w - C_p - C_h - γσ_
其中:
- λ表示考虑协同效应后的电价修正系数
- σ表示波动性惩罚项
- β, γ为调节系数
3.2 实际工程中的约束处理
在MATLAB实现时需要特别考虑:
- 爬坡率约束:
matlab复制ramp_constraint = [zeros(1,n); diag(ones(n,1)) - diag(ones(n-1,1),1)];
- 输电容量约束:
matlab复制A = [A; line_flow_matrix];
b = [b; line_capacity];
- 备用容量要求:
matlab复制Aeq = [Aeq; spinning_reserve_coef];
beq = [beq; reserve_requirement];
4. MATLAB实现关键技术与调试技巧
4.1 线性规划求解的数值稳定性
核仁法需要反复求解线性规划,当联盟数量较大时(n>10)可能遇到:
- 约束矩阵条件数过大(cond(A)>1e10)
- 小数联盟收益导致的舍入误差
解决方法:
matlab复制options = optimoptions('linprog',...
'Algorithm','dual-simplex',... % 对病态问题更稳定
'ConstraintTolerance',1e-6,...
'OptimalityTolerance',1e-6);
4.2 联盟枚举的优化技巧
对于n个参与者,传统方法需要处理2ⁿ-1个联盟。实际可采用:
- 先验剪枝:忽略明显不活跃的联盟
- 并行计算:
matlab复制parfor S = 1:2^n-1
[e(S), grad{S}] = computeExcess(S,x);
end
- 对称性利用:相同类型电源可合并处理
4.3 可视化分析工具
建议创建以下诊断图表:
- 不满度分布直方图:
matlab复制histogram(e_values,'Normalization','probability');
xlabel('Excess value'); ylabel('Frequency');
- 核仁解在核心中的位置:
matlab复制plot3(x1,x2,x3,'ro'); hold on;
% 绘制核心边界...
5. 实际案例分析:风光水联合外送项目
某省级电网包含:
- 风电:1500MW,容量因子0.32
- 光伏:800MW,容量因子0.18
- 水电:1000MW,调节容量600MW
独立运行与联合运行收益对比:
| 运行模式 | 总收益(万元/日) | 弃电率 |
|---|---|---|
| 独立运行 | 824 | 12.7% |
| 联合运行 | 953 | 5.2% |
应用核仁法得到的分配结果:
| 电源类型 | 独立收益 | 核仁解 | 增益 |
|---|---|---|---|
| 风电 | 318 | 352 | +10.7% |
| 光伏 | 86 | 102 | +18.6% |
| 水电 | 420 | 499 | +18.8% |
关键发现:水电虽然获得最大绝对收益增量,但相对增益比例与光伏相当,体现了核仁法既奖励调节能力又保护弱势方的特性。
6. 工程实践中的常见问题与解决方案
6.1 空核心问题处理
当核心为空时(常见于强对抗性场景),可采取:
- ε-核心松弛法:
matlab复制while isempty(x)
epsilon = epsilon + 0.01;
A = [A; ones(1,n)];
b = [b; v(N)+epsilon];
x = linprog(f,A,b,Aeq,beq,lb,ub);
end
- 采用Shapley值作为替代方案
6.2 非凸特征函数处理
当v(S∪T) < v(S)+v(T)时,需要:
- 引入惩罚项使函数凸化
- 使用比例核仁(Proportional Nucleolus):
matlab复制def_prop = v(N)/sum(v(1:n));
x = def_prop * v(1:n)';
6.3 大规模问题的分解方法
对于区域电网互联等大规模问题:
- 聚类分析:先用k-means对相似电源分组
matlab复制[idx,C] = kmeans(feature_matrix, k);
- 双层优化:上层处理区域间分配,下层处理区域内分配
7. 模型扩展与前沿方向
7.1 考虑不确定性的鲁棒核仁法
引入场景分析法处理风光出力不确定性:
matlab复制for s = 1:n_scenario
v_s = calculate_v(power_scenario(:,:,s));
E = E + prob(s)*e(S,x,v_s);
end
7.2 动态合作博弈模型
将单阶段扩展为多阶段博弈:
- 定义贴现特征函数:
v_t(S) = ∑_{τ=t}^T γ^{τ-t} v_τ(S) - 使用逆向归纳法求解
7.3 机器学习辅助的快速求解
训练神经网络预测核仁解:
matlab复制net = fitnet([20 20]);
net = train(net, feature_matrix, nucleolus_solutions);
在完成基础模型后,建议通过敏感性分析检验结果的稳健性。例如逐步调整风电预测误差从5%到25%,观察分配系数的变化幅度。实际项目中,我们发现在误差15%范围内核仁解能保持相对稳定性,各电源收益波动不超过基准值的3.2%
