【车间调度】基于matlab改进的鲸鱼算法求解双目标柔性车间调度问题【含Matlab源码 026期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞💞💞💞💞💞💥💥💥💥💥💥
在这里插入图片描述
✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进;
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式

⛳️座右铭:行百里者,半于九十。
更多Matlab车间调度仿真内容点击👇
付费专栏Matlab车间调度(初级版)
Matlab车间调度 (进阶版)

⛳️关注CSDN海神之光,更多资源等你来!!

⛄一、简介

基于matlab改进的鲸鱼算法求解双目标柔性车间调度问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄二、部分源代码

clear;
clc;

dbstop if error;
M=7;
RouN=[4 3 3 2 5 4];
Jm={[2 4 6],[1 2 4 7],[1 3 5 6],[1 3 5 7],0;
[2 4 6],[1 3 5],[1 2 4 5 6 7],0,0;
[1 4],[1 3 4 6],[2 3 7],0,0;
[5 7],[4 5 6],0,0,0;
[1 3 5],[2 3 6],[4 5 7],[1 2 5 7],[1 4 6];
[1 2 3 4 6 7],[3 5],[1 4 6],[2 3 7],0};

T ={[16 16 15],[17 18 14 16],[20 20 18 13],[20 17 13 19],0;
[17 18 14],[17 18 22],[19 17 21 19 17 19],0,0;
[18 20],[18 17 23 19],[22 20 17],0,0;
[16 18],[25 20 21],0,0,0;
[19 18 16],[12 9 10],[10 13 8],[13 16 14 12],[20 19 22];
[10 9 11 9 9 10],[17 11],[14 10 9],[13 11 10],0};
function [PVal,Cost]=caltime(P,M1,T,Jm,M,CO,s,l,dj,RouN)

PNumber=size(Jm,1);
WNumber=size(P,2);
MT=cell(M,1);
TPE=zeros(1,PNumber);
PVal=zeros(2,WNumber);
Cost=0;

for i=1:M
MT{i,1}=[0;1000000000];
end

for i=1:WNumber
val=P(1,i);
a=mod(val,100);
b=(val-a)/100;
c=sum(RouN(1:b-1))+a;
m_number=M1(1,c);
m=Jm{b,a}(m_number);
t=T{b,a}(m_number);
co=CO{b,a}(m_number);
Cost=cotl+t*s;%如果是这样算根本没有贪婪解码的必要,可以加上待机成本

k=size(MT{m,1},2);



for j=1:k
    t1=MT{m,1}(2,j)-MT{m,1}(1,j);%t1的数值计算表示MT的第m个cell单元中的j列的第二行减去第一行的值
    %其含义表示机器的空闲时间。上一行的值表示上一道工序的完成时间,下一行的值表示下一道工序的开始时间
    t2=MT{m,1}(2,j)-TPE(1,b); %t2数值计算含义是表示MT的第m个cell单元中的j列的第二行减去某工件上一道工序的完成时间
    %其含义表示机器进行下一道工序的开始时间和b工件上一道工序的完成时间的差值用于判断是否在机器m上加工b工件下一道工序的时间
    if  t<=min(t1,t2) %两者综合判断,取最小值,用于判断某工序加工时间是否能插入,先加工,如果进入if表示可以插入
        %在可以插入的情况下
        PVal(1,i)=max(TPE(1,b),MT{m,1}(1,j));%PVal第一行放的是工序的开始加工时间,取的是某工件上一道工序的完成时间
        %和机器上一道工序的完成时间中的最大值
        PVal(2,i)=PVal(1,i)+t;%PVal第二行放的是工序的加工完成时间,等于上一道重新插入工序的开始加工时间加上机器加工时间
        TPE(1,b)=PVal(2,i);%将工序的加工完成时间存放入相对应工件的工序完成时间中
        
        
        if j<k %可以插入的话,就将插入的值放在第m个cell单元的第二行中,表示工序开始加工的时间,之前的值就相应变成后面的
            MTtemp=MT{m,1}(:,j+1:k);
            MT{m,1}(2,j+1)=MT{m,1}(2,j);
            MT{m,1}(2,j)=PVal(1,i);
            MT{m,1}(1,j+1)=PVal(2,i);
            MT{m,1}=MT{m,1}(:,1:j+1);
            MT{m,1}=[MT{m,1} MTtemp];
        else
            MT{m,1}(2,j+1)=MT{m,1}(2,j);%补充MTcell数组中的列数,并赋值。这个表达式含义就是把第j列的第2行赋值给第j+1列的第二行就是1000000
            MT{m,1}(2,j)=PVal(1,i);%把刚刚在这个机器上完成的工序开始时间赋给第j列的第2行
            MT{m,1}(1,j+1)=PVal(2,i);%把刚刚在这个机器上完成的工序结束时间赋给第j+1列的第1行
            MT{m,1}=MT{m,1}(:,1:j+1);%这个就是将拓宽后的MT的第m个单元重新赋给原来的单元
        end
        break;
    end
