💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞💞💞💞💞💞💥💥💥💥💥💥
✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进;
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。
更多Matlab车间调度仿真内容点击👇
①付费专栏Matlab车间调度(初级版)
②Matlab车间调度 (进阶版)
⛳️关注CSDN海神之光,更多资源等你来!!
⛄一、简介
⛄二、部分源代码
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,2WNumber)=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 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合