0
点赞
收藏
分享

微信扫一扫

【智能优化算法】基于多策略协同多目标萤火虫算法求解多目标优化问题含Matlab源码

1 简介

现实中的多目标优化问题不断增多且日益复杂,需要不断发展新型启发式算法应对挑战.提出一种多策略协同的多目标萤火虫算法MOFA-MCS.该算法采用均匀化与随机化相结合的方法产生初始种群;利用档案集中的精英解个体指导萤火虫移动;并在移动的过程施加Lévy flights随机扰动;最后,利用ε-三点最短路径策略维护档案解群的多样性.MOFA-MCS算法与其他6种经典的多目标进化算法一同在12个基准的多目标测试问题上进行实验,结果表明所提算法在收敛性,多样性方面总体上具有显著的性能优势.

2 部分代码

function MOFA_MOCS_ZDT1    %多策略协同多目标萤火虫算法    %Programmed by Kevin Kong    %测试问题ZDT-1    clc;    global NP N T_MAX gamma beta0 epsilon M V    NP = 100;%种群大小    T_MAX = 500;%最大迭代次数    N = 100;%外部档案规模    gamma = 1;%光吸收系数    beta0 = 1;%最大吸引力    M = 2;%目标函数个数    V = 30;%决策变量个数    t = 1;%迭代次数    epsilon = get_epsilon();    %变量范围在[0,1]    min_range = zeros(1,V);    max_range = ones(1,V);    pop = init(NP,M,V,min_range,max_range);%初始化种群    Arc = pop(non_domination_sort(pop,M,V),:);%非支配排序    while(t <= T_MAX)        plot(pop(:,V+1),pop(:,V+2),'*');        str = sprintf('第%d代',t);        title(str);        drawnow;        offspring = pop;%子代        for i = 1:NP            for j = 1:NP                domination = get_domination(pop(i,:),pop(j,:),M,V);                if(domination ~= -1)                    %i和j之间存在支配关系                    g = Arc(1+fix((size(Arc,1)-1)*rand(1)),:);%从Arc里随机选取一个个体作为g*                    if(domination == 0)                        %i支配j                        offspring(j,1:V) = firefly_move(pop(i,:),pop(j,:),V,beta0,gamma,true,g);                        offspring(j,1:V) = outbound(offspring(j,1:V),V,min_range,max_range);                    else                        %j支配i                        offspring(i,1:V) = firefly_move(pop(j,:),pop(i,:),V,beta0,gamma,true,g);                        offspring(i,1:V) = outbound(offspring(i,1:V),V,min_range,max_range);                    end                else                    %i和j之间不存在支配关系                    g = Arc(1+fix((size(Arc,1)-1)*rand(1)),:);%从Arc里随机选取一个个体作为g*                    res = firefly_move(pop(i,:),pop(j,:),V,beta0,gamma,false,g);                    offspring(i,1:V) = res(1,:);                    offspring(i,1:V) = outbound(offspring(i,1:V),V,min_range,max_range);                    offspring(j,1:V) = res(2,:);                    offspring(j,1:V) = outbound(offspring(j,1:V),V,min_range,max_range);                end            end        end        pop = offspring;%更新萤火虫位置        for i = 1:N            pop(i,V+1:V+M) = evaluate_objective(pop(i,:));%评估萤火虫个体        end        Arc = update_Arc(pop,Arc,N,M,V,epsilon);%利用ε-三点最短路径方法维持Arc档案        t = t + 1;    endend%% function f = init(N,M,V,min,max)    %初始化种群,随机生成个体并计算其适度值    %N:种群大小    %M:目标函数数量    %V:决策变量数    %min:变量范围下限    %max:变量范围上限    f = [];%存放个体和目标函数值,1:V是决策变量,V+1:V+2是目标函数值    for j = 1:V        delta(j) = (max(j) - min(j))/N;%将决策变量x(j)的区间均匀划分成N等分;        lamda = min(j):delta(j):max(j);%得到N个子区间        for i = 1:N            %从N个子区间中随机选择一个            [~,n] = size(lamda);%获得子区间个数n            rand_n = 1 + fix((n-2)*rand(1));%随机位置            min_range = lamda(rand_n);%获得子区间的下限            max_range = lamda(rand_n+1);%获得子区间的上限            f(i,j) = min_range + (max_range - min_range)*rand(1);%随机生成            lamda(rand_n) = [];%删除该子区间        end    end    %计算个体的适度值    for i = 1:N        f(i,V+1:V+M) = evaluate_objective(f(i,:));%计算目标函数值    endend%%function f = evaluate_objective(x)    %根据目标函数计算适度值,测试方法:ZDT-1    global V     f = [];    f(1) = x(1);%目标函数1    g = 1;    g_tmp = 0;    for i = 2:V        g_tmp = g_tmp + x(i);    end    g = g + 9*g_tmp/(V-1);    f(2) = g*(1-sqrt(x(1)/g));%目标函数2end%%

3 仿真结果

​4 参考文献

[1]谢承旺, 张飞龙, 陆建波,等. 一种多策略协同的多目标萤火虫算法[J]. 电子学报, 2019, 47(11):9.

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

部分理论引用网络文献,若有侵权联系博主删除。

举报

相关推荐

0 条评论