【优化选址】基于模拟退火结合粒子群算法求解分布式电源定容选址问题matlab源码

221 阅读3分钟

【优化选址】基于模拟退火结合粒子群算法求解分布式电源定容选址问题matlab源码

1 算法介绍

1.1 模拟退火算法

img

1.2 粒子群算法

模型介绍见这里

1.3 含有分布式电源的配电网结构

 

 

 

 

2 部分代码

%% 模拟退火粒子群算法分布式电源定容选址优化规划
tic                                                             %测试时间
format short ;
clc;
clear all;
%% 算法初始参数设置
pop=90;                                                         %种群粒子数目
gen=200;                                                         %最大迭代次数M
M=4;                                                            %目标函数个数
V=68;                                                           %控制变量个数
Xmax=10;                                                        %控制变量约束最大值
Xmin=0;                                                         %控制变量约束最小值
g_best=zeros(gen,V);                                            %全局最优存放位置
pop_num=40;                                                     %保存的最优前沿
lamda=0.5;                                                      %退火常数
%% 初始化种群个体
[pop_x,pop_v]=initial(pop,V,M);
%% 模拟退火粒子群算法
for t=1:gen                                                     %进入主要循环,gen迭代次数
                clear Gbest_value
                clear R
              %%  1.寻找全局最优
                [pbest,pbest_value,k]=gbest_fitness(pop_x,V,M,pop); 
                g_best(t,:)=pbest;
                g_best_value(t,:)=pbest_value;
              %% 1.对各目标函数值进行排序
                for j = 1 : M
                [Gbest_value(:,j),R(:,j)]=sort(g_best_value(:,j));
                end
               %% 2.根据个体排序计算其适应度
               for i = 1 : t
                  for j = 1 : M
                      if R(i,j)>1
                            ex(i,j)=(pop-R(i,j))^2;
                      else 
                            ex(i,j)=k*pop;  
                      end
                  end
               end
               ex=sum(ex');
             %% 3.得到适应度最好的全局最优解
               [Fit,index]=sort(ex');
               %[y_val,index]=min(g_best_value);
               clear Fit;
               gbest=g_best(index,:);
        %% 2.速度更新
               change_v=update_v(t,gen,pop_v,pop_x(:,1:68),g_best,V,pop,pbest);
               pop_v=change_v;
        %% 2.更新位置
               change_x=pop_x(:,1:V)+change_v(:,1:V);
        %% 控制变量约束

            for i = 1 : pop
                for j = 1 : V
            if change_x(i,j)>Xmax
                   change_x(i,j)=unidrnd(10);
            else if change_x(i,j)<Xmin
                   change_x(i,j)=unidrnd(10);
                end
            end
                end
            end
        %% 粒子群速度限制约束
             
        %% 求出各个体的目标函数值
         for i=1:pop
              change_x(i,V+1:V+M)=mokuaihanshu(pop_x(i,:),pop,M,V);%求出各个体的目标函数值
         end
        %% 形成混合种群
         [y1,x1]=size(pop_x);
         [y2,x2]=size(change_x);%注意:此时x1不等于x2
         migle_x(1:y1,:)=pop_x;
         migle_x(y1+1:y1+y2,1:x2)=change_x;
        %% 进行非支配排序
         migle_x = non_domination_sort_mod(migle_x, M, V);
        %% 选择下一代种群
         pop_x = replace_chromosome(migle_x, M, V, pop);
         disp(t);
 end
Ploss=pop_x(:,V+1)./(10^9);
Cost=pop_x(:,V+2)./(10^6);
if M==3
    save solution1.txt pop_x -ASCII    %以二进制码保存输出结果
    [minploss,index]=min(pop_x(:,V+1));
    L1=(pop_x(index,V+2)); 
    [minCost,indey]=min(pop_x(:,V+2));
    ploss=pop_x(indey,V+1);
    plot(pop_x(:,V + 1),pop_x(:,V + 2),'o');
    xlabel('系统网损');ylabel('总投资与运行成本');
    title(['NSGAminploss= ',num2str(minploss),' L1= ',num2str(L1),'   ploss=',num2str(ploss),'minL=',num2str(minL)]);
elseif M ==4
     save solution2.txt pop_x -ASCII    %以二进制码保存输出结果
     plot3(Ploss,Cost,pop_x(:,V + 3),'.');
     xlabel('网损');ylabel('总投资与运行成本');zlabel('负荷节点电压偏差');
     %title(['网损最优',num2str(min(pop_x(:,V + 1))),'成本最优',num2str(min(pop_x(:,V + 2))),'偏差最小',num2str(min(pop_x(:,V + 3)))]);
     grid
end
​
​
​

3 仿真结果

4 参考文献

[1]王艳敏. 基于可靠性的供应链设施选址问题的优化模型[J]. 科学技术与工程, 2012, 12(011):2517-2520.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。