一、配电网重构原理
-
定义:
配电网重构是指在满足运行约束的前提下,通过改变开关状态优化配电网性能,提高系统的经济效益和运行效率。 -
拓扑约束:
- 配电网必须保持径向拓扑,避免环网或孤岛。
- 采用算法控制开关状态的选择,确保有效拓扑。
-
算法特点:
- 配电网重构是一个 0-1 规划问题,决策变量为开关的开断状态。
- 采用二进制粒子群优化算法(BPSO),并引入 Sigmoid 函数 映射粒子位置到 {0,1} 变量,以保证有效性。
-
示例系统:
- 使用33节点系统进行仿真,包括13个常闭分段开关和2个常开联络开关。
- 通过优化选择开关断开位置,提高计算效率并减少无效状态。
-
目标函数:
- 选择网损最小作为优化目标。
二、代码组成
程序包含 10 个 MATLAB (.m) 文件,各文件功能如下:
-
main_2_loss.m
(主函数)- 采用二进制粒子群算法进行配电网重构。
- 采用 3 种不同形式 存储粒子位置:
pop1
:37维向量,每行 0/1(1 代表支路闭合,0 代表断开)。pop2
:5维向量,表示断开的 5 条支路编号。pop3
:5维向量,表示断开的支路在五个闭合回路中的编号。
- 在每次更新前,计算适应度函数(网损最小最优)。
- 调用
huanlu
判断方案是否存在环路或孤岛,若违反约束则适应度赋值极大,避免不合理方案。
-
CreatPSO_2.m
(粒子初始化)- 生成初始粒子,在每个回路随机断开一条支路,确保合理性。
-
change_pop.m
(粒子格式转换)- 负责
pop1
、pop2
、pop3
三种形式的转换,提高计算效率。
- 负责
-
huan.m
(存储环路信息)- 记录每个环路中所有支路的编号,便于环路检测。
-
point.m
(存储节点信息)- 记录具有 2 条以上支路连接的节点,例如
point1
代表节点 3。
- 记录具有 2 条以上支路连接的节点,例如
-
huanlu.m
(拓扑约束检测)- 判断粒子是否满足拓扑约束:
flag1-6
:环路公共支路最多只能断开 1 条。flag7-14
:连接 3 条支路的节点最多只能断开 2 条。
- 若满足约束输出
1
,否则输出0
。
- 判断粒子是否满足拓扑约束:
-
IEEE33.m
(系统参数)- 记录 IEEE 33 节点系统的参数信息。
-
set_up_2.m
(算法参数设置)- 设定位置/速度上下限,定义算法搜索空间。
-
loss.m
(目标函数计算)- 计算系统网损,作为适应度函数的评估标准。
-
sigmoid.m
(Sigmoid 函数)
- 映射粒子位置到 {0,1} 变量,确保粒子更新合理。
三、代码运行结果
主函数示例:
%二进制粒子群算法
%% 清空环境
clc;clear;
%% 读取数据
IEEE33;
%% 设置种群参数
sizepop = 50; % 初始种群个数
dim = 37; % 空间维数
ger = 22; % 最大迭代次数
[xlimit_max,xlimit_min,vlimit_max,vlimit_min] = set_up_2();
c_1 = 0.8; % 惯性权重
c_2 = 1.5; % 自我学习因子
c_3 = 1.5; % 群体学习因子
%% 生成初始种群
% 首先随机生成初始种群位置
% 然后随机生成初始种群速度
% 然后初始化个体历史最佳位置,以及个体历史最佳适应度
% 然后初始化群体历史最佳位置,以及群体历史最佳适应度
% 设置禁忌对象和其对应的持续迭代次数
[pop1,pop2,pop3,pop_v] = CreatPSO_2(sizepop,vlimit_max,vlimit_min);
pop=[pop1,pop2,pop3];
gbest = pop1; % 每个个体的历史最佳位置
success = huanlu(pop2);
L=5;%禁忌对象对应的持续迭代次数
for j=1:sizepop
if success(j)
% [SAIFI,SAIDI,CAIDI,ASAI,Lambda_load,Gamma_load,U_load] = reliability(pop1(j,:));
% fitness_gbest(j) = SAIDI; % 每个个体的历史最佳适应度
[V,u,Loss] = loss(pop2(j,:));
fitness_gbest(j) = Loss;
else
fitness_gbest(j) = 10^10;
end
end
zbest = pop1(1,:); % 种群的历史最佳位置
forbidden=zbest; % 种群的禁忌对象
fitness_zbest = fitness_gbest(1); % 种群的历史最佳适应度
for j=1:sizepop
if fitness_gbest(j) < fitness_zbest % 如果求最小值,则为<; 如果求最大值,则为>;
zbest = pop1(j,:);
fitness_zbest=fitness_gbest(j);
end
end
%% 粒子群迭代
% 更新速度并对速度进行边界处理
% 更新位置并对位置进行边界处理
% 进行约束条件判断并计算新种群各个个体位置的适应度
% 新适应度与个体历史最佳适应度做比较
% 个体历史最佳适应度与种群历史最佳适应度做比较
% 再次循环或结束
iter = 1; %迭代次数
record = zeros(ger, 1); % 记录器
record_average=zeros(ger, 1);
%画图的一些准备
node_location=[(1:14)',2*ones(14,1);(15:18)',2.5*ones(4,1);(2:5)',ones(4,1);(3:5)',4*ones(3,1);(6:13)',3*ones(8,1)];%节点的位置
line_plot=branch(:,2:3);
figure(1)
while iter <= ger
for j=1:sizepop
% 更新速度并对速度进行边界处理
pop_v(j,:)= c_1 * pop_v(j,:) + c_2*rand*(gbest(j,:)-pop1(j,:))+c_3*rand*(zbest-pop1(j,:));% 速度更新
for i=1:dim
if pop_v(j,i) > vlimit_max(i)
pop_v(j,i) = vlimit_max(i);
end
if pop_v(j,i) < vlimit_min(i)
pop_v(j,i) = vlimit_min(i);
end
end
% 更新位置并对位置进行边界处理
S=sigmoid(pop_v(j,:));
huan;
index=zeros(1,5);
duan=zeros(1,5);
[~,index(1)]=min(S(huan1));
duan(1)=huan1(index(1));
huan2(huan2==duan(1))=[];
[~,index(2)]=min(S(huan2));
duan(2)=huan2(index(2));
huan3([find(huan3==duan(1)),find(huan3==duan(2))])=[];
[~,index(3)]=min(S(huan3));
duan(3)=huan3(index(3));
huan4([find(huan4==duan(1)),find(huan4==duan(2)),find(huan4==duan(3))])=[];
[~,index(4)]=min(S(huan4));
duan(4)=huan4(index(4));
huan5([find(huan5==duan(1)),find(huan5==duan(2)),find(huan5==duan(3)),find(huan5==duan(4))])=[];
[~,index(5)]=min(S(huan5));
duan(5)=huan5(index(5));
pop1(j,:)=ones(1,37);
pop1(j,duan)=0;
pop2(j,:)=duan;
if L>=0
if pop1(j,:)==forbidden
[pop1(j,:),pop2(j,:),~,~]= CreatPSO_2(1,vlimit_max,vlimit_min);
end
success(j) = huanlu(pop2(j,:));
% 进行约束条件判断并计算新种群各个个体位置的适应度
if success(j)
% [SAIFI,SAIDI,CAIDI,ASAI,Lambda_load,Gamma_load,U_load] = reliability(pop1(j,:));
% fitness_pop(j) = SAIDI; % 每个个体的历史最佳适应度
[V,u,Loss] = loss(pop2(j,:));
fitness_pop(j) = Loss;
else
fitness_pop(j) = 10^10;
end
% 新适应度与个体历史最佳适应度做比较
if fitness_pop(j) < fitness_gbest(j) % 如果求最小值,则为<; 如果求最大值,则为>;
gbest(j,:) = pop1(j,:); % 更新个体历史最佳位置
fitness_gbest(j) = fitness_pop(j); % 更新个体历史最佳适应度
end
% 个体历史最佳适应度与种群历史最佳适应度做比较
if fitness_gbest(j) < fitness_zbest % 如果求最小值,则为<; 如果求最大值,则为>;
zbest = gbest(j,:); % 更新群体历史最佳位置
fitness_zbest=fitness_gbest(j); % 更新群体历史最佳适应度
end
L=L-1;
else
success(j) = huanlu(pop2(j,:));
% 进行约束条件判断并计算新种群各个个体位置的适应度
if success(j)
% [SAIFI,SAIDI,CAIDI,ASAI,Lambda_load,Gamma_load,U_load] = reliability(pop1(j,:));
% fitness_pop(j) = SAIDI; % 每个个体的历史最佳适应度
[V,u,Loss] = loss(pop2(j,:));
fitness_pop(j) = Loss;
else
fitness_pop(j) = 10^10;
end
% 新适应度与个体历史最佳适应度做比较
if fitness_pop(j) < fitness_gbest(j) % 如果求最小值,则为<; 如果求最大值,则为>;
gbest(j,:) = pop1(j,:); % 更新个体历史最佳位置
fitness_gbest(j) = fitness_pop(j); % 更新个体历史最佳适应度
end
% 个体历史最佳适应度与种群历史最佳适应度做比较
if fitness_gbest(j) < fitness_zbest % 如果求最小值,则为<; 如果求最大值,则为>;
zbest = gbest(j,:); % 更新群体历史最佳位置
fitness_zbest=fitness_gbest(j); % 更新群体历史最佳适应度
end
forbidden=zbest;
L=2;
end
end
record(iter) = fitness_zbest;%最小值记录
record_average(iter)=mean(fitness_gbest);
%% 实时更新图像
[~,pop22,~] = change_pop(zbest,1);
line_copy=line_plot;
line_copy(pop22,:)=[];
for k=1:length(line_copy)
m=[node_location(line_copy(k,1),1),node_location(line_copy(k,2),1)];
n=[node_location(line_copy(k,1),2),node_location(line_copy(k,2),2)];
plot(m,n,'bo-')
hold on
end
title(['算法进度',num2str(iter/ger*100),'%,','最优方案断开支路:',num2str(pop22),',功率损耗:',num2str(fitness_zbest),'kW']);
axis off
hold off;
pause(0.001);
iter = iter+1;
end
% pop2
%% 输出结果
disp(['最小功率损耗:',num2str(fitness_zbest),'kW'])
[MinV1,u1,Loss1] = loss(pop22);
[MinV2,u2,Loss2] = loss(33:37);
disp(['最低电压:',num2str(MinV1*12.66),'kV'])
disp(['断开的支路:',num2str(pop22)])
figure(1)
plot(1:ger,record)
title('算法收敛情况');
xlabel('迭代次数')
ylabel('种群最优适应度')
figure(2)
plot(1:33,u1,'r-o')
title('各节点电压');
xlabel('节点')
ylabel('电压幅值/kV')
hold on
plot(1:33,u2,'b-s')
legend('重构后的系统','初始系统')
代码运行结果
四、完整代码获取链接
代码下载链接:基于粒子群算法的配电网重构 一、配电网重构原理定义: 配电网重构是指在满足运行约束的前提下,通过改变开关状态优化配电网性能,提高系统的经济效益和运行效率。拓扑约束:配电网必须保持径向拓扑,避免环网或孤岛。采用算法控制开关状态的选择,确保有效拓扑。算法特点:配电网重构是一个 0-1 规划问题,决https://mbd.pub/o/bread/aJWakpty
五、总结
- 该程序利用**二进制粒子群优化算法(BPSO)**实现配电网重构,通过优化开关状态减少网损,提高系统运行效率。
- 采用 环路检测、约束条件控制、格式转换 等方法,保证优化方案合理,避免孤岛和环网结构。
- 代码模块化清晰,适用于 IEEE 33 节点系统 及其他配电网重构问题的研究。