基于统一空间方法的动态切换拥挤(DSC)DSC-MOAGDE算法附matlab代码

简介: 基于统一空间方法的动态切换拥挤(DSC)DSC-MOAGDE算法附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测雷达通信 无线传感器

信号处理图像处理路径规划元胞自动机无人机 电力系统

⛄ 内容介绍

本研究提出了一种稳健的方法,使用基于帕累托的归档机制和基于拥挤距离的归档处理机制来提高多目标进化算法 (MOEA) 的搜索性能。所提出方法的目的是在目标和决策空间中提供可持续的多样性,并在两个空间中建立稳定的开发-探索平衡。为此:1) 定义了参考空间组合,2) 开发了由参考空间组合组成的策略以提高拥挤距离计算的性能,以及 3) 提出了一种动态切换机制来实现这些策略。在所提出的 DSC 方法中,非支配解在三个不同的参考空间中表示:决策空间、目标空间、以及这两个空间的统一结果。创建了这三个空间的二进制组合,并开发了使用不同参考空间的策略。切换机制旨在动态地实施这些策略。参考由该切换机制选择的空间向量执行拥挤距离计算。所提出的 DSC 方法在多模态多目标优化问题 (MMOP) 和结合交流最优功率流 (AC-OPF) 和交流/直流最优功率流 (AC/DC-OPF) 的实际工程问题上进行了测试. 根据实验研究结果,与竞争对手相比,所提出的 DSC-MOAGDE 算法在 MMOP 上的成功率提高了约 30%。同样,所提出的方法能够将成本优化 6.66%、24.15%、52。

⛄ 部分代码

function [bestFitness]=MOAGDE_SingerMap_Cr3(NP,funnum)

[fname,D, n_obj, L, H] = terminate_problem(funnum);

GEN = 50;

problemName = strcat("@",fname);

ObjectiveFunction=eval(problemName);

X = zeros(D,1); % trial vector

Pop = zeros(D,NP); % population

Fit = zeros(NP,n_obj); % fitness of the population

r = zeros(3,1); % randomly selected indices

Archive_member_no = 0;

bestFitness=inf*ones(1,n_obj);

Archive_X=zeros(NP,D);

Archive_F=ones(NP,n_obj)*inf;

ArchiveMaxSize = NP;

% *********************** %

% ** CREATE POPULATION ** %

% *********************** %


for j = 1:NP % initialize each individual

   Pop(:,j) = L + (H-L).*rand(1,D); % within b.constraints

end

Cr_All=zeros(1,2);

NW=zeros(1,2);

global chaosMap

SingerMap(GEN+10)

