【matlab】【2024年最新多目标优化算法】【多目标指数分布优化器】【MOEDO】【附代码和论文】

        指数分布优化器(EDO)代表了一种启发式方法,利用指数分布理论来识别复杂优化挑战的全局解决方案。本研究扩展了江户的适用性通过引入多目标版本,多目标指数分布优化器(MOEDO),增强与精英non-dominated排序和拥挤距离机制。在MOEDO中集成了信息反馈机制(IFM),旨在平衡勘探和开发,从而提高收敛性并减轻局部最优的停滞,这是传统方法的一个显着局限性。我们的研究表明MOEDO优于著名的算法,如MOMPA, NSGA-II, MOAOA, MOEA/D和MOGNDO。在72.58%的测试场景中,利用基准测试集合(DTLZ、ZDT和各种约束问题)和五个实际工程设计挑战的性能指标,如GD、IGD、HV、SP、SD和RT,这一点很明显。Wilcoxon秩和检验(WRST)进一步证实了MOEDO是一种有竞争力的多目标优化算法,特别是在现有方法难以平衡多样性和收敛效率的情况下。MOEDO的强大性能,即使在复杂的实际应用中,也强调了其作为优化领域创新解决方案的潜力。

 代码地址(非免费):https://download.csdn.net/download/wq6qeg88/89016535

 

 

 Multi-objective exponential distribution optimizer (MOEDO) :

clc;
clear;
close all;
% Problem Configuration
ObjectiveFunction = @ZDT1; % Objective function handle
dim = 2; % Number of dimensions
ub = ones(1, dim); % Upper bounds (assuming 1 for all dimensions)
lb = zeros(1, dim); % Lower bounds (assuming 0 for all dimensions)
obj_no = 2; % Number of objectives
% Algorithm Parameters
max_iter = 100; % Maximum number of iterations
ArchiveMaxSize = 100; % Maximum size of the archive
Archive_X = zeros(ArchiveMaxSize, dim); % Initialize archive solutions
Archive_F = ones(ArchiveMaxSize, obj_no) * inf; % Initialize archive fitnesses
Archive_member_no = 0; % Number of members in the archive
Xwinners = initialization(ArchiveMaxSize, dim, ub, lb); % Population initialization
Fitness = zeros(ArchiveMaxSize, obj_no); % obj_no is the number of objectives, which is 2
for i = 1:ArchiveMaxSize
    Fitness(i, :) = ObjectiveFunction(Xwinners(i,:));
end
Memoryless=Xwinners;
% Main loop for MOEDO algorithm
for iter = 1:max_iter
    V=zeros(ArchiveMaxSize,dim);
    [Fitness,sorted_indices]=sort(Fitness);
    temp_Xwinners=Xwinners;
    Xwinners=temp_Xwinners(sorted_indices,:);
    d=(1-iter/max_iter);  
    f= 2*rand-1; 
    a=f^10;      
    b=f^5;       
    c=d*f;       
    sum=(Xwinners(1,:)+Xwinners(2,:)+Xwinners(3,:));
    X_guide=(sum/3);  
    for  i=1:ArchiveMaxSize
        alpha=rand;
        if alpha<0.5
            if Memoryless(i,:)==Xwinners(i,:)
                Mu=(X_guide+Memoryless(i,:))/2.0;   
                ExP_rate=1./Mu;    
                variance=1./ExP_rate.^2;   
                V(i,:)=a.*(Memoryless(i,:)-variance)+b.*X_guide;   
            else
                Mu=(X_guide+Memoryless(i,:))/2.0;    
                ExP_rate=1./Mu;   
                variance=1./ExP_rate.^2;   
                phi=rand;
                V(i,:)=b.*(Memoryless(i,:)-variance)+log (phi).*Xwinners(i,:);
            end
        else
            M=mean(Xwinners);
            s=randperm(ArchiveMaxSize);
            D1=M-Xwinners(s(1),:); 
            D2=M-Xwinners(s(2),:); 
            Z1=M-D1+D2; 
            Z2=M-D2+D1; 
            V(i,:)=(Xwinners(i,:)+(c.*Z1+(1-c).*Z2)-M); 
        end
        F_UB=V(i,:)>ub;
        F_LB=V(i,:)<lb;
        V(i,:)=(V(i,:).*(~(F_UB+F_LB)))+ub.*F_UB+lb.*F_LB;
    end
    for i=1:ArchiveMaxSize
        for j=1:dim
            Memoryless(i,j)=V(i,j);
        end
    end
    V_Fitness = zeros(ArchiveMaxSize, obj_no); % obj_no is the number of objectives
for i = 1:ArchiveMaxSize
    V_Fitness(i, :) = ObjectiveFunction(V(i,:));
        Xwinners(i, :) = V(i, :);
        Fitness(i, :) = V_Fitness(i, :);
end
    % Non-dominated Sorting and Crowding Distance Calculation
    Combined_X = [Xwinners; Archive_X(1:Archive_member_no, :)];
    Combined_F = [V_Fitness; Archive_F(1:Archive_member_no, :)];
    [fronts, ~] = NonDominatedSorting(Combined_F);
    crowdingDistances = CrowdingDistance(Combined_F, fronts);
    % Update Archive using NSGA-II strategies
    [Archive_X, Archive_F, Archive_member_no] = UpdateArchiveUsingNSGAII(fronts, crowdingDistances, Combined_X, Combined_F, ArchiveMaxSize);
    % Display iteration information
    disp(['At iteration ', num2str(iter), ', MOEDO has ', num2str(Archive_member_no), ' non-dominated solutions in the archive']);
end
% Plotting the results
figure;
Draw_ZDT1(); % Function to draw the true Pareto Front (assuming it is defined)
hold on;
plot(Archive_F(:, 1), Archive_F(:, 2), 'ro', 'MarkerSize', 8, 'markerfacecolor', 'k');
legend('True PF', 'Obtained PF');
title('MOEDO');
set(gcf, 'pos', [403 466 230 200]); % Setting the figure position and size

 代码地址(非免费):https://download.csdn.net/download/wq6qeg88/89016535

  • 17
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

资源存储库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值