微网作为分布式能源系统的重要组成部分,其优化运行一直是能源领域的研究热点。传统的单层优化模型往往难以兼顾运营商和用户双方的利益,而双层优化模型则能很好地解决这一问题。本文要介绍的就是基于Matlab/YALMIP工具包实现的三微网双层优化模型。
这个模型的核心思想是将优化问题分为上下两层:
在实际工程中,这种分层结构能够更真实地反映电力市场的运作机制,运营商制定电价策略,用户根据电价调整用电行为,最终达到供需平衡。
上层模型的目标函数可以表示为:
max Σ(λ_t * P_t - C_gen(P_t) - C_trans(P_t))
其中:
约束条件包括:
下层模型考虑用户的用电成本最小化:
min Σ(λ_t * D_t + C_curt(D_t))
其中:
约束条件包括:
上下层模型通过以下方式耦合:
选择YALMIP主要基于以下考虑:
实际使用中发现,对于非凸问题,YALMIP+IPOPT组合比默认求解器表现更好。
matlab复制%% 初始化
clear all
yalmip('clear')
%% 参数设置
T = 24; % 24小时调度周期
epsilon = 0.2; % 价格弹性系数
lambda0 = 0.5; % 基准电价(元/kWh)
%% 变量定义
% 上层变量
P = sdpvar(T,1); % 发电功率
lambda = sdpvar(T,1); % 电价
% 下层变量
D = sdpvar(T,1); % 实际负荷
D0 = 100 + 20*sin((1:T)'*2*pi/24); % 基准负荷曲线
%% 约束条件
% 上层约束
Constraints = [P >= 0, P <= 200]; % 发电容量限制
Constraints = [Constraints, lambda >= 0.3, lambda <= 1.0]; % 电价上下限
% 下层约束
Constraints = [Constraints, D == D0.*(1 - epsilon*(lambda - lambda0)/lambda0)];
Constraints = [Constraints, D >= 0.8*D0, D <= 1.2*D0]; % 负荷变化范围限制
%% 目标函数
% 上层目标:收益最大化
Revenue = sum(lambda.*D); % 电费收入
Cost_gen = sum(0.1*P + 0.01*P.^2); % 发电成本
Cost_trans = sum(0.05*D); % 输电成本
Upper_obj = -(Revenue - Cost_gen - Cost_trans);
% 下层目标:用电成本最小化
Lower_obj = sum(lambda.*D + 0.5*(D0 - D).^2); % 包含负荷削减惩罚项
%% 求解设置
ops = sdpsettings('verbose',1,'solver','gurobi');
Objective = Upper_obj + 0.1*Lower_obj; % 加权组合目标
%% 模型求解
sol = optimize(Constraints,Objective,ops);
%% 结果分析
if sol.problem == 0
P_opt = value(P);
lambda_opt = value(lambda);
D_opt = value(D);
figure;
subplot(3,1,1); plot(P_opt); title('发电计划');
subplot(3,1,2); plot(lambda_opt); title('电价曲线');
subplot(3,1,3); plot(D0,'--'); hold on; plot(D_opt); title('负荷曲线');
legend('基准负荷','实际负荷');
else
disp('求解失败');
yalmiperror(sol.problem)
end
变量定义部分:
sdpvar声明优化变量,这是YALMIP的核心功能约束构建技巧:
目标函数设计:
求解设置:
当扩展到三个微网时,需要考虑:
修改后的上层目标:
max Σ(λ_i,t * P_i,t - C_gen(P_i,t) - C_trans(P_i,t) + μ * P_exch_i,t)
其中P_exch_i,t表示微网i在t时段的交换功率。
matlab复制%% 多微网变量定义
N = 3; % 3个微网
P = sdpvar(T,N,'full');
lambda = sdpvar(T,N,'full');
D = sdpvar(T,N,'full');
P_exch = sdpvar(T,N,N,'full'); % 交换功率矩阵
%% 新增约束
% 交换功率平衡
for t = 1:T
for i = 1:N
Constraints = [Constraints, sum(P_exch(t,i,:)) == 0];
end
end
% 联络线容量限制
Constraints = [Constraints, -50 <= P_exch(:) <= 50];
matlab复制ops = sdpsettings('solver','gurobi','usex0',1,'showprogress',1,...
'parallel',1);
matlab复制if exist('prev_sol','var')
assign(P,prev_sol.P);
assign(lambda,prev_sol.lambda);
end
implies等高级建模方法| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 求解时间过长 | 模型非凸性太强 | 尝试不同的求解器或凸松弛 |
| 结果不收敛 | 目标函数冲突 | 调整权重系数或增加惩罚项 |
| 内存不足 | 变量维度太高 | 采用稀疏矩阵或分解方法 |
模型验证:
check命令)性能分析:
matlab复制[~,~,~,solver_output] = optimize(Constraints,Objective,ops);
disp(solver_output);
不确定性处理:
多时间尺度耦合:
市场机制设计:
在实际项目中,我们发现将双层模型与模型预测控制(MPC)结合,能够更好地应对可再生能源的波动性。具体做法是在每个控制周期重新求解优化问题,同时考虑预测时域内的系统状态变化。