1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【优化求解】基于matlab改进的遗传算法求解考虑环境效益DG优化问题【含Matlab源码 1483期】

【优化求解】基于matlab改进的遗传算法求解考虑环境效益DG优化问题【含Matlab源码 1483期】

时间:2023-05-21 14:27:38

相关推荐

【优化求解】基于matlab改进的遗传算法求解考虑环境效益DG优化问题【含Matlab源码 1483期】

一、遗传算法简介

1 引言

2 遗传算法理论

2.1 遗传算法的生物学基础

2.2 遗传算法的理论基础

2.3 遗传算法的基本概念

2.4 标准的遗传算法

2.5 遗传算法的特点

2.6 遗传算法的改进方向

3 遗传算法流程

4 关键参数说明

二、部分源代码

function[]=main(N_gen,pcro,pmut)clear;clc;%遗传算法主函数%用以实现求给定函数fun在给定区间[low,up]上的极大值%pcro交叉概率,pmut变异概率,N_gen迭代次数%改进地方:交叉率和变异率采用自适应,最优点采用最小值,判断是否越限改在交叉变异后,原来是在变异程序里pcro1=0.9;pcro2=0.6;pmut1=0.1;pmut2=0.05;N_gen=150;n=100; %种群个数line=[1 1 2 0.0922 0.047 ;2 2 3 0.0493 0.2511 ;3 3 4 0.366 0.1864 ;4 4 5 0.3811 0.1941 ;5 5 6 0.8190 0.707 ;6 6 7 0.1872 0.6188;7 7 8 0.7114 0.2351 ;8 8 9 1.03 0.74 ;9 9 10 1.044 0.74; 10 10 11 0.1966 0.065 ;11 11 12 0.3744 0.1238; 12 12 13 1.468 1.155 ;13 13 14 0.5416 0.7129; 14 14 15 0.5910 0.526 ;15 15 16 0.7463 0.5450 ;16 16 17 1.289 1.7210 ;17 17 18 0.7320 0.574;18 2 19 0.164 0.1565 ;19 19 20 1.5042 1.3554; 20 20 21 0.4095 0.4784;21 21 22 0.7089 0.9373 ;22 3 23 0.4512 0.3083 ;23 23 24 0.8980 0.7091 ;24 24 25 0.8960 0.7011 ;25 6 26 0.2030 0.1034 ;26 26 27 0.2842 0.1447 ;27 27 28 1.059 0.9337;28 28 29 0.8042 0.7006; 29 29 30 0.5075 0.2585 ;30 30 31 0.9744 0.9630;31 31 32 0.3105 0.3619 ;32 32 33 0.3410 0.5362 ];%line1为支路负荷line1=[1 0 0;2 100 60;3 90 40;4 120 80;5 60 30;6 60 20;7 200 100;8 200 100;9 60 20;10 60 20;11 45 30;12 60 35;13 60 35;14 120 80;15 60 10;16 60 20;17 60 20;18 90 40;19 90 40;20 90 40;21 90 40;22 90 40;23 90 50;24 420 200;25 420 200;26 60 25;27 60 25;28 60 20;29 120 70;30 200 600;31 150 70;32 210 100;33 60 40];LOAD=3715;%总有功负荷/KWpmax=0.2*LOAD/0.9; % #功率因数0.9, 分布式电源接入总容量不超过系统总负荷20%# 825.5556KW%%%ieee33 #功率基准值=10MVA,线电压基准值=12.66KV,总有功负荷=3715KW,总无功负荷=2300Kvar,根节点电压标幺值=1#n_point=size(line1,1) ; %节点数pop=encode(n_point,n,pmax); %用编码函数求得初始种群gen=0;%代数初始化j=1;while(gen<=N_gen) time(j)=j;fval=zeros(1,n);%初始化函数值fit=zeros(1,n);%初始化适应度for i=1:n fval(i)=fun(pop(i,:),line,line1,LOAD); %求个体的函数值,目标函数 endfval_avg(time(j))=mean(fval);%记录每代个体函数值平均值%fval=fval-min(fval);%保证适应度为正值fsum=sum(fval);%总适应度fit_avg=fsum/n;%计算种群适应度平均值fit=fval/fsum;%求个体的适应度(归一化) [fit1,index]=sort(fit); %将fit数组从小到大排序,并存在数组fit1中;同时,将对应的数组下标值存在数组index中best=pop(index(1),:);%记录每代的最优值,保留在变量best中#因为从小到大排列完,n=100时是最优个体#%best_fit(1,gen+1)=fit1(index(n));% best_fit(1,gen+1)=fval(index(1));best_fit(1,gen+1)= fun(pop(index(1),:),line,line1,LOAD);%avg_fit(1,gen+1)=fit_avg;fval_best(time(j))=fun(best,line,line1,LOAD); %求出每代最优个体的函数值,保存在数组 fval_best中 q(1)=fit(1);for i=2:nq(i)=q(i-1)+fit(i);%累加个体适应度形成赌轮endfunction popnew=crossover(pop,pcro1,pcro2,n,length,pmax,fit1,fit_avg)%pcro为交叉概率% %单切点交叉% k=1; %k个体编号% i=0;% while(k<=n)%rk=rand(); %选取进行交叉的两个亲本%if rk<pcro % b(i+1)=k;% i=i+1;%end%k=k+1;%if i==2% pos=fix(rand()*2*length)+1;%随机产生交叉点% for i=pos:2*length% c=pop(b(1),i);% pop(b(1),i)=pop(b(2),i);%对交叉点之后的编码进行交换% pop(b(2),i)=c;% end% i=0;%end% end%双切点交叉函数(改进)k1=1;for k=1:2:n%**************自适应************if fit1(k+1)>=fit_avgpcro=proc1*(1/(proc1-proc2+exp((fit1(k+1)-fit_avg)/(fit1(n)-fit_avg))));elsepcro=k1*pcro1;end%************************************rk=rand();if rk<pcropos1=ceil(length*rand); %随机产生交叉点1if pos1==1 %出口断路器位置不允许变化pos1=pos1+1;endpos2=ceil(length*rand); %随机产生交叉点2if pos2==1 %出口断路器位置不允许变化pos2=pos2+1;endif pos1>pos2 %两个交叉点按从小到大排序temp=pos1;pos1=pos2;pos2=temp;endfor i=pos1:pos2 %对交叉点pos1到pos2的编码进行交换 c=pop(k,i);pop(k,i)=pop(k+1,i);pop(k+1,i)=c;endfor i=(pos2+1):length %对交叉点pos2之后的编码进行交换c=pop(k,i);pop(k,i)=pop(k+1,i);pop(k+1,i)=c;endendendpopnew=floor(pop);

三、运行结果

四、matlab版本及参考文献

1 matlab版本

a

2 参考文献

《智能优化算法及其MATLAB实例(第2版)》包子阳 余继周 杨杉著 电子工业出版社

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。