【优化求解】遗传算法求解电力系统最优潮流问题【Matlab 301期】

一、简介

遗传算法的应用步骤
遗传算法GA是基于进化和遗传理论而提出来的全局寻优方法。
简单遗传算法解决问题的基本步骤如下:
(1)初始化:随机生成N个个体作为初始群体P(0),该种群就是目标函数可行解的一个集合。设置进化代数计数器归零,设置最大进化代数iter_max;
(2)个体评价:将初始种群代入目标函数中,根据适应度函数计算当前群体中各个种群的适应度;
(3)终止条件判断:给出终止条件,判断算法是否满足终止条件,若满足则转到(8);
(4)选择运算:对初始群体执行选择操作,优良的个体被大量复制,劣质的个体复制的少甚至被淘汰;
(5)交叉运算:以交叉概率来进行交叉运算;
(6)变异运算:以变异概率来进行交叉运算;
(7)群体P(t)经过选择运算、交叉运算、变异运算之后,得到由N个新个体构成的下一代群体P(t+1),则转(2),否则转(4);
(8)不断的进化,最终会得到目标函数中,适应度最高的个体,将其作为问题的最优解或满意解输出,终止计算。
在这里插入图片描述
在这里插入图片描述

二、源代码

function [F1 Pgg vv TL]=opf1(x)

%x表示0-1之间的随机数,结合发电功率的范围可以初始化一个发电向量
% F1表示最终的发电代价
% Pgg表示最优的发电功率
% vv表示最优发电点的电压
% TL表示耗损

% x=[0.5 0.5 0.5 0.5 0.5];

   %        IEEE 30-BUS TEST SYSTEM (American Electric Power)
%        Bus Bus  Voltage Angle   ---Load---- -------Generator----- Injected
%        No  code Mag.    Degree  MW    Mvar  MW  Mvar Qmin Qmax     Mvar

busdata=[1   1    1.06    0.0     0.0   0.0    0.0  0.0   0   0       0
         2   2    1.043   0.0   21.70  12.7   40.0  0.0 -40  50       0
         3   0    1.0     0.0     2.4   1.2    0.0  0.0   0   0       0
         4   0    1.06    0.0     7.6   1.6    0.0  0.0   0   0       0
         5   2    1.01    0.0    94.2  19.0    0.0  0.0 -40  40       0
         6   0    1.0     0.0     0.0   0.0    0.0  0.0   0   0       0
         7   0    1.0     0.0    22.8  10.9    0.0  0.0   0   0       0
         8   2    1.01    0.0    30.0  30.0    0.0  0.0 -10  60       0
         9   0    1.0     0.0     0.0   0.0    0.0  0.0   0   0       0
        10   0    1.0     0.0     5.8   2.0    0.0  0.0  -6  24      19
        11   2    1.082   0.0     0.0   0.0    0.0  0.0   0   0       0
        12   0    1.0     0       11.2  7.5    0    0     0   0       0
        13   2    1.071   0        0    0.0    0    0    -6  24       0
        14   0    1       0       6.2   1.6    0    0     0   0       0
        15   0    1       0       8.2   2.5    0    0     0   0       0
        16   0    1       0       3.5   1.8    0    0     0   0       0
        17   0    1       0       9.0   5.8    0    0     0   0       0
        18   0    1       0       3.2   0.9    0    0     0   0       0
        19   0    1       0       9.5   3.4    0    0     0   0       0
        20   0    1       0       2.2   0.7    0    0     0   0       0
        21   0    1       0      17.5  11.2    0    0     0   0       0
        22   0    1       0       0     0.0    0    0     0   0       0
        23   0    1       0       3.2   1.6    0    0     0   0       0
        24   0    1       0       8.7   6.7    0    0     0   0      4.3
        25   0    1       0       0     0.0    0    0     0   0       0
        26   0    1       0       3.5   2.3    0    0     0   0       0
        27   0    1       0       0     0.0    0    0     0   0       0
        28   0    1       0       0     0.0    0    0     0   0       0
        29   0    1       0       2.4   0.9    0    0     0   0       0
        30   0    1       0      10.6   1.9    0    0     0   0       0];

