【无功优化】基于教与学算法实现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电子书和数学建模资料



相关文章
|
6月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
272 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
6月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
162 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
6月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
138 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
9月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
9月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
|
9月前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)
|
9月前
|
供应链 算法
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
|
9月前
|
算法 调度
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
|
9月前
|
算法 调度 SoC
电动汽车充放电V2G模型(Matlab代码)
电动汽车充放电V2G模型(Matlab代码)

热门文章

最新文章