for g = 1:GEN % for each generation

   

   for i=1:NP %Calculate all the objective values first

       Fit(i,:)=ObjectiveFunction(Pop(:,i)');

       if dominates(Fit(i,:),bestFitness)

           bestFitness=Fit(i,:);

       end

   end

   

   [Archive_X, Archive_F, Archive_member_no]=UpdateArchive(Archive_X, Archive_F, Pop', Fit, Archive_member_no);

   

   if Archive_member_no>ArchiveMaxSize

       Archive_X_F = [Archive_X Archive_F];

       Norm_Archive_X_F = Normalize(Archive_X_F);

       Norm_Archive_X = Normalize(Archive_X);

       if(rand()>chaosMap(g))

            Archive_mem_ranks_X=RankingProcess(Norm_Archive_X, ArchiveMaxSize, D);

           [Archive_X, Archive_F, ~, Archive_member_no]=HandleFullArchive(Archive_X, Archive_F, Archive_member_no, Archive_mem_ranks_X, ArchiveMaxSize);

       else

           Archive_mem_ranks_X_F=RankingProcess(Norm_Archive_X_F, ArchiveMaxSize, (n_obj+D));

           [Archive_X, Archive_F, ~, Archive_member_no]=HandleFullArchive(Archive_X, Archive_F, Archive_member_no, Archive_mem_ranks_X_F, ArchiveMaxSize);

      end    

   end

   

   Norm_Archive_X = Normalize(Archive_X);

   Archive_mem_ranks_X=RankingProcess(Norm_Archive_X, Archive_member_no, D);

   index=RouletteWheelSelection(1./Archive_mem_ranks_X);

   if index==-1

       index=1;

   end

   % Update the best Organism

   bestSolution=Archive_X(index,:);

   bestFitness=Archive_F(index,:);

   

   Norm_Archive_F = Normalize(Archive_F);

   Archive_mem_ranks_F=RankingProcess(Norm_Archive_F, Archive_member_no, n_obj);

   

   Norm_Fit = Normalize(Fit);

   allRank=RankingProcess(Norm_Fit, ArchiveMaxSize, n_obj);

   

   CrPriods_Index=zeros(1,NP);

   Sr=zeros(1,2);

   CrPriods_Count=zeros(1,2);

   for j = 1:NP % for each individual

       

        %%%%%%%%ADAPTIVE CR RULE  %%%%%%%%%%%%%%%%%%%%%%%%%

           Ali = rand;

           if(g<=1) % Do for the first Generation

               if (Ali<=1/2)

                   CR=0.05+0.1*rand(1,1);

                   CrPriods_Index(j)=1;

               

               else

                   CR=0.9+0.1*rand(1,1);

                   CrPriods_Index(j)=2;    

               end

               CrPriods_Count(CrPriods_Index(j))=CrPriods_Count(CrPriods_Index(j)) + 1;

           else

                if (Ali<=NW(1))

                   CR=0.05+0.1*rand(1,1);

                   CrPriods_Index(j)=1;

               

                else

                   CR=0.9+0.1*rand(1,1);

                   CrPriods_Index(j)=2;    

               end

               CrPriods_Count(CrPriods_Index(j))=CrPriods_Count(CrPriods_Index(j)) + 1;

           end


           %%%%%%%%%%%%%%%%%END OF CR RULE%%%%%%%%%%%%%%%%%%%%%%%%%%%

               indexs_Archive = [];

               while(size(indexs_Archive) < 3)

                   index=RouletteWheelSelection(1./Archive_mem_ranks_F);

                   if ismember(index,indexs_Archive) == 0

                       indexs_Archive = [indexs_Archive index];

                   end

               end

               

               indexs_Pop = [];

               while(size(indexs_Pop) < 3)

                   index=RouletteWheelSelection(1./allRank);

                   if ismember(index,indexs_Pop) == 0

                       indexs_Pop = [indexs_Pop index];

                   end

               end

               

               r(1) = indexs_Pop(1);

               r(2) = indexs_Archive(1);

               r(3) = indexs_Pop(2);


               F=0.1+0.9*rand(1,1);

               Archive_Pop = Archive_X';

               Rnd = floor(rand()*D) + 1;

               for i = 1:D

                   if ( rand()<CR ) || ( Rnd==i )

                       X(i)=Pop(i,r(3))+F*(Pop(i,r(1))-(Archive_Pop(i,r(2))));

                   else

                       %X(i) = Pop(i,j);

                       X(i) = bestSolution(i);

                   end

               end

       % end%end of All cases

       % verify boundary constraints

       % verify boundary constraints

       for i = 1:D

           if (X(i)<L(i))||(X(i)>H(i))

               X(i) = L(i) + (H(i)-L(i))*rand();

           end

       end

       % select the best individual

       % between trial and current ones

       % calculate fitness of trial individual  

       XPf=ObjectiveFunction(X');

       % if trial is better or equal than current

       % CRRatio(find(A==CRs(j)))=CRRatio(find(A==CRs(j)))+1-(min(f,Fit(j))/max(f,Fit(j)));

       Sr (CrPriods_Index(j)) = Sr(CrPriods_Index(j)) +1;


       Pop(:,j) = X; % replace current by trial

       Fit(j,:) = XPf ;

       % if trial is better than the best

   end

   CrPriods_Count(CrPriods_Count==0)=0.0001;

   Sr=Sr./CrPriods_Count;

%%%%%%%%%%%%%%%%USING SR ONLY%%%%%%%%%%5    

   if(sum(Sr)==0)

       W=[1/2 1/2];

   else

       W=Sr/sum(Sr);

   end

   

%%%%%%%%%%%%%%%%%%%%%%%%%%5

   NW=(NW*(g-1)+W)/g;

   Cr_All=Cr_All+CrPriods_Count;

   display(['At the iteration ', num2str(g), ' best fitness ', num2str(bestFitness)]);

   

end

end

⛄ 运行结果

⛄ 参考文献

KAHRAMAN, H. T., AKBEL, M., DUMAN, S., KATI, M., SAYAN, H. H. (2022). Unified Space Approach-based Dynamic Switched Crowding (DSC): A New Method for Designing Pareto-based Multi/Many-Objective Algorithms, Swarm and Evolutionary Computation, 101196, https://doi.org/10.1016/j.swevo.2022.101196

⛄ Matlab代码关注

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料



相关文章
|
7天前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
|
7天前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
87 14
|
7天前
|
机器学习/深度学习 算法
【概率Copula分类器】实现d维阿基米德Copula相关的函数、HACs相关的函数研究(Matlab代码实现)
【概率Copula分类器】实现d维阿基米德Copula相关的函数、HACs相关的函数研究(Matlab代码实现)
|
7天前
|
机器学习/深度学习 传感器 算法
【裂纹检测】检测和标记图片中的裂缝(Matlab代码实现)
【裂纹检测】检测和标记图片中的裂缝(Matlab代码实现)
|
7天前
|
传感器 机器学习/深度学习 编解码
【电缆】中压电缆局部放电的传输模型研究(Matlab代码实现)
【电缆】中压电缆局部放电的传输模型研究(Matlab代码实现)
|
9天前
|
算法 计算机视觉
【MPDR & SMI】失配广义夹角随输入信噪比变化趋势、输出信干噪比随输入信噪比变化趋势研究(Matlab代码实现)
【MPDR & SMI】失配广义夹角随输入信噪比变化趋势、输出信干噪比随输入信噪比变化趋势研究(Matlab代码实现)
|
9天前
|
编解码 人工智能 算法
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)
|
9天前
|
机器学习/深度学习 编解码 并行计算
【改进引导滤波器】各向异性引导滤波器,利用加权平均来实现最大扩散,同时保持图像中的强边缘,实现强各向异性滤波,同时保持原始引导滤波器的低低计算成本(Matlab代码实现)
【改进引导滤波器】各向异性引导滤波器,利用加权平均来实现最大扩散,同时保持图像中的强边缘,实现强各向异性滤波,同时保持原始引导滤波器的低低计算成本(Matlab代码实现)
|
9天前
|
机器学习/深度学习 传感器 边缘计算
【故障诊断】基于时滞反馈随机共振的增强型旋转电机故障诊断(Matlab代码实现)
【故障诊断】基于时滞反馈随机共振的增强型旋转电机故障诊断(Matlab代码实现)
|
9天前
|
传感器 机器学习/深度学习 算法
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)

热门文章

最新文章