【无功优化】基于教与学算法实现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天前
|
算法
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
|
6天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
6天前
|
人工智能 算法 大数据
Linux内核中的调度算法演变:从O(1)到CFS的优化之旅###
本文深入探讨了Linux操作系统内核中进程调度算法的发展历程,聚焦于O(1)调度器向完全公平调度器(CFS)的转变。不同于传统摘要对研究背景、方法、结果和结论的概述,本文创新性地采用“技术演进时间线”的形式,简明扼要地勾勒出这一转变背后的关键技术里程碑,旨在为读者提供一个清晰的历史脉络,引领其深入了解Linux调度机制的革新之路。 ###
|
10天前
|
机器学习/深度学习 算法 调度
基于ACO蚁群优化的VRPSD问题求解matlab仿真,输出规划路径结果和满载率
基于ACO蚁群优化的VRPSD问题求解MATLAB仿真,输出ACO优化的收敛曲线、规划路径结果及每条路径的满载率。在MATLAB2022a版本中运行,展示了优化过程和最终路径规划结果。核心程序通过迭代搜索最优路径,更新信息素矩阵,确保找到满足客户需求且总行程成本最小的车辆调度方案。
|
13天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
15 3
|
12天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
17天前
|
人工智能 算法 数据安全/隐私保护
基于遗传优化的SVD水印嵌入提取算法matlab仿真
该算法基于遗传优化的SVD水印嵌入与提取技术,通过遗传算法优化水印嵌入参数,提高水印的鲁棒性和隐蔽性。在MATLAB2022a环境下测试,展示了优化前后的性能对比及不同干扰下的水印提取效果。核心程序实现了SVD分解、遗传算法流程及其参数优化,有效提升了水印技术的应用价值。
|
16天前
|
存储 缓存 算法
优化轮询算法以提高资源分配的效率
【10月更文挑战第13天】通过以上这些优化措施,可以在一定程度上提高轮询算法的资源分配效率,使其更好地适应不同的应用场景和需求。但需要注意的是,优化策略的选择和实施需要根据具体情况进行详细的分析和评估,以确保优化效果的最大化。
|
20天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
4天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。