【Matlab复现】基于自适应遗传算法的分布式电源优化配置

目录

[1 主要内容](#1 主要内容)

[​2 部分程序​](#2 部分程序)

[3 程序结果](#3 程序结果)

[4 下载链接](#4 下载链接)


1 主要内容

该程序采用自适应遗传算法优化分布式电源的配置问题,以投资运行成本、网络损耗成本、购电成本和碳排放成本之和作为优化目标,潮流计算采用前推回代法进行计算,程序不止复现了参考文献的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

2 部分程序

复制代码
%% 遗传算法
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
​

3 程序结果

118节点系统运行结果

33节点系统运行结果及与原文对比

下为原文结果:

下为原文结果:

下位原文结果:

4 下载链接

相关推荐
你我约定有三8 小时前
分布式微服务--Nacos作为配置中心(二)
java·分布式·spring cloud·微服务·架构·wpf·负载均衡
黄雪超9 小时前
Kafka——关于Kafka动态配置
大数据·分布式·kafka
bing_15810 小时前
如何利用 Redis 的原子操作(INCR, DECR)实现分布式计数器?
数据库·redis·分布式
民乐团扒谱机11 小时前
【微实验】弦振动 MATLAB 物理模型 动画仿真
matlab·动画·仿真·信号·声学·振动·
Evand J11 小时前
【matlab例程】无迹粒子滤波(UPF)的例程,用于三维环境下多雷达目标跟踪,非线性系统
开发语言·matlab·目标跟踪
爱思德学术15 小时前
中国计算机学会(CCF)推荐学术会议-A(软件工程/系统软件/程序设计语言):FSE 2026
分布式·软件工程·软件构建
Code季风20 小时前
API 网关与服务发现:实现动态路由与智能请求转发的原理揭秘
分布式·微服务
怒码ing1 天前
分布式事务----spring操作多个数据库,事务以及事务回滚还有用吗
数据库·分布式·spring
你我约定有三1 天前
分布式微服务--Nacos作为配置中心(一)
分布式·微服务·架构
小熊h1 天前
【分布式的个人博客部署】
linux·运维·服务器·分布式