【无功优化】基于教与学算法实现IEEE_33节点无功优化附matlab代码

简介: 【无功优化】基于教与学算法实现IEEE_33节点无功优化附matlab代码

✅作者简介:热爱科研的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.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料



相关文章
|
1天前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。
|
2天前
|
存储 算法 数据可视化
基于harris角点和RANSAC算法的图像拼接matlab仿真
本文介绍了使用MATLAB2022a进行图像拼接的流程,涉及Harris角点检测和RANSAC算法。Harris角点检测寻找图像中局部曲率变化显著的点,RANSAC则用于排除噪声和异常点,找到最佳匹配。核心程序包括自定义的Harris角点计算函数,RANSAC参数设置,以及匹配点的可视化和仿射变换矩阵计算,最终生成全景图像。
|
2天前
|
算法 Serverless
m基于遗传优化的LDPC码NMS译码算法最优归一化参数计算和误码率matlab仿真
MATLAB 2022a仿真实现了遗传优化的归一化最小和(NMS)译码算法,应用于低密度奇偶校验(LDPC)码。结果显示了遗传优化的迭代过程和误码率对比。遗传算法通过选择、交叉和变异操作寻找最佳归一化因子,以提升NMS译码性能。核心程序包括迭代优化、目标函数计算及性能绘图。最终,展示了SNR与误码率的关系,并保存了关键数据。
12 1
|
3天前
|
数据安全/隐私保护
地震波功率谱密度函数、功率谱密度曲线,反应谱转功率谱,matlab代码
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
3天前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
3天前
|
算法 调度
考虑需求响应的微网优化调度模型【粒子群算法】【matlab】
考虑需求响应的微网优化调度模型【粒子群算法】【matlab】
|
3天前
|
算法 调度
面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)
面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)
|
3天前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
|
3天前
|
运维 算法
基于改进遗传算法的配电网故障定位(matlab代码)
基于改进遗传算法的配电网故障定位(matlab代码)

热门文章

最新文章