end

end

djcost=0;
for q_1=1:M
mt=MT{q_1,1};
for q_2=1:size(mt,2)-1
djtime=MT{m,1}(2,j)-MT{m,1}(1,j);
djcost=djcost+djtime*dj;
end
end

Cost=Cost+djcost;
function [MinVal,P,PVal,MVal]=IWOA(M,Jm,T,CO,RouN)

WNumber=sum(RouN);
NIND=50;
b=1;
Ps=0.5;
Wmax=0.9;
Wmin=0.2;
gen=1;
MAXGEN=50;
r1=0.3;
r2=0.7;
trace=zeros(2,MAXGEN);

%混合种群初始化
%Chrom=zeros(NIND,2WNumber);
MS=initial(NIND,Jm,T,RouN,M);
OS=CSH(MS,M,Jm,T,CO,RouN);
%Chrom(:,1:WNumber)=MS(:😅;
%Chrom(:,WNumber+1,2
WNumber)=OS(:😅;

while gen<=MAXGEN

[PVal1,ObjVCh,P1,MVal1]=cal(OS,MS,M,Jm,T,CO,RouN);
trace(1,gen)=min(ObjVCh);
trace(2,gen)=mean(ObjVCh);

Position=transback(MS,Jm,M,RouN);
PX=ROV(Position,OS,RouN);

[~,Best]=min(ObjVCh);
Xbest=Position(Best(1),:);
for i=1:NIND

    a=(2-(2*gen/MAXGEN))*(1-(gen^3)/(MAXGEN^3));
    A=2*a*r1-a;
    C=2*r2;
    L=2*rand-1;
    
    X=Position(i,:);
    W=Wmax-(Wmax-Wmin)*log(1+gen*1.7183/MAXGEN);
    if rand<Ps
        if abs(A)<1
            D=abs(C*Xbest-X);
            Xt=Xbest-W*A*D;
            Position(i,:)=Xt;
        else
            q=0.3*(1-gen/MAXGEN);
            if rand<q
                [Xmin,~]=min(X);
                [Xmax,~]=max(X);
                Xj=Xmin+rand(Xmax-Xmin);
                Position(i,unidrnd(WNumber))=Xj;
            end
        end
    else
        DD1=abs(Xbest-X);
        Xt=DD1*exp(b*L)*cos(2*pi*L)*W+Xbest;
        Position(i,:)=Xt;
    end
    
end
Position=YH(Position,M);
[MS,OS]=trans(Position,PX,RouN,Jm,M);
[PVal2,ObjV,P2,MVal2]=cal(OS,MS,M,Jm,T,CO,RouN);


if gen==1
    if min(ObjVCh)<min(ObjV)
        Val1=PVal1;
        Val2=P1;
        Val3=MVal1;
        MinVal=min(ObjVCh);
    else
        Val1=PVal2;
        Val2=P2;
        Val3=MVal2;
        MinVal=min(ObjV);
    end
end
if MinVal>trace(1,gen)
    Val1=PVal2;
    Val2=P2;
    Val3=MVal2;
    MinVal=trace(1,gen);
end

gen=gen+1;

end

PVal=Val1;
P=Val2;
MVal=Val3;
clf;
figure(1);

for i=1:WNumber
val=P(1,i);
a=mod(val,100);
b=(val-a)/100;
c=sum(RouN(1:b-1))+a;
m_number=MVal(1,c);
m=Jm{b,a}(m_number);
MaHao=m;
plotRec(PVal(1,i),PVal(2,i),MaHao);
mPoint1=PVal(1,i);
mPoint2=PVal(2,i);
x1=mPoint1;
y1=MaHao-0.5;
x2=mPoint2;
y2=MaHao-0.5;
x3=mPoint2;
y3=MaHao;

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

海神之光

有机会获得赠送范围1份代码

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

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

打赏作者

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

抵扣说明:

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

余额充值