1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【车间调度】基于matlab改进的鲸鱼算法求解双目标柔性车间调度问题【含Matlab源码 026期】

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

时间:2022-08-11 04:11:18

相关推荐

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

一、简介

二、部分源代码

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:MMT{i,1}=[0;1000000000];endfor i=1:WNumberval=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=co*t*l+t*s;%如果是这样算根本没有贪婪解码的必要,可以加上待机成本k=size(MT{m,1},2);for j=1:kt1=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];elseMT{m,1}(2,j+1)=MT{m,1}(2,j);%补充MTcell数组中的列数,并赋值。这个表达式含义就是把第j列的第2行赋值给第j+1列的第二行就是1000000MT{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个单元重新赋给原来的单元endbreak;endendenddjcost=0;for q_1=1:Mmt=MT{q_1,1};for q_2=1:size(mt,2)-1djtime=MT{m,1}(2,j)-MT{m,1}(1,j);djcost=djcost+djtime*dj;endendCost=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,2*WNumber);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:NINDa=(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<Psif abs(A)<1D=abs(C*Xbest-X);Xt=Xbest-W*A*D;Position(i,:)=Xt;elseq=0.3*(1-gen/MAXGEN);if rand<q[Xmin,~]=min(X);[Xmax,~]=max(X);Xj=Xmin+rand(Xmax-Xmin);Position(i,unidrnd(WNumber))=Xj;endendelseDD1=abs(Xbest-X);Xt=DD1*exp(b*L)*cos(2*pi*L)*W+Xbest;Position(i,:)=Xt;endendPosition=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==1if min(ObjVCh)<min(ObjV)Val1=PVal1;Val2=P1;Val3=MVal1;MinVal=min(ObjVCh);elseVal1=PVal2;Val2=P2;Val3=MVal2;MinVal=min(ObjV);endendif MinVal>trace(1,gen)Val1=PVal2;Val2=P2;Val3=MVal2;MinVal=trace(1,gen);endgen=gen+1;endPVal=Val1;P=Val2;MVal=Val3;clf;figure(1);for i=1:WNumberval=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版本

a

2 参考文献

[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,.

[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。