IEEE-33bus自适应遗传算法实现集群划分—采用综合性能指标的高渗透率分布式电源集群划分方法
复现论文
以含高渗透率分布式可再生能源的配电网规划为应用场景,提出综合考虑结构性与功能性的集群划分方法:结构性上采用基于电气距离的模块度指标;功能性上以集群的无功平衡度及有功平衡度为指标,构建了综合性能指标体系。仿真在IEEE33节点进行,采用常规自适应遗传算法进行求解验证。
丁明,刘先放,毕锐,等.采用综合性能指标的高渗透率分布式电源集群划分方法[J].电力系统自动化,2018,42(15):47-52+141.
论文特点
1、基于模块度指标的集群分区
采用基于综合电气距离的模块度函数 $ \rho $ 衡量配电网集群划分后的结构强度,如下式:
ρ
=
1
2
m
∑
i
=
1
N
B
∑
j
=
1
N
B
(
e
i
j
−
k
i
k
j
2
m
)
δ
(
i
,
j
)
\rho = \frac{1}{{2m}}\sum\limits_{i = 1}^{{N_B}} {\sum\limits_{j = 1}^{{N_B}} {\left( {{e_{ij}} - \frac{{{k_i}{k_j}}}{{2m}}} \right)} } \delta (i,j)
ρ=2m1i=1∑NBj=1∑NB(eij−2mkikj)δ(i,j)
式中:
e
i
j
=
1
−
L
i
j
/
max
(
L
i
j
)
e_ij=1-L_{ij}/\max(L_{ij})
eij=1−Lij/max(Lij)为连接节点
i
i
i 和 节 点
j
j
j的电气边的权重(简称边权);
m
=
1
2
∑
i
N
k
∑
i
N
k
e
i
j
m=\frac12\sum_{i}^{N_{k}}\sum_{i}^{N_{k}}e_{ij}
m=21∑iNk∑iNkeij 为网络所有边权之和;
k
i
=
∑
i
=
1
N
E
e
i
j
k_i=\sum_{i=1}^{N_{E}}e_{ij}
ki=∑i=1NEeij表示所有与节点
i
相连的边权之和;当节点
i
i\text{相连的边权之和;当节点}_i
i相连的边权之和;当节点i和节点
j
j
j在同一集群内时
δ
(
i
,
j
)
=
1
\delta(i,j)=1
δ(i,j)=1,否则
δ
(
i
,
j
)
=
0
\delta(i,j)=0
δ(i,j)=0 。
其余功能指标可以查看论文,在此不赘述。
2、自适应遗传算法
- Srinivas提出的自适应遗传算法,将交叉率和变异率随着迭代次数进行自适应调整。
p c = { p c , m a x − ( p c , m a x − p c , m i n I m a x ) I , F > F a v g p c , m a x , F ≤ F a v g {p_c} = \left\{ \begin{array}{l} {p_{\;c,max}} - \left( {\frac{{{p_{\;c,max}} - {p_{c,{\rm{min}}}}}}{{{I_{\;{\rm{max}}}}}}} \right)I,{\rm{ }}F > {F_{avg}}{\rm{ }}\\ {p_{\;c,max}}{\rm{ }},F \le {F_{avg}}{\rm{ }} \end{array} \right. pc={pc,max−(Imaxpc,max−pc,min)I,F>Favgpc,max,F≤Favg
p m = { p m , min + ( p m , m a x − p m , m i n I m a x ) I , F ′ > F a v g p m , m i n , F ′ ≤ F a v g {p_m} = \left\{ \begin{array}{l} {p_{\;m,\min }} + \left( {\frac{{{p_{\;m,{\rm{max}}}} - {p_{m,{\rm{min}}}}}}{{{I_{\;{\rm{max}}}}}}} \right)I,F' > {F_{avg}}{\rm{ }}\\ {p_{\;m,{\rm{min}}}}{\rm{ }},F' \le {F_{avg}}{\rm{ }} \end{array} \right. pm={pm,min+(Imaxpm,max−pm,min)I,F′>Favgpm,min,F′≤Favg
式中: p ϵ p_{\epsilon} pϵ和 p m p_{m} pm 分别为交叉和变异概率; p c . m a x p_{c.\mathrm{max}} pc.max、 p c . m i n p_{c.\mathrm{min}} pc.min和 p m , m a x p_{m,\mathrm{max}} pm,max、 p m , m i n p_{m,\mathrm{min}} pm,min分别为交叉和变异概率的最大、最小值; I I I为迭代次数; I m a x I_\mathrm{max} Imax 为最大迭代次数; F F F为进行交叉操作的两个个体中的较大适应度值; F ′ F^{\prime} F′为进行变异操作的个体适应度值; F a v g F_\mathrm{avg} Favg为种群的平均适应度。
- 自适应遗传算法流程:
3、考虑集群间物理耦合
上图中1和2分别为两个集群,也就是说红色节点必须通过导线两两相接,所谓的集群节点必须集中,不能分散。本帖中在自适应函数中引入物理连通惩罚项
f
f
f,鼓励个体寻找符合要求的集群分区。
f
=
K
lim
c
∑
o
=
1
c
I
o
N
o
−
1
f=\frac{{{K_{\lim }}}}{c}\sum\limits_{o = 1}^c {\frac{{{I_o}}}{{{N_o} - 1}}}
f=cKlimo=1∑cNo−1Io
式中:
I
o
I_{\mathrm{o}}
Io为集群
C
o
C_{\mathrm{o}}
Co中所有节点的物理连接边权之和;
K
l
i
m
K_\mathrm{lim}
Klim是保证集群内部物理连通性的惩罚系数;
N
o
N_{\mathrm{o}}
No为集群
C
o
C_{\mathrm{o}}
Co中节点的个数;
c
c
c为划分配电网的集群个数。
%% 考虑集群的物理连通性
% jiqun为待检验集群编号
% 配电网连通矩阵32*32
% c集群划分个数
function fitness = customFitness(jiqun, node,c)
idx=unique(jiqun);
numClusters = length(idx); % 获取集群的数量
fitness = 0; % 初始化适应度分数
% 计算每个集群的连通性得分
for cluster = 1:numClusters
clusterNodes = find(jiqun == idx(cluster)); % 获取属于当前集群的节点
clusterSize = length(clusterNodes); % 当前集群的大小
connectivityScore = 0;
for i = 1:clusterSize
for j = 1:clusterSize
node1 = clusterNodes(i);
node2 = clusterNodes(j);
connectivityScore = connectivityScore + node(node1, node2); %判断连通性
end
end
connectivityScore=connectivityScore/2;
% fitness = fitness + connectivityScore/(clusterSize-1);
%当节点是孤立节点时,不减1
if clusterSize>1
fitness = fitness + connectivityScore/(clusterSize-1);
else
fitness = fitness + connectivityScore/(clusterSize+1);
end
end
fitness=fitness./c;
if isnan(fitness)
error('计算结果为 NaN,程序已停止运行。'); % 触发错误并停止程序执行
end
end
4、MATLAB仿真情况
此代码将包括以下几个部分:
- IEEE33节点配电网灵敏度矩阵
- 遗传算法函数包(英国谢菲尔特大学出品)
- 自适应遗传算法,变异、交叉概率自适应调整
- MATPOWER潮流计算过程
- IEEE33节点分区结果
注意:上图演示结果只是其中的一个可行解,并不一定是最优的,仅作为展示。最优结果可以自行多多运行尝试。
5、更多指导
欢迎留言 1492970771@qq.com;链接:https://m.tb.cn/h.TcHEplx?tk=fIwZ3tNrH1D CZ0012