✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
电力系统无功优化是保证系统安全,经济运行的有效手段,是提高电力系统电压质量的重要措施之一。无功优化的目的在于确定系统中无功设备的合理配置,以保证电网在满足一定的安全约束条件下,使系统的技术经济性能指标最好,即无功补偿设备的安装投资及电网的运行费用最小。 电力系统无功优化是一个多变量、多约束的混合非线性规划问题,其操作变量既有连续变量又有离散变量,其优化过程比较复杂。本文采用教与学优化算法求解无功优化问题,给出了运用教与学优化算法的相应求解步骡,并对部分参数的取值进行了讨论和调整。计算表明,该算法能够同时处理问题中的连续变量和离散变量,能够较好地协调全局搜索和局部搜索,并具有并行计算的特性以及较强的鲁棒性,可以取得令人满意的结果。 本文对IEEE30,IEEE57节点试验系统和石家庄高邑县电网进行了无功优化计算,取得了令人满意的结果,表明用教与学优化算法求解该问题是可行的、更有效的。
⛄ 部分代码
%% 清理内存空间
clc
clear
close all
%% 算法参数的设定
index=input('请选择测试函数:1-Sphere,2-Griewank,3-Rosenbrock,4-Ackley,5-Rastrign');
x_num=50; % 班级人数
dim=2; % 问题的维度/决策变量的个数
it_max=100; % 最大迭代次数
[x_min,x_max,v_min,v_max]=set_pop(index,dim); % 设置位置,速度的上下限
N_ES=3; % 精英人数
%% 步骤1:班级初始化
x=x_min+rand(x_num,dim).*(x_max-x_min); % 初始化班级
x_teacher=x(1,:); % 初始化老师位置
fitness=zeros(1,x_num); % 所有个体的适应度
fitness_new=zeros(1,x_num); % 更新后个体适应度
fitness_teacher=inf; % 初始化老师的适应度
% 初始的适应度
for k=1:x_num
% 计算适应度值
switch index
case 1
fitness(k)=Sphere(x(k,:));
case 2
fitness(k)=Griewank(x(k,:));
case 3
fitness(k)=Rosenbrock(x(k,:));
case 4
fitness(k)=Ackley(x(k,:));
case 5
fitness(k)=Rastrign(x(k,:));
otherwise
warning('输入有误,请重新输入')
end
if fitness(k)<fitness_teacher
fitness_teacher=fitness(k);
x_teacher=x(k,:);
end
end
%% 迭代求最优解
for it=1:it_max
%% 步骤2:选取并保留精英解
[~,fitness_rank]=sort(fitness);
ES_index=fitness_rank(1:N_ES);
%% 步骤3:老师的教学
x_mean=mean(x);
TF=randi([1,2]);
x_differance=rand*(x_teacher-x_mean);
x_new=x+x_differance;
for k=1:x_num
% 计算适应度值
switch index
case 1
fitness(k)=Sphere(x(k,:));
fitness_new(k)=Sphere(x_new(k,:));
case 2
fitness(k)=Griewank(x(k,:));
fitness_new(k)=Griewank(x_new(k,:));
case 3
fitness(k)=Rosenbrock(x(k,:));
fitness_new(k)=Rosenbrock(x_new(k,:));
case 4
fitness(k)=Ackley(x(k,:));
fitness_new(k)=Ackley(x_new(k,:));
case 5
fitness(k)=Rastrign(x(k,:));
fitness_new(k)=Rastrign(x_new(k,:));
otherwise
warning('输入有误,请重新输入')
end
if fitness(k)>fitness_new(k)
x(k,:)=x_new(k,:);
end
end
%% 步骤4:学生之间互相学习
for k=1:x_num
studied_set=setdiff(1:x_num,k);
studied_object=studied_set(randi([1,x_num-1]));
if fitness(studied_object)<fitness(k)
x_new(k,:)=x(k,:)+rand*(x(studied_object,:)-x(k,:));
else
x_new(k,:)=x(k,:)-rand*(x(studied_object,:)-x(k,:));
end
% 计算适应度值
switch index
case 1
fitness(k)=Sphere(x(k,:));
fitness_new(k)=Sphere(x_new(k,:));
case 2
fitness(k)=Griewank(x(k,:));
fitness_new(k)=Griewank(x_new(k,:));
case 3
fitness(k)=Rosenbrock(x(k,:));
fitness_new(k)=Rosenbrock(x_new(k,:));
case 4
fitness(k)=Ackley(x(k,:));
fitness_new(k)=Ackley(x_new(k,:));
case 5
fitness(k)=Rastrign(x(k,:));
fitness_new(k)=Rastrign(x_new(k,:));
otherwise
warning('输入有误,请重新输入')
end
if fitness(k)>fitness_new(k)
x(k,:)=x_new(k,:);
end
end
%% 步骤5:精英解替换最差学员。
[~,fitness_rank]=sort(-fitness);
worst_index=fitness_rank(1:N_ES);
x(worst_index,:)=x(ES_index,:);
%% 步骤6:重复个体裁剪
[x_unique,ia,ic]=unique(x,'stable','rows');
for kk=setdiff(1:x_num,ia)
kkk=randi([1,dim]);
x(kk,kkk)=x_min(kkk)+rand*(x_max(kkk)-x_min(kkk));
end
%% 更新越限的粒子
for k=1:dim
x(x(:,k)>x_max(k),k)=x_max(k);
x(x(:,k)<x_min(k),k)=x_min(k);
end
%% 更新适应度值
for k=1:x_num
switch index
case 1
fitness(k)=Sphere(x(k,:));
case 2
fitness(k)=Griewank(x(k,:));
case 3
fitness(k)=Rosenbrock(x(k,:));
case 4
fitness(k)=Ackley(x(k,:));
case 5
fitness(k)=Rastrign(x(k,:));
otherwise
warning('输入有误,请重新输入')
end
if fitness(k)<fitness_teacher
fitness_teacher=fitness(k);
x_teacher=x(k,:);
end
end
figure(1)
scatter(x(:,1),x(:,2),100)
title(['第',num2str(it),'次迭代粒子分布情况'])
% axis([x_min(1) x_max(1) x_min(2) x_max(2)])
% drawnow
% F=getframe(gcf);
% I=frame2im(F);
% [I,map]=rgb2ind(I,256);
% if it == 1
% imwrite(I,map,'fun5.gif','gif', 'Loopcount',inf,'DelayTime',0.2);
% else
% imwrite(I,map,'fun5.gif','gif','WriteMode','append','DelayTime',0.2);
% end
% hold off
pause(0.01)
end
⛄ 运行结果
⛄ 参考文献
[1] 武鲁晓.改进粒子群算法在电力系统无功优化中的应用[D].山东大学[2023-06-07].
[2] 佟金锴.含分布式电源的配电网无功优化算法研究[J].辽宁师专学报:自然科学版, 2018, 20(3):5.DOI:CNKI:SUN:LAON.0.2018-03-002.
[3] 李红伟,蒋嘉焱,刘青卓,等.基于改进教与学算法的配网多目标无功优化[J].控制工程, 2020, 27(5):6.DOI:CNKI:SUN:JZDF.0.2020-05-018.
[4] 刘小华.基于电网分区的配电网无功优化[D].西南交通大学,2015.