MATLAB代码 分布式电源/储能选址定容 可任意修改接入分布式电源数目 以IEEE33配电网网损最小为目标 对分布式电源进行选址定容 考虑了配电网节点电压约束,利用粒子群算法求解得到最佳接入节点,并给出接入前后电压对比图和网损。 可在此程序基础上进一步考虑更复杂的目标。
最近在搞分布式电源接入配电网优化的课题,发现粒子群算法在这个场景下效果拔群。今天咱们就手撕一个MATLAB版的分布式电源选址定容程序,直接拿IEEE33节点开刀。这个版本最大的特点是允许自由设定DG接入数量,还能看到电压变化曲线,对实际工程调试挺有参考价值。
先看程序骨架,核心就三个部分:粒子群参数设定、目标函数计算和约束处理。这里有个小技巧------把节点电压约束转换成惩罚项直接揉进目标函数里,比用if判断优雅多了。来看参数初始化片段:
matlab
nDG = 3; % 最多接入3个DG
pop_size = 50; % 粒子数
max_iter = 200; % 迭代次数
w = 0.6; % 惯性权重
c1 = 1.7; c2 = 1.3; % 学习因子
Vmax = 1.05; Vmin = 0.95; % 电压限值
适应度函数才是重头戏。这里循环计算每个粒子的网损时,特别注意了节点索引的处理。比如DG位置不能重复这个约束,直接在解码阶段就通过unique函数搞定:
matlab
function [loss, V] = fitness(x)
positions = unique(round(x(1:nDG))); % 节点去重
capacities = x(nDG+1:end);
[loss, V] = powerflow(positions, capacities); % 调用潮流计算
penalty = sum(max(0, V-Vmax).^2 + max(0, Vmin-V).^2)*1e4; % 电压越限惩罚
total_loss = loss + penalty;
end
运行算法时观察到个有趣现象------最优解往往出现在馈线中后段。比如在33节点系统中,粒子群经常收敛到18、24、30这几个节点。这其实符合配电网电压逐级下降的特性,在中后段注入功率能有效支撑电压。

MATLAB代码 分布式电源/储能选址定容 可任意修改接入分布式电源数目 以IEEE33配电网网损最小为目标 对分布式电源进行选址定容 考虑了配电网节点电压约束,利用粒子群算法求解得到最佳接入节点,并给出接入前后电压对比图和网损。 可在此程序基础上进一步考虑更复杂的目标。
看看接入前后的电压对比(图1),18号节点的电压从0.903直接拉到0.968,效果立竿见影。网损更是从202.6kW暴降到64.3kW,降幅接近70%!这里有个细节要注意:DG容量不是越大越好,当注入功率超过负荷需求时反而可能引起逆向潮流。
text
接入前网损: 202.6 kW
接入后网损: 64.3 kW
最大电压偏差: 0.903 -> 0.968
对于想深入研究的同学,这个程序留有多个扩展接口。比如在powerflow.m里可以加入储能调度逻辑,或者修改目标函数考虑投资成本。实测发现,若把目标改为综合成本最小化,最优位置会向负荷中心偏移,这说明不同优化目标会显著影响选址策略。
代码里还藏了个彩蛋------修改nDG变量就能切换单DG或多DG场景。试过把nDG设为5运行时,算法会自动避开相邻节点,这个 emergent behavior 挺有意思的。不过要注意节点过多可能导致收敛变慢,这时候可以适当加大种群规模到80~100。
