鲸鱼算法WOA解决柔性作业车间调度问题FJSP

鲸鱼算法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代码,私戳博主哈~ ~ 亦可咨询博主~ ~!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值