鲸鱼算法WOA
鲸鱼算法(WOA)的原理来源于对座头鲸捕食行为的模型化。众所周知,鲸鱼是所知的最大的哺乳动物。本文研究的群仿生对象—座头鲸虽不是世界上最大的鲸类,由于其捕食的行为有一定的特点,鲸鱼算法在2016年被提出。
座头鲸的捕食方法通常可以概括为两种行为。第一种是冲刺式的进食,当座头鲸发现猎物之后,会直接朝猎物冲过去,张嘴直接把猎物吞掉。第二种方式是在距离海面15米的位置向上做类似于螺旋式的姿势上升,在上升的同时吐出大小不同的气泡,为了使所有的气泡同一时间到达海面。通过这种气泡的包围,把所要捕获的猎物圈在其中,当座头鲸到达海面时再一口吞掉。
本章就根据座头鲸这两种捕食行为细化为数学模型,详细的介绍基本的鲸鱼算法。
WOA的数学模型
根据鲸鱼捕食的两种现象,仿生出的鲸鱼算法也分为两种情况:随机搜索和气泡网攻击。由于鲸鱼在气泡网攻击时的上升轨道比较像螺旋形状,所以在气泡网攻击中还包含着螺旋式位置更新和缩小包围距离两种模式。气泡网攻击的行为如下图所示:
螺旋位置更新
缩小包围
随机搜索
WOA的具体步骤
WOA流程图如下:
WOA算法就介绍到这里 ~ ~
柔性作业车间调度
关于柔性作业车间调度问题,可以移步我的其他博文:麻雀算法SSA解决柔性作业车间调度问题FJSP
WOA求解FJSP问题
算例
Brandimarte 测试集
部分代码
如需完整MATLAB代码,可私戳我哈~ ~
main.m
clear all; clc;
%% 加载mk标准算例
dictPath = 'Brandimarte_Data';
dataName = 'Mk02.fjs';
dataRead(dictPath, dataName);
%% 载入数据
fileName = split(dataName,'.');
fileName = [fileName{1},'.mat'];
eval(['load ', fileName]);
%% 鲸鱼优化算法WOA
[Leader_score, Leader_pos, Convergence_curve] = WOA(machineNum, jobNum, jobInfo, operaNumVec, candidateMachine);
%% 画出迭代曲线
titleName = split(dataName,'.');
titleName = titleName{1};
figure(1)
plot(Convergence_curve, 'r-', 'LineWidth', 1.5)
title('迭代曲线');
xlabel('迭代次数');
ylabel('最大完工时间');
box on; grid on
%% 画出Gantte图
[~, ~, machineTable] = fitness(Leader_pos, machineNum, jobNum, jobInfo, operaNumVec, candidateMachine);
figure(2)
gantt_chart(machineTable);
算法结果
运行
迭代曲线
甘特图
写在最后
未经本人允许,严禁盗图、盗文、搬运!如需完整MATLAB代码,私戳博主哈~ ~ 亦可咨询博主~ ~!