【matlab】【2024年最新多目标优化算法】【多目标RIME算法】【MORIME】【附代码】

clc;
clear;
close all;
% Problem Configuration
ObjectiveFunction = @ZDT1; % Objective function handle
dim = 5; % 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 = 50; % 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
Best_rime_rate = inf * ones(1, obj_no); % Best rate (fitness) initialization
Best_rime = zeros(dim, 1); % Best solution initialization
Rimepop = initialization(ArchiveMaxSize, dim, ub, lb); % Population initialization
W = 5; % Weight factor in RIME algorithm (specific to MORIME)
% Main loop for MORIME algorithm
for iter = 1:max_iter
    % RimeFactor calculation based on iteration number
    RimeFactor = (rand - 0.5) * 2 * cos((pi * iter / (max_iter / 10))) * (1 - round(iter * W / max_iter) / W);
    E = sqrt(iter / max_iter); % Exploration factor
    % Update Rimepop (population)
    for i = 1:ArchiveMaxSize
        Rime_rates(i, :) = ObjectiveFunction(Rimepop(i, :));
        for j = 1:dim
            r1 = rand();
            if r1 < E
                % Update position based on Rime strategy
                Rimepop(i, j) = Best_rime(j) + RimeFactor * ((ub(j) - lb(j)) * rand + lb(j));
            end
            normalized_rime_rates = normr(Rime_rates);
            r2 = rand();
            if r2 < normalized_rime_rates(i)
                Rimepop(i, j) = Best_rime(j); % Correctly update Rimepop based on Best_rime
            end
        end
        % Boundary Check to keep solutions within bounds
        Flag4ub = Rimepop(i, :) > ub;
        Flag4lb = Rimepop(i, :) < lb;
        Rimepop(i, :) = (Rimepop(i, :) .* (~(Flag4ub + Flag4lb))) + ub .* Flag4ub + lb .* Flag4lb;
    end

    % Calculate Fitness for each individual in Rimepop
    Rime_rates = zeros(ArchiveMaxSize, obj_no);
    for i = 1:ArchiveMaxSize
        Rime_rates(i, :) = ObjectiveFunction(Rimepop(i, :));
    end

    % Non-dominated Sorting and Crowding Distance Calculation
    Combined_X = [Rimepop; Archive_X(1:Archive_member_no, :)];
    Combined_F = [Rime_rates; 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), ', MORIME 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('MORIME');
set(gcf, 'pos', [403 466 230 200]); % Setting the figure position and size

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

资源存储库

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

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

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

打赏作者

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

抵扣说明:

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

余额充值