目录
该程序采用自适应遗传算法优化分布式电源的配置问题,以投资运行成本、网络损耗成本、购电成本和碳排放成本之和作为优化目标,潮流计算采用前推回代法进行计算,程序不止复现了参考文献的33节点系统,同时也实现了118节点系统配电网络的选址定容模型,因此文末链接的程序包包括两部分,一个是118节点系统优化程序,一个是33节点系统优化程序,该程序采用matlab编写,注释清晰!
??
%**************变异率自适应************ if fit1(k)>=fit_avg pmut=proc1*(1/(pmut1-pmut2+exp((fit1(k+1)-fit_avg)/(fit1(n)-fit_avg)))); else pmut=k2*pmut1; end %************************************ ? rk=rand(); if rk1;%随机产生变异点 # fix(x)向0方向取整 # if pos==1 %出口断路器位置不允许变化 pos=pos+1; end pop(k,pos)=rand()*(pmax/10);%对变异点进行变异 %****************原来程序************** % if sum(pop)>(pmax/10) % pop=floor(pop*((pmax/10)/sum(pop))); % end %********************************** end
%% 遗传算法 pop=encode(n_point,n,pmax); %用编码函数求得初始种群 gen=0;%代数初始化 t_cal=1; % 计算迭代次数 L=30; %记忆的群体的大小 ? while(gen<=N_gen) time(t_cal)=t_cal; %普通遗传算法流程 fval=zeros(1,n);%初始化函数值 fit=zeros(1,n);%初始化适应度 for i=1:n fval(i)=fun(pop(i,:),line,line1,LOAD); %求个体的函数值,目标函数 end fval_avg(time(t_cal))=mean(fval);%记录每代个体函数值平均值 %fval=fval-min(fval);%保证适应度为正值 fsum=sum(fval);%总适应度 fit_avg=fsum/n;%计算种群适应度平均值 fit=fval/fsum;%求个体的适应度(归一化) [fit1,index]=sort(fit); %将fit数组从小到大排序,并存在数组fit1中;同时,将对应的数组下标值存在数组index中 popfx=pop(index(1:L),:); %存储记忆的个体 best=pop(index(1),:);%记录每代的最优值,保留在变量best中 #因为从小到大排列完,n=100时是最优个体# best_fit(1,gen+1)= fun(pop(index(1),:),line,line1,LOAD); fval_best(time(t_cal))=fun(best,line,line1,LOAD);%求出每代最优个体的函数值,保存在数组 fval_best中 fsum=sum(1./fval);%总适应度倒数 fit=(1./fval)/fsum; q(1)=fit(1); for i=2:n q(i)=q(i-1)+fit(i);%累加个体适应度形成赌轮 end pop=select(pop,q,n);%选择 pop=crossover(pop,pcro1,pcro2,n,n_point,pmax,fit1,fit_avg);%交叉 pop=mutation(pop,pmut1,pmut2,n,n_point,pmax,fit1,fit_avg);%变异 ? %**************************小生境技术****************************** pophe=[popfx;pop]; %总个体 d=0; fval1=zeros(1,n+L); for i=1:1:L+n fval1(1,i)=fun(pophe(i,:),line,line1,LOAD); end for i=1:1:L+n-1 for j=i+1:1:L+n sumd1=sum(((pophe(i,:)-pophe(j,:)).^2)); d=d+sqrt(sumd1); end end sum1=0; for i=1:1:L+n-1 for j=i+1:1:L+n sum1=sum1+1; end end radius=d/sum1; %这个半径 我看了一下就是输出数值 不清楚作用 我没有改 radius=radius/(gen+130000); for i=1:1:L+n-1 for j=i+1:1:L+n sumd2=0; for l=1:1:n_point d2=((pophe(i,l)-pophe(j,l))^2); sumd2=sumd2+d2; end d(i,j)=sqrt(sumd2); if d(i,j) < radius if fval1(i)10000000; else fval1(i)=fval1(i)+10000000; end end end end [fn1,fx1]=sort(fval1); pop=pophe(fx1(1:n),:); ? %*******************小生境算法******************************* %***************添加的程序********************** % 如果不加这段,交叉变异后有可能会越限,超过(分布式电源接入总容量不超过系统总负荷20%) for ii=1:n total_dg(ii)=sum(pop(ii,:)); end for i=1:n if total_dg(i)>(pmax/10) pop(i,:)=floor(pop(i,:)*((pmax/10)/total_dg(i))); %化成小于1,#floor()不大于自变量的最大整数# end end for i=1:n for j=1:n_point if pop(i,j)>111.1 pop(i,j)=111.1; %微型燃气轮机最大输出功率不超过300Kw# end end end for i=1:n for j=1:n_point if pop(i,j)<80 pop(i,j)=0; %微型燃气轮机最大输出功率不超过300Kw# end end end %**************************************************** pop(n,:)=best; gen=gen+1;%下一代 t_cal=t_cal+1; end ?
118节点系统运行结果
33节点系统运行结果及与原文对比
下为原文结果:
下为原文结果:
下位原文结果: