一、核心算法选择
分布式电源(DG)选址定容是典型的多目标、高维、非线性优化问题 ,需平衡**经济性(投资/运行成本)、技术性(网损、电压质量)及环保性(碳排放)**三大目标。MATLAB中常用的智能优化算法包括:
- 遗传算法(GA):模拟生物进化,通过选择、交叉、变异操作搜索全局最优,适用于离散-连续混合变量问题。
- 粒子群优化(PSO):模拟鸟群觅食,通过粒子位置/速度更新实现快速收敛,适合高维实时优化。
二、基于遗传算法的MATLAB实现
遗传算法通过编码→初始化→适应度评估→选择→交叉→变异的流程求解,以下是关键步骤的MATLAB代码框架:
1. 问题建模
-
目标函数 :以网损最小 、电压偏差最小 、投资成本最小为优化目标,采用加权法转化为单目标:
m i n F = w 1 ⋅ P l o s s + w 2 ⋅ ∑ ∣ V i − V n o m ∣ + w 3 ⋅ C i n v minF=w_1⋅P_{loss}+w_2⋅∑∣V_i−V_{nom}∣+w_3⋅C_{inv} minF=w1⋅Ploss+w2⋅∑∣Vi−Vnom∣+w3⋅Cinv
其中, w 1 , w 2 , w 3 w_1,w_2,w_3 w1,w2,w3为权重(如 w 1 = 0.5 , w 2 = 0.3 , w 3 = 0.2 w_1=0.5,w_2=0.3,w_3=0.2 w1=0.5,w2=0.3,w3=0.2), P l o s s P_{loss} Ploss为网损, V i V_i Vi为节点电压, C i n v C_{inv} Cinv为DG投资成本。
-
约束条件:
- 功率平衡: ∑ P D G , i + ∑ P G , j = ∑ P l o a d , k ∑P_{DG,i}+∑P_{G,j}=∑P_{load,k} ∑PDG,i+∑PG,j=∑Pload,k;
- 电压约束: 0.95 ≤ V i ≤ 1.05 ( p u ) 0.95≤V_i≤1.05(pu) 0.95≤Vi≤1.05(pu);
- DG容量约束: 0 ≤ P D G , i ≤ P D G , m a x , i 0≤P_{DG,i}≤P_{DG,max,i} 0≤PDG,i≤PDG,max,i(如单台DG最大容量300kW)。
2. 遗传算法核心代码
matlab
clc; clear; close all;
%% 1. 参数设置
nbus = 33; % IEEE33节点系统
no_of_dg = 4; % DG数量
iter_max = 80; % 迭代次数
no_of_pop = 80; % 种群大小
prop_crsval = 0.7; % 交叉概率
prop_mutval = 0.3; % 变异概率
minval1 = 1; maxval1 = nbus;% DG位置范围(1-33节点)
minval2 = 0; maxval2 = 2; % DG容量范围(0-2MW)
%% 2. 初始化种群
population = repmat(struct('Position', [], 'Cost', []), no_of_pop, 1);
for i = 1:no_of_pop
% 随机生成DG位置(整数)和容量(实数)
position = [randsrc(1, no_of_dg, minval1:maxval1), randsrc(1, no_of_dg, minval2:maxval2)];
population(i).Position = position;
population(i).Cost = fitness_function(position); % 适应度评估
end
%% 3. 遗传操作(选择、交叉、变异)
for iter = 1:iter_max
% 3.1 选择(轮盘赌)
costs = [population.Cost];
fitness = 1 ./ costs; % 适应度(成本越小,适应度越高)
total_fitness = sum(fitness);
prob = fitness / total_fitness;
cum_prob = cumsum(prob);
selected = zeros(1, no_of_pop);
for i = 1:no_of_pop
r = rand();
idx = find(cum_prob >= r, 1);
selected(i) = idx;
end
population = population(selected);
% 3.2 交叉(单点交叉)
for i = 1:2:no_of_pop
if rand() < prop_crsval
parent1 = population(i).Position;
parent2 = population(i+1).Position;
cross_point = randi([1, 2*no_of_dg-1]);
child1 = [parent1(1:cross_point), parent2(cross_point+1:end)];
child2 = [parent2(1:cross_point), parent1(cross_point+1:end)];
% 修复越界值
child1(child1 < minval1) = minval1;
child1(child1 > maxval1) = maxval1;
child2(child2 < minval1) = minval1;
child2(child2 > maxval1) = maxval1;
population(i).Position = child1;
population(i+1).Position = child2;
% 更新适应度
population(i).Cost = fitness_function(child1);
population(i+1).Cost = fitness_function(child2);
end
end
% 3.3 变异(高斯变异)
for i = 1:no_of_pop
if rand() < prop_mutval
mut_position = randi([1, 2*no_of_dg]);
if mut_position <= no_of_dg % 位置变异(整数)
population(i).Position(mut_position) = randi([minval1, maxval1]);
else % 容量变异(实数)
population(i).Position(mut_position) = population(i).Position(mut_position) + normrnd(0, 0.1);
population(i).Position(mut_position) = max(min(population(i).Position(mut_position), maxval2), minval2);
end
% 更新适应度
population(i).Cost = fitness_function(population(i).Position);
end
end
% 3.4 记录最优解
[min_cost, idx] = min([population.Cost]);
best_solution = population(idx).Position;
fprintf('迭代次数:%d,最优成本:%.2f\n', iter, min_cost);
end
%% 4. 适应度函数(示例)
function cost = fitness_function(position)
% position: [dg1_pos, dg2_pos, ..., dg4_pos, dg1_cap, dg2_cap, ..., dg4_cap]
dg_pos = round(position(1:4)); % DG位置(整数)
dg_cap = position(5:8); % DG容量(MW)
% 1. 计算网损(调用潮流计算函数,如前推回代法)
[~, Ploss] = power_flow(dg_pos, dg_cap); % 假设power_flow返回网损
% 2. 计算电压偏差
[V, ~] = power_flow(dg_pos, dg_cap);
voltage_dev = sum(abs(V - 1)); % 额定电压1pu
% 3. 计算投资成本(假设单位容量成本1000元/kW)
inv_cost = sum(dg_cap) * 1000 * 1000; % 转换为元
% 4. 加权总成本
w1 = 0.5; w2 = 0.3; w3 = 0.2;
cost = w1 * Ploss + w2 * voltage_dev + w3 * inv_cost;
end
三、基于粒子群优化的MATLAB实现
粒子群优化(PSO)通过粒子位置/速度更新实现快速收敛,以下是关键步骤的MATLAB代码框架:
1. 粒子群算法核心代码
matlab
clc; clear; close all;
%% 1. 参数设置
nbus = 33; % IEEE33节点系统
no_of_dg = 4; % DG数量
popsize = 50; % 种群大小
max_iter = 100; % 迭代次数
w = 0.8; % 惯性权重
c1 = 2; c2 = 2; % 加速因子
minval1 = 1; maxval1 = nbus;% DG位置范围
minval2 = 0; maxval2 = 2; % DG容量范围
%% 2. 初始化粒子群
particles = repmat(struct('Position', [], 'Velocity', [], 'Pbest', [], 'Cost', []), popsize, 1);
for i = 1:popsize
% 随机生成位置和速度
position = [randsrc(1, no_of_dg, minval1:maxval1), randsrc(1, no_of_dg, minval2:maxval2)];
velocity = rand(1, 2*no_of_dg) - 0.5; % 速度范围[-0.5, 0.5]
particles(i).Position = position;
particles(i).Velocity = velocity;
particles(i).Pbest = position;
particles(i).Cost = fitness_function(position);
end
%% 3. 初始化全局最优
[global_best_cost, global_best_idx] = min([particles.Cost]);
global_best_position = particles(global_best_idx).Position;
%% 4. 迭代优化
for iter = 1:max_iter
for i = 1:popsize
% 4.1 更新速度
r1 = rand(1, 2*no_of_dg);
r2 = rand(1, 2*no_of_dg);
particles(i).Velocity = w * particles(i).Velocity + ...
c1 * r1 .* (particles(i).Pbest - particles(i).Position) + ...
c2 * r2 .* (global_best_position - particles(i).Position);
% 4.2 更新位置
particles(i).Position = particles(i).Position + particles(i).Velocity;
% 4.3 修复越界值
particles(i).Position(particles(i).Position < minval1) = minval1;
particles(i).Position(particles(i).Position > maxval1) = maxval1;
particles(i).Position(particles(i).Position < minval2) = minval2;
particles(i).Position(particles(i).Position > maxval2) = maxval2;
% 4.4 更新适应度
current_cost = fitness_function(particles(i).Position);
% 4.5 更新个体最优
if current_cost < particles(i).Cost
particles(i).Pbest = particles(i).Position;
particles(i).Cost = current_cost;
end
% 4.6 更新全局最优
if current_cost < global_best_cost
global_best_position = particles(i).Position;
global_best_cost = current_cost;
end
end
% 4.7 输出迭代信息
fprintf('迭代次数:%d,全局最优成本:%.2f\n', iter, global_best_cost);
end
%% 5. 适应度函数(同遗传算法)
function cost = fitness_function(position)
% 同遗传算法的适应度函数
end
四、关键模块说明
- 潮流计算 :需调用MATLAB的MATPOWER工具箱(或自行编写前推回代法)计算DG接入后的网损和电压分布。
- 约束处理 :通过罚函数法处理电压越限(如电压偏差超过±5%时,增加惩罚项)、容量越限(如DG容量超过最大值时,强制截断)。
- 算法改进 :
- 自适应遗传算法(AGA):动态调整交叉/变异概率(如适应度高时降低变异率,避免破坏优质解);
- 混合PSO(SA-PSO):结合模拟退火的Metropolis准则,避免陷入局部最优。
五、结果分析
- 最优解输出 :算法收敛后,输出DG的最优位置 (如节点10、15、20、25)和最优容量(如1.2MW、0.8MW、1.5MW、0.5MW);
- 性能评估 :对比优化前后的网损 (如从4.3kW降至2.0kW)、电压偏差 (如从0.1pu降至0.03pu)、投资成本(如从120万元降至80万元);
- Pareto前沿:若为多目标优化,可绘制Pareto前沿图,展示网损与成本的权衡关系(如网损降低10%,成本增加5%)。
参考代码 分布式电源的选址定容的算法 www.youwenfan.com/contentcsp/54719.html
六、注意事项
- 数据一致性:使用IEEE33节点标准测试系统(可从MATPOWER获取),避免自定义数据导致复现困难;
- 算法收敛性 :通过迭代次数-目标函数值曲线验证收敛性(如200代内收敛);
- 代码可复现性:提供完整代码注释,标注参数取值依据(如权重 w1=0.5来自文献[23])。
七、拓展方向
- 多能耦合:结合储能系统(ESS),构建"DG-ESS"协同优化模型,目标函数增加"储能充放电成本";
- 不确定性优化:采用鲁棒优化方法,考虑DG出力(光伏/风电)与负荷的不确定性(如用Beta分布模拟光伏出力);
- 动态场景:结合实时电价与负荷波动,优化DG的时序出力(如峰时多发电,谷时少发电)。