%                                        Line code
%         Bus bus   R      X     1/2 B   = 1 for lines
%         nl  nr  p.u.   p.u.   p.u.     > 1 or < 1 tr. tap at bus nl
linedata=[1   2   0.0192   0.0575   0.02640    1
          1   3   0.0452   0.1852   0.02040    1
          2   4   0.0570   0.1737   0.01840    1
          3   4   0.0132   0.0379   0.00420    1
          2   5   0.0472   0.1983   0.02090    1
          2   6   0.0581   0.1763   0.01870    1
          4   6   0.0119   0.0414   0.00450    1
          5   7   0.0460   0.1160   0.01020    1
          6   7   0.0267   0.0820   0.00850    1
          6   8   0.0120   0.0420   0.00450    1
          6   9   0.0      0.2080   0.0    0.978
          6  10   0         .5560   0      0.969
          9  11   0         .2080   0          1
          9  10   0         .1100   0          1
          4  12   0         .2560   0      0.932
         12  13   0         .1400   0          1
         12  14    .1231    .2559   0          1
         12  15    .0662    .1304   0          1
         12  16    .0945    .1987   0          1
         14  15    .2210    .1997   0          1
         16  17    .0824    .1923   0          1
         15  18    .1073    .2185   0          1
         18  19    .0639    .1292   0          1
         19  20    .0340    .0680   0          1
         10  20    .0936    .2090   0          1
         10  17    .0324    .0845   0          1
         10  21    .0348    .0749   0          1
         10  22    .0727    .1499   0          1
         21  22    .0116    .0236   0          1
         15  23    .1000    .2020   0          1
         22  24    .1150    .1790   0          1
         23  24    .1320    .2700   0          1
         24  25    .1885    .3292   0          1
         25  26    .2544    .3800   0          1
         25  27    .1093    .2087   0          1
         28  27     0       .3960   0      0.968
         27  29    .2198    .4153   0          1
         27  30    .3202    .6027   0          1
         29  30    .2399    .4533   0          1
          8  28    .0636    .2000   0.0214     1
          6  28    .0169    .0599   0.065      1];
gencost = [1 	0.00375	2	0  50 200;
		2 0.0175	1.75	0  20 80;
		5 0.0625	1	    0  15 50;
		8 0.0083	3.25	0  10 35;
		11 0.025	3	    0  10 30;
		13 0.025	3	    0  12 40];

  
    % formation of  Y bus
j=sqrt(-1); 
nl = linedata(:,1); nr = linedata(:,2); R = linedata(:,3);
X = linedata(:,4); Bc = j*linedata(:,5); a = linedata(:, 6);
nbr=length(linedata(:,1)); nbus = max(max(nl), max(nr));
Z = R + j*X; y= ones(nbr,1)./Z;        %branch admittance
for n = 1:nbr
    if a(n) <= 0  a(n) = 1;
    else end
    Ybus=zeros(nbus,nbus);     % initialize Ybus to zero
    % formation of the off diagonal elements
    for k=1:nbr;
           Ybus(nl(k),nr(k))=Ybus(nl(k),nr(k))-y(k)/a(k);
           Ybus(nr(k),nl(k))=Ybus(nl(k),nr(k));
        end
end
% formation of the diagonal elements
for  n=1:nbus
     for k=1:nbr
         if nl(k)==n
         Ybus(n,n) = Ybus(n,n)+y(k)/(a(k)^2) + Bc(k);
         elseif nr(k)==n
         Ybus(n,n) = Ybus(n,n)+y(k) +Bc(k);
         else,
         end
     end
end

