基于ADMM算法的多微网协同优化调度 matlab➕cplex
该模型为三微网电能交互共享模型,以运行成本和环境成本为目标,考虑负荷需求响应(可削减负荷和可转移负荷)、储能约束、风电约束和功率平衡约束等,利用ADMM算法进行迭代求解,实现联盟群效益的最大化
主要内容:为了实现微网间的电能交易以及能量共享,采用ADMM方法,实现了微网之间的电能交易与协同优化,方法为分布式算法,有效的保护了各个微网的信息,避免了集中优化的大量信息索取。
参考文档:
1.高松,何俊,杨松坤,肖白.基于交替方向乘子法的多微电网能量共享方法研究[J].电网与清洁能源
2.邝凯旋,张赟宁.基于ADMM算法的微电网多目标优化调度[J].电力科学与工程
基于 ADMM(Alternating Direction Method of Multipliers)算法 的多微网协同优化调度 MATLAB 实现。该代码适用于多个微电网之间的协同优化调度问题,例如能源管理、成本最小化等。
程序说明
-
问题背景:
- 多微网系统中,每个微网需要优化自身的运行成本,同时满足整体系统的约束条件。
- 通过 ADMM 算法实现分布式优化,避免集中式计算的通信瓶颈。
-
ADMM 算法简介:
- ADMM 是一种分布式优化方法,将全局优化问题分解为多个子问题。
- 每个子问题由一个微网独立求解,通过引入辅助变量和拉格朗日乘子实现全局协调。
-
目标:
- 最小化总运行成本,包括发电成本、购电成本等。
- 满足功率平衡、容量限制等约束。
-
适用场景:
- 微电网群的能量管理。
- 可再生能源的协同调度。
—
MATLAB 代码
% 基于 ADMM 的多微网协同优化调度
clc;
clear;
%% 参数定义
numMicrogrids = 3; % 微网数量
maxIter = 100; % 最大迭代次数
rho = 1; % ADMM 正则化参数
tol = 1e-4; % 收敛容差
% 各微网的本地参数
P_min = [0, 0, 0]; % 发电下限 (kW)
P_max = [100, 150, 120]; % 发电上限 (kW)
a = [0.1, 0.12, 0.15]; % 成本系数
b = [10, 12, 15]; % 成本系数
c = [5, 6, 7]; % 成本系数
% 全局需求
totalDemand = 200; % 总需求 (kW)
% 初始化变量
P_local = zeros(numMicrogrids, 1); % 各微网的发电量
lambda = zeros(numMicrogrids, 1); % 拉格朗日乘子
z = zeros(numMicrogrids, 1); % 辅助变量
%% ADMM 主循环
for iter = 1:maxIter
% 更新本地变量 P_local (x-update)
for i = 1:numMicrogrids
fun = @(P) a(i) * P^2 + b(i) * P + c(i) + lambda(i) * P + (rho / 2) * (P - z(i))^2;
options = optimoptions('fmincon', 'Display', 'off');
P_local(i) = fmincon(fun, P_local(i), [], [], [], [], P_min(i), P_max(i), [], options);
end
% 更新辅助变量 z (z-update)
z_prev = z;
z = (sum(P_local) + sum(lambda) / rho) / numMicrogrids;
% 更新拉格朗日乘子 lambda (dual update)
lambda = lambda + rho * (P_local - z);
% 检查收敛条件
primal_residual = norm(P_local - z, inf);
dual_residual = norm(rho * (z - z_prev), inf);
if primal_residual < tol && dual_residual < tol
fprintf('ADMM 收敛,迭代次数: %d\n', iter);
break;
end
end
%% 输出结果
disp('各微网的发电量 (kW):');
disp(P_local);
disp('总发电量 (kW):');
disp(sum(P_local));
disp('总需求 (kW):');
disp(totalDemand);
%% 绘图
figure;
bar(P_local, 'FaceColor', [0.2, 0.6, 0.8]);
xlabel('微网编号');
ylabel('发电量 (kW)');
title('各微网的发电量');
grid on;
—
代码说明
-
参数定义:
- 定义了每个微网的成本函数参数(
a
,b
,c
)、发电上下限(P_min
,P_max
)以及总需求(totalDemand
)。
- 定义了每个微网的成本函数参数(
-
ADMM 迭代步骤:
- x-update:每个微网独立求解其本地优化问题,使用
fmincon
求解二次规划。 - z-update:更新辅助变量
z
,表示全局平均值。 - dual update:更新拉格朗日乘子
lambda
,用于协调微网之间的约束。
- x-update:每个微网独立求解其本地优化问题,使用
-
收敛条件:
- 检查原始残差(
primal_residual
)和对偶残差(dual_residual
)是否小于设定的容差。
- 检查原始残差(
-
输出与可视化:
- 输出各微网的发电量和总发电量。
- 绘制各微网发电量的柱状图。
示例输出
运行代码后,将显示如下内容:
- 各微网的发电量及其总和。
- 总发电量与总需求的对比。
- 各微网发电量的柱状图。
注意事项
-
扩展性:
- 可以加入更多约束(如储能设备、可再生能源出力限制)。
- 支持多时段优化(动态调度)。
-
参数调整:
- 调整正则化参数
rho
和收敛容差tol
以优化性能。
- 调整正则化参数
-
实际应用:
- 替换示例数据为实际微网数据(如光伏发电、负荷需求等)。
- 应用于多微网协同调度的实际场景。