鲸鱼算法matlab代码详解(一)

主函数

clear all 
clc

SearchAgents_no=30; %此处为搜索代理的数量,也就是种群的数量

Function_name='F1'; %此处为调用目标函数的信息编号

Max_iteration=500; %迭代次数为500次
[lb,ub,dim,fobj]=Get_Functions_details(Function_name);%此处为提取目标函数的信息,dim表示变量维数,变量的数量,fobj为目标函数,lb,ub为变量的上下限

[Best_score,Best_pos,WOA_cg_curve]=WOA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);%此处为调用鲸鱼算法的核心程序,也就是WOA函数

subplot(1,2,1);%此处为显示的图片格式,意思是图片排列成一行两列,这是第一个
func_plot(Function_name);%选择将哪个目标函数画出来
title('Parameter space')%图片的标题
xlabel('x_1');%图片的x方向坐标
ylabel('x_2');%图片的y方向坐标
zlabel([Function_name,'( x_1 , x_2 )'])%图片的z方向坐标


subplot(1,2,2);%此处为显示的图片格式,意思是图片排列成一行两列,这是第二个
semilogy(WOA_cg_curve,'Color','r')%将显示迭代曲线图
title('Objective space')%图片的标题
xlabel('Iteration');%图片的x方向坐标
ylabel('Best score obtained so far');%图片的y方向坐标

display(['The best solution obtained by WOA is : ', num2str(Best_pos)]);%显示最优设计变量值
display(['The best optimal value of the objective funciton found by WOA is : ', num2str(Best_score)]);%显示最优目标函数值
 

Get_Functions_details函数

function [lb,ub,dim,fobj] = Get_Functions_details(F)
switch F
    case 'F1'
        fobj = @F1;
        lb=-100;
        ub=100;
        dim=30;

  case 'F2'
        fobj = @F2;
        lb=-10;
        ub=10;
        dim=30;

function o = F1(x)
o=sum(x.^2);
end

% F2

function o = F2(x)
o=sum(abs(x))+prod(abs(x));
end

在主函数中,

Function_name='F1';

[lb,ub,dim,fobj]=Get_Functions_details(Function_name);

此处就是调用F1所代表的函数的所有信息,如果想调用下面的F2,就写成Function_name='F2';以此类推。

猜你喜欢

转载自blog.csdn.net/Ferry88/article/details/126341551