一、配电网重构原理
-
定义:
配电网重构是指在满足运行约束的前提下,通过改变开关状态优化配电网性能,提高系统的经济效益和运行效率。 -
拓扑约束:
- 配电网必须保持径向拓扑,避免环网或孤岛。
- 采用算法控制开关状态的选择,确保有效拓扑。
-
算法特点:
- 配电网重构是一个 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:sizepopif 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;elsefitness_gbest(j) = 10^10; end
end
zbest = pop1(1,:); % 种群的历史最佳位置
forbidden=zbest; % 种群的禁忌对象
fitness_zbest = fitness_gbest(1); % 种群的历史最佳适应度
for j=1:sizepopif 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 <= gerfor 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:dimif pop_v(j,i) > vlimit_max(i)pop_v(j,i) = vlimit_max(i);endif pop_v(j,i) < vlimit_min(i)pop_v(j,i) = vlimit_min(i);endend% 更新位置并对位置进行边界处理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>=0if pop1(j,:)==forbidden[pop1(j,:),pop2(j,:),~,~]= CreatPSO_2(1,vlimit_max,vlimit_min);endsuccess(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;elsefitness_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;elsesuccess(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;elsefitness_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 endrecord(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 onendtitle(['算法进度',num2str(iter/ger*100),'%,','最优方案断开支路:',num2str(pop22),',功率损耗:',num2str(fitness_zbest),'kW']);axis offhold 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 节点系统 及其他配电网重构问题的研究。