%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%
  nn1=length(gencost(:,1));
  for ii=1:nn1
      if x(ii)>1
          x(ii)=1;
      elseif x(ii)<0
          x(ii)=0;
      end
     y1(ii)=gencost(ii,5)+x(ii)*(gencost(ii,6)-gencost(ii,5));
     % busdata=[1   1    1.06    0.0     0.0   0.0    0.0  0.0   0   0       0
%          2   2    1.043   0.0   21.70  12.7   40.0  0.0 -40  50       0
%          3   0    1.0     0.0     2.4   1.2    0.0  0.0   0   0       0
%          4   0    1.06    0.0     7.6   1.6    0.0  0.0   0   0       0
%          5   2    1.01    0.0    94.2  19.0    0.0  0.0 -40  40       0
%          6   0    1.0     0.0     0.0   0.0    0.0  0.0   0   0       0
%          7   0    1.0     0.0    22.8  10.9    0.0  0.0   0   0       0
%          8   2    1.01    0.0    30.0  30.0    0.0  0.0 -10  60       0
%          9   0    1.0     0.0     0.0   0.0    0.0  0.0   0   0       0
%         10   0    1.0     0.0     5.8   2.0    0.0  0.0  -6  24      19
%         11   2    1.082   0.0     0.0   0.0    0.0  0.0   0   0       0
%         12   0    1.0     0       11.2  7.5    0    0     0   0       0
%         13   2    1.071   0        0    0.0    0    0    -6  24       0
%         14   0    1       0       6.2   1.6    0    0     0   0       0
%         15   0    1       0       8.2   2.5    0    0     0   0       0
%         16   0    1       0       3.5   1.8    0    0     0   0       0
%         17   0    1       0       9.0   5.8    0    0     0   0       0
%         18   0    1       0       3.2   0.9    0    0     0   0       0
%         19   0    1       0       9.5   3.4    0    0     0   0       0
%         20   0    1       0       2.2   0.7    0    0     0   0       0
%         21   0    1       0      17.5  11.2    0    0     0   0       0
%         22   0    1       0       0     0.0    0    0     0   0       0
%         23   0    1       0       3.2   1.6    0    0     0   0       0
%         24   0    1       0       8.7   6.7    0    0     0   0      4.3
%         25   0    1       0       0     0.0    0    0     0   0       0
%         26   0    1       0       3.5   2.3    0    0     0   0       0
%         27   0    1       0       0     0.0    0    0     0   0       0
%         28   0    1       0       0     0.0    0    0     0   0       0
%         29   0    1       0       2.4   0.9    0    0     0   0       0
%         30   0    1       0      10.6   1.9    0    0     0   0       0];
% 
% %                                        Line code
% %         Bus bus   R      X     1/2 B   = 1 for lines
% %         nl  nr  p.u.   p.u.   p.u.     > 1 or < 1 tr. tap at bus nl
% linedata=[1   2   0.0192   0.0575   0.02640    1
%           1   3   0.0452   0.1852   0.02040    1
%           2   4   0.0570   0.1737   0.01840    1
%           3   4   0.0132   0.0379   0.00420    1
%           2   5   0.0472   0.1983   0.02090    1
%           2   6   0.0581   0.1763   0.01870    1
%           4   6   0.0119   0.0414   0.00450    1
%           5   7   0.0460   0.1160   0.01020    1
%           6   7   0.0267   0.0820   0.00850    1
%           6   8   0.0120   0.0420   0.00450    1
%           6   9   0.0      0.2080   0.0    0.978
%           6  10   0         .5560   0      0.969
%           9  11   0         .2080   0          1
%           9  10   0         .1100   0          1
%           4  12   0         .2560   0      0.932
%          12  13   0         .1400   0          1
%          12  14    .1231    .2559   0          1
%          12  15    .0662    .1304   0          1
%          12  16    .0945    .1987   0          1
%          14  15    .2210    .1997   0          1
%          16  17    .0824    .1923   0          1
%          15  18    .1073    .2185   0          1
%          18  19    .0639    .1292   0          1
%          19  20    .0340    .0680   0          1
%          10  20    .0936    .2090   0          1
%          10  17    .0324    .0845   0          1
%          10  21    .0348    .0749   0          1
%          10  22    .0727    .1499   0          1
%          21  22    .0116    .0236   0          1
%          15  23    .1000    .2020   0          1
%          22  24    .1150    .1790   0          1
%          23  24    .1320    .2700   0          1
%          24  25    .1885    .3292   0          1
%          25  26    .2544    .3800   0          1
%          25  27    .1093    .2087   0          1
%          28  27     0       .3960   0      0.968
%          27  29    .2198    .4153   0          1
%          27  30    .3202    .6027   0          1
%          29  30    .2399    .4533   0          1
%           8  28    .0636    .2000   0.0214     1
%           6  28    .0169    .0599   0.065      1];
% gencost = [1 	0.00375	2	0  50 200;
% 		2 0.0175	1.75	0  20 80;
% 		5 0.0625	1	    0  15 50;
% 		8 0.0083	3.25	0  10 35;
% 		11 0.025	3	    0  10 30;
% 		13 0.025	3	    0  12 40];
  end
  

