鲸鱼算法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';以此类推。

  • 8
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的鲸鱼算法MATLAB 程序示例: ```matlab % 初始化 pop_size = 50; % 种群大小 max_iter = 100; % 最大迭代次数 dim = 30; % 变量维度 % 鲸鱼算法参数 a = 2; % 振幅缩放因子 b = 0.5; % 搜索范围缩放因子 A = 2*a*rand(pop_size,dim)-a; % 初始化鲸鱼位置 C = 2*rand(pop_size,dim); % 初始化鲸鱼运动速度 x_best = zeros(1,dim); % 初始化全局最佳解 f_best = Inf; % 初始化全局最优适应度 % 开始迭代 for t = 1:max_iter % 计算适应度值 f = fitness(A); % 更新全局最优解 [f_min, idx] = min(f); if f_min < f_best f_best = f_min; x_best = A(idx,:); end % 更新鲸鱼位置和速度 for i = 1:pop_size r1 = rand(); % 随机数1 r2 = rand(); % 随机数2 A1 = b*r1*norm(x_best-A(i,:)); % 第一部分计算 A2 = 2*r2; % 第二部分计算 D = abs(C(i,:).*x_best-A(i,:)); % 第三部分计算 C1 = C(i,:); % 备份速度 C(i,:) = (C(i,:).*rand(1,dim)+A1)./D; % 更新速度 A(i,:) = A(i,:) + (C(i,:)+C1)/2; % 更新位置 end end % 输出结果 disp(['最优解:', num2str(x_best)]); disp(['最优适应度值:', num2str(f_best)]); % 适应度函数 function f = fitness(x) f = sum(x.^2,2); end ``` 在该示例中,我们使用了鲸鱼算法来寻找函数 $f(x) = \sum_{i=1}^{30} x_i^2$ 的最小值。程序中的变量 `pop_size`、`max_iter` 和 `dim` 分别表示种群大小、最大迭代次数和变量维度。`a` 和 `b` 是鲸鱼算法的参数,`A` 和 `C` 分别表示鲸鱼的位置和速度。在每次迭代中,我们计算适应度值 `f`,更新全局最优解 `x_best` 和 `f_best`,然后根据鲸鱼算法的公式更新鲸鱼的位置和速度。最终,我们输出找到的最优解和最优适应度值。 请注意,这只是一个非常简单的示例,可能需要进行更多的调整和优化才能适用于解决更复杂的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ferry88

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

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

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

打赏作者

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

抵扣说明:

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

余额充值