一、 微电网优化配置数学模型
1. 系统架构与决策变量
假设微电网包含:光伏 (PV) 、风机 (WT) 、储能电池 (BAT) 和柴油发电机 (DG) 作为备用。
决策变量(即待优化的容量)为:
X=[PPVrated,PWTrated,EBATrated,PDGrated]\mathbf{X} = [P_{PV}^{rated}, P_{WT}^{rated}, E_{BAT}^{rated}, P_{DG}^{rated}]X=[PPVrated,PWTrated,EBATrated,PDGrated]
单位分别为:kW,kW,kWh,kWkW, kW, kWh, kWkW,kW,kWh,kW。
2. 目标函数:全生命周期净现值成本 (NPC) 最小
minF(X)=Cinv(X)+Com(X)+Cfuel(X)−Csalvage(X) \min F(\mathbf{X}) = C_{inv}(\mathbf{X}) + C_{om}(\mathbf{X}) + C_{fuel}(\mathbf{X}) - C_{salvage}(\mathbf{X}) minF(X)=Cinv(X)+Com(X)+Cfuel(X)−Csalvage(X)
- CinvC_{inv}Cinv: 初始投资成本(与容量成正比)。
- ComC_{om}Com: 运行维护成本(与发电量/使用时长成正比)。
- CfuelC_{fuel}Cfuel: 柴油消耗成本(基于柴油发电机发电量)。
- CsalvageC_{salvage}Csalvage: 设备残值(折旧回收)。
3. 核心约束条件
- 功率平衡约束 :任意时刻 ttt,发电功率 = 负荷功率 + 充电功率 - 放电功率。
- 设备出力限制 :0≤Pi,t≤Pirated0 \le P_{i,t} \le P_i^{rated}0≤Pi,t≤Pirated。
- 蓄电池动态约束 :
- 荷电状态 (SOC) 更新:Et=Et−1+Pch,t⋅ηchΔt−Pdisch,tηdischΔtE_{t} = E_{t-1} + P_{ch,t} \cdot \eta_{ch} \Delta t - \frac{P_{disch,t}}{\eta_{disch}} \Delta tEt=Et−1+Pch,t⋅ηchΔt−ηdischPdisch,tΔt
- SOC 限制:SOCmin≤EtEBATrated≤SOCmaxSOC_{min} \le \frac{E_t}{E_{BAT}^{rated}} \le SOC_{max}SOCmin≤EBATratedEt≤SOCmax
- 柴油机最小出力限制 :PDG,t≥30%PDGratedP_{DG,t} \ge 30\% P_{DG}^{rated}PDG,t≥30%PDGrated (若开机)。
二、 MATLAB 遗传算法(GA)工程级实现
本代码分为三个部分:
- 主程序:设定GA参数并调用优化器。
- 适应度函数 (Fitness Function):计算给定容量下的系统总成本(内含时序仿真逻辑)。
- 约束条件函数 (Constraints Function):处理不等式和等式约束。
1. 主程序脚本 (main_microgrid_ga.m)
matlab
%% 微电网容量优化配置 - 遗传算法 (GA) 主程序
clear; clc; close all;
% 1. 载入基础数据 (风光资源、负荷曲线等)
% 为演示方便,我们生成模拟的 8760 小时数据 (1年)
load('microgrid_profile_data.mat'); % 假设包含: PV_profile, WT_profile, Load_profile
% 如果没有数据文件,运行初始化函数生成模拟数据
if ~exist('PV_profile', 'var')
[PV_profile, WT_profile, Load_profile] = generate_profiles();
end
% 2. 设备参数与经济参数设置
params.n_PV = 100; params.cost_PV = 4000; params.life_PV = 20; % 元/kW
params.n_WT = 100; params.cost_WT = 6000; params.life_WT = 15; % 元/kW
params.n_BAT = 500; params.cost_BAT = 2000; params.life_BAT = 10; % 元/kWh
params.n_DG = 10000; params.cost_DG = 8000; params.life_DG = 10; % 元/kW
params.DG_fuel_cost = 7; % 元/L
params.DG_consume_rate = 0.25; % L/kWh
params.interest_rate = 0.05; % 折现率
% 3. 遗传算法参数设置
pop_size = 50; % 种群规模
max_gen = 100; % 最大迭代次数
lb = [0, 0, 0, 0]; % 下限 [PV, WT, BAT, DG] 容量
ub = [500, 500, 1000, 300]; % 上限
% 4. 调用 MATLAB 内置遗传算法求解器
options = optimoptions('ga', ...
'PopulationSize', pop_size, ...
'MaxGenerations', max_gen, ...
'PlotFcn', @gaplotbestf, ... % 绘制最优适应度曲线
'Display', 'iter', ...
'UseParallel', true); % 开启并行计算加速
fprintf('>>> 开始微电网容量优化配置遗传算法求解...\n');
start_time = tic;
[x_opt, fval] = ga(@(x) microgrid_fitness(x, params, PV_profile, WT_profile, Load_profile), ...
4, [], [], [], [], lb, ub, ...
@(x) microgrid_constraints(x, params), ...
options);
time_elapsed = toc(start_time);
% 5. 输出最优结果
fprintf('\n========== 优化配置结果 ==========\n');
fprintf('优化耗时: %.2f 秒\n', time_elapsed);
fprintf('最小全生命周期成本 (NPC): %.2f 元\n', fval);
fprintf('----------------------------------\n');
fprintf('光伏 (PV) 最优容量: %.2f kW\n', x_opt(1));
fprintf('风机 (WT) 最优容量: %.2f kW\n', x_opt(2));
fprintf('储能 (BAT) 最优容量: %.2f kWh\n', x_opt(3));
fprintf('柴油机 (DG) 最优容量: %.2f kW\n', x_opt(4));
fprintf('==================================\n');
2. 适应度函数 (microgrid_fitness.m)
matlab
function npc = microgrid_fitness(x, params, pv_p, wt_p, load_p)
% 计算微电网全生命周期成本 (NPC)
% x = [P_pv, P_wt, E_bat, P_dg]
% 1. 计算年度化成本系数 (CRF)
crf_pv = (params.interest_rate*(1+params.interest_rate)^params.life_PV) / ((1+params.interest_rate)^params.life_PV - 1);
crf_wt = (params.interest_rate*(1+params.interest_rate)^params.life_WT) / ((1+params.interest_rate)^params.life_WT - 1);
crf_bat = (params.interest_rate*(1+params.interest_rate)^params.life_BAT) / ((1+params.interest_rate)^params.life_BAT - 1);
crf_dg = (params.interest_rate*(1+params.interest_rate)^params.life_DG) / ((1+params.interest_rate)^params.life_DG - 1);
% 2. 初始投资成本 (转换为年度等值成本)
c_inv = x(1)*params.cost_PV*crf_pv + ...
x(2)*params.cost_WT*crf_wt + ...
x(3)*params.cost_BAT*crf_bat + ...
x(4)*params.cost_DG*crf_dg;
% 3. 运行仿真计算运维成本和燃料成本
% 简化处理:假设风光满发优先,不足部分由大电网补充或柴油机发电
% 实际工程中这里应该是一个详细的时序能量管理策略仿真
p_deficit = load_p - (x(1)*pv_p + x(2)*wt_p);
p_deficit(p_deficit < 0) = 0; % 只考虑缺额
% 假设柴油机承担全部缺额 (忽略储能和电网交互以简化适应度函数计算速度)
% 实际应用中建议将这部分展开为完整的微电网调度子程序
dg_fuel_cost = sum(p_deficit) * params.DG_consume_rate * params.DG_fuel_cost;
% 4. 运维成本 (假设为投资成本的固定比例,例如 2%)
c_om = 0.02 * (x(1)*params.cost_PV + x(2)*costs_WT + x(3)*params.cost_BAT + x(4)*params.cost_DG);
% 5. 计算 NPC (假设项目寿命 20年)
project_life = 20;
npc = (c_inv + c_om + dg_fuel_cost) * ((1 - (1+params.interest_rate)^-project_life) / params.interest_rate);
% 惩罚项:如果配置不合理(例如全为0),给予极大惩罚
if sum(x) < 1e-3
npc = npc + 1e10;
end
end
3. 约束条件函数 (microgrid_constraints.m)
matlab
function [c, ceq] = microgrid_constraints(x, params)
% 非线性约束条件
% c <= 0 (不等式约束)
% ceq = 0 (等式约束)
% 示例约束1: 柴油机容量必须大于等于其额定容量的 30% (如果投入使用)
% 这里简化为一个全局约束:DG容量 * 0.3 <= 某个最大值,实际需结合调度
c1 = -x(4); % DG容量非负
% 示例约束2: 蓄电池容量必须与充放电功率匹配 (通常 E/P 在一定范围)
% 假设充放电倍率为 0.5C
c2 = x(3) - 2 * (x(1) + x(2) + x(4)); % E_bat <= 2 * P_total
c = [c1; c2];
ceq = []; % 无等式约束
end
4. 数据生成辅助函数 (供初次运行使用)
matlab
function [pv, wt, load] = generate_profiles()
% 生成模拟的 8760 小时光伏、风机出力和负荷曲线
% 光伏: 白天服从Beta分布模拟
% 负荷: 基础负荷 + 随机波动
hours = 1:8760;
day_hours = mod(hours, 24)';
pv = max(0, sin(day_hours/24*pi).^2 .* randn(8760,1)*0.1 + 0.8);
pv(pv>1) = 1; pv(pv<0) = 0;
wt = 0.7 + 0.3*sin(2*pi*hours/8760) + 0.1*randn(8760,1);
wt(wt<0) = 0; wt(wt>1) = 1;
base_load = 50 + 20*sin(2*pi*hours/24) + 10*sin(2*pi*hours/8760);
load = base_load + 5*randn(8760,1);
load(load < 10) = 10;
end
参考代码 在微电网的优化配置过程中采用遗传算法对其进行优化配置 www.youwenfan.com/contentcsu/64956.html
三、 工程落地与算法调优建议
在实际科研或工程项目中,为了获得具有真正参考价值的结果,建议您重点完善以下几个模块:
-
精细化时序仿真引擎 :
目前的
microgrid_fitness中的调度逻辑非常粗糙(缺额直接由柴油机承担)。实际中,您需要编写一个基于规则的微电网能量管理策略(EMS),考虑蓄电池的充放电效率、SOC动态变化、柴油机的启停成本以及向大电网的购/售电策略。这部分通常作为适应度函数内部的子程序进行 8760 小时的逐时仿真。 -
约束条件的强化 :
除了设备容量限制,工程上还必须加入:
- 供电可靠性约束 :如系统全年失负荷概率 (LPSPLPSPLPSP) 必须小于某个阈值(例如 1%)。这需要在时序仿真中统计缺电量。
- 可再生能源渗透率约束:如风光总发电量需占总负荷的一定比例。
-
遗传算法性能调优:
- 编解码方式 :如果对设备数量有整数要求(比如只能买整数块光伏板),需采用整数编码或在
ga选项中设置'IntCon'。 - 大规模并行加速 :由于每次迭代都需要评估整个种群(50个个体)的 8760 小时仿真,计算极其耗时。强烈建议利用 MATLAB 的
parfor循环或UseParallel选项启用多核并行计算。 - 混合启发式算法 :GA容易陷入局部最优,可以引入模拟退火 (SA) 的降温机制作为变异操作的补充,或者采用 NSGA-II 如果是多目标优化(如同时优化 成本 与 碳排放)。
- 编解码方式 :如果对设备数量有整数要求(比如只能买整数块光伏板),需采用整数编码或在