三、运行结果

在这里插入图片描述

四、备注

完整代码或者代写添加QQ912100926
往期回顾>>>>>>
【优化求解】粒子群算法之充电站最优布局【Matlab 061期】
【优化求解】遗传算法之多旅行商问题【Matlab 062期】
【优化求解】遗传和模拟退火之三维装箱问题【Matlab 063期】
【优化求解】遗传算法之求最短路径【Matlab 064期】
【优化求解】粒子群之优化灰狼算法【Matlab 065期】
【优化求解】多目标之灰狼优化算法MOGWO 【Matlab 066期】
【优化求解】遗传算法之求解优化车辆发车间隔【Matlab 067期】
【优化求解】磷虾群算法简介【Matlab 068期】
【优化求解】差分进化算法简介【Matlab 069期】
【优化求解】约束优化之惩罚函数法简介【Matlab 070期】
【优化求解】改进灰狼算法之求解重油热解模型【Matlab 072期】
【优化求解】蚁群算法之配电网故障定位【Matlab 073期】
【优化求解】遗传算法之求解岛屿物资补给优化问题【Matlab 137期】
【优化求解】基于matlab冠状病毒群体免疫优化算法(CHIO)【Matlab 138期】
【优化求解】基于matlab之金鹰优化求解算法(GEO)【Matlab 139期】
【优化求解】基于GUI界面之BP神经网络优化求解【Matlab 179期】
【优化求解】基于GUI界面之遗传算法优化求解【Matlab 180期】
【优化求解】基于GUI界面之蚁群算法优化求解【Matlab 181期】
【优化求解】 免疫算法之数值逼近优化分析【Matlab 182期】
【优化求解】 启发式算法之函数优化分析【Matlab 183期】
【优化求解】改进的遗传算法(GA+IGA)之城市交通信号优化【Matlab 184期】
【优化求解】改进的遗传算法GA之城市交通信号优化【Matlab 185期】
【优化求解】改进的遗传算法IGA之城市交通信号优化【Matlab 186期】
【优化求解】罚函数的粒子群算法之函数寻优【Matlab 187期】
【优化求解】细菌觅食算法之函数优化分析【Matlab 188期】
【优化求解】引力搜索算法之函数优化分析【Matlab 189期】
【优化求解】蚁群算法之函数优化分析【Matlab 190期】
【优化求解】多元宇宙优化算法【Matlab 191期】
【优化求解】飞蛾扑火算法(MFO)【Matlab 192期】
【优化求解】实现电动汽车有序充电【Matlab 294期】
【优化求解】粒子群的智能微电网多目标优化算法【Matlab 295期】
【优化求解】PSO货物配装问题最优化【Matlab 296期】
【优化求解】人工鱼群算法求解梯级水库优化调度【Matlab 297期】
【优化求解】改进的人工鱼群算法求解高维问题【Matlab 298期】
【优化求解】粒子群算法解决经济调度【Matlab 299期】
【优化求解】遗传算法的资源配置【Matlab 300期】

猜你喜欢

转载自blog.csdn.net/m0_54742769/article/details/114364478