💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞💞💞💞💞💞💥💥💥💥💥💥
✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进;
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。
更多Matlab车间调度仿真内容点击👇
①付费专栏Matlab车间调度(初级版)
②Matlab车间调度 (进阶版)
⛳️关注优快云海神之光,更多资源等你来!!
⛄一、车间调度简介
1 车间调度定义
车间调度是指根据产品制造的合理需求分配加工车间顺序,从而达到合理利用产品制造资源、提高企业经济效益的目的。车间调度问题从数学上可以描述为有n个待加工的零件要在m台机器上加工。问题需要满足的条件包括每个零件的各道工序使用每台机器不多于1次,每个零件都按照一定的顺序进行加工。
2 传统作业车间调度
传统作业车间带调度实例
有若干工件,每个工件有若干工序,有多个加工机器,但是每道工序只能在一台机器上加工。对应到上面表格中的实例就是,两个工件,工件J1有三道工序,工序Q11只能在M3上加工,加工时间是5小时。
约束是对于一个工件来说,工序的相对顺序不能变。O11->O12->O13。每时刻,每个工件只能在一台机器上加工;每个机器上只能有一个工件。
调度的任务则是安排出工序的加工顺序,加工顺序确定了,因为每道工序只有一台机器可用,加工的机器也就确定了。
调度的目的是总的完工时间最短(也可以是其他目标)。举个例子,比如确定了O21->O22->O11->O23->O12->O13的加工顺序之后,我们就可以根据加工机器的约束,计算出总的加工时间。
M2加工O21消耗6小时,工件J2当前加工时间6小时。
M1加工O22消耗9小时,工件J2当前加工时间6+9=15小时。
M3加工O11消耗5小时,工件J1当前加工时间5小时。
M4加工O23消耗7小时,工件J2加工时间15+7=22小时。
M1加工O12消耗11小时,但是要等M1加工完O22之后才开始加工O12,所以工件J1的当前加工时间为max(5,9)+11=20小时。
M5加工O13消耗8小时,工件J2加工时间20+8=28小时。
总的完工时间就是max(22,28)=28小时。
2 柔性作业车间调度
柔性作业车间带调度实例(参考自高亮老师论文
《改进遗传算法求解柔性作业车间调度问题》——机械工程学报)
相比于传统作业车间调度,柔性作业车间调度放宽了对加工机器的约束,更符合现实生产情况,每个工序可选加工机器变成了多个,可以由多个加工机器中的一个加工。比如上表中的实例,J1的O12工序可以选择M2和M4加工,加工时间分别是8小时和4小时,但是并不一定选择M4加工,最后得出来的总的完工时间就更短,所以,需要调度算法求解优化。
相比于传统作业车间,柔性车间作业调度的调度任务不仅要确定工序的加工顺序,而且需要确定每道工序的机器分配。比如,确定了O21->O22->O11->O23->O12->O13的加工顺序,我们并不能相应工序的加工机器,所以还应该确定对应的[M1、M3、M5]->[M1、M2、M3]->[M1、M2、M3、M4、M5]->[M2、M3、M4、M5]->[M2、M4]->[M1、M3、M4、M5]的机器组合。调度的目的还是总的完工时间最短(也可以是其他目标,比如机器最大负荷最短、总的机器负荷最短)
⛄二、部分源代码
clc
clear
global tau num_jq num_gongxu num_gongjian
num_jq=6;
num_gongjian=4;
num_gongxu=[3,3,3,3];
tau=[2,3,4,0,0,0;
0,3,0,2,4,0;
1,4,5,0,0,0;
3,0,5,0,2,0;
4,3,0,0,6,0;
0,0,4,0,7,11;
5,6,0,0,0,0;
0,4,0,3,5,0;
0,0,13,0,9,12;
9,0,7,9,0,0;
0,6,0,4,0,5;
1,0,3,0,0,3];
popsize= 40;
maxgen =10;
proc = 0.85;
pmut = 0.012;
pop1=zeros(popsize,sum(num_gongxu));
pop2=zeros(popsize,sum(num_gongxu));
tic;
for i=1:popsize
pop_lin=[];
for j=1:num_gongjian
pop_lin=[pop_lin,jones(1,num_gongxu(j))];
end
[~,index]=sort(randperm(length(pop_lin)));
pop1(i,:)=pop_lin(index);
pop2(i,:)=randi(num_jq,1,length(pop_lin));
pop2(i,:)=chuli(pop1(i,:),pop2(i,:));
end
fissness=1000ones(1,maxgen);
x1_best=pop1(1,:);
x2_best=pop2(1,:);
for gen=1:maxgen
gen
for i=1:popsize
fitness(i)=diaodu_fun(pop1(i,:),pop2(i,:));
end
[min_fissness,loation]=min(fitness);
if min_fissness<min(fissness)
fissness(gen)=min_fissness;
x1_best=pop1(loation(1)😅;
x2_best=pop2(loation(1)😅;
else
fissness(gen)=fissness(gen-1);
end
fmax=max(fitness);
fs=popsize*fmax-sum(fitness);
fit=(fmax-fitness)/fs;% Ӧ
q=zeros(1,popsize);
q(1)=fit(1);
for i=2:popsize
q(i)=q(i-1)+fit(i);% ۼӸ Ӧ γɶ
end
[pop1,pop2]=select(pop1,pop2,q,popsize);% ʸ
for i=1:popsize/2
if proc>rand()
pop11=pop1(i,:);pop12=pop1(i+popsize/2,:);
pop21=pop2(i,:);pop22=pop2(i+popsize/2,:);
[pop11,pop12]=intercross(pop11,pop12,1);%
[pop21,pop22]=intercross(pop21,pop22,0);
pop21=chuli(pop11,pop21);
pop22=chuli(pop12,pop22);
pop1(i,:)=pop11;pop1(i+popsize/2,:)=pop12;
pop2(i,:)=pop21;pop2(i+popsize/2,:)=pop22;
end
end
[pop1,pop2]=mutation(pop1,pop2,pmut);%
for i=1:popsize
pop2(i,:)=chuli(pop1(i,:),pop2(i,:));
end
end
minf=fissness(gen);
for i=1:popsize
fval=diaodu_fun(pop1(i,:),pop2(i,:)); % ĺ ֵ
if fval<minf % ŵ㼰 ֵ õ Ⱥ е
minf=fval;
x1_best=pop1(i,:);
x2_best=pop2(i,:);
end
end
run_time=toc;
table=re_fun(x1_best,x2_best);
disp([’ ‘,num2str(maxgen),’ ֳ Ϻ Ⱥ ѡ Ⱦɫ Ϊ ‘]);
disp(x1_best);
disp(x2_best);
%disp(table);
disp(’ ̨ ĵ Ϊ ‘);
s1=[];s2=[];s3=[];s4=[];s5=[];s6=[];
for i=1:12
if x2_best(i)==1
s1=strcat(s1,num2str(x1_best(i)));
s1=strcat(s1,num2str(table(1,i)));
s1=strcat(s1,’<‘);
s1=strcat(s1,num2str(table(2,table(4,i))));
s1=strcat(s1,’–‘);
s1=strcat(s1,num2str(table(3,table(4,i))));
s1=strcat(s1,’> .‘);
end
if x2_best(i)==2
s2=strcat(s2,num2str(x1_best(i)));
s2=strcat(s2,num2str(table(1,i)));
s2=strcat(s2,’<‘);
s2=strcat(s2,num2str(table(2,table(4,i))));
s2=strcat(s2,’–‘);
s2=strcat(s2,num2str(table(3,table(4,i))));
s2=strcat(s2,’> .‘);
end
if x2_best(i)==3
s3=strcat(s3,num2str(x1_best(i)));
s3=strcat(s3,num2str(table(1,i)));
s3=strcat(s3,’<‘);
s3=strcat(s3,num2str(table(2,table(4,i))));
s3=strcat(s3,’–‘);
s3=strcat(s3,num2str(table(3,table(4,i))));
s3=strcat(s3,’> .‘);
end
if x2_best(i)==4
s4=strcat(s4,num2str(x1_best(i)));
s4=strcat(s4,num2str(table(1,i)));
s4=strcat(s4,’<‘);
s4=strcat(s4,num2str(table(2,table(4,i))));
s4=strcat(s4,’–‘);
s4=strcat(s4,num2str(table(3,table(4,i))));
s4=strcat(s4,’> .‘);
end
if x2_best(i)==5
s5=strcat(s5,num2str(x1_best(i)));
s5=strcat(s5,num2str(table(1,i)));
s5=strcat(s5,’<‘);
s5=strcat(s5,num2str(table(2,table(4,i))));
s5=strcat(s5,’–‘);
s5=strcat(s5,num2str(table(3,table(4,i))));
s5=strcat(s5,’> .‘);
end
if x2_best(i)==6
s6=strcat(s6,num2str(x1_best(i)));
s6=strcat(s6,num2str(table(1,i)));
s6=strcat(s6,’<‘);
s6=strcat(s6,num2str(table(2,table(4,i))));
s6=strcat(s6,’–‘);
s6=strcat(s6,num2str(table(3,table(4,i))));
s6=strcat(s6,’> .‘);
end
end
disp([’ 1 ‘,s1]);
disp([’ 2 ‘,s2]);
disp([’ 3 ‘,s3]);
disp([’ 4 ‘,s4]);
disp([’ 5 ‘,s5]);
disp([’ 6 ‘,s6]);
disp([’ ‘,num2str(maxgen),’ ֳ ϣ ʱ Ϊ’,num2str(run_time),’ ‘]);
plot(fissness)
title(’ ‘);
xlabel(’ ‘);
ylabel(’ ֵ’);
figure(1)
axis([0,20,0,6.9]);%x y ķ Χ
set(gca,‘xtick’,0:2:56) ;%x
set(gca,‘ytick’,0:1:6.5) ;%y
xlabel(’ ӹ ʱ ‘),ylabel(’ ‘);%x y
title([’ Գ ҵ ѵ ȣ 깤ʱ Ϊ ‘,num2str(minf),’ ‘]);%ͼ εı
n_bay_nb=6;%total bays // Ŀ
n_task_nb = 12;%total tasks // Ŀ
table1=table(2:3,table(4,:));
table2=table1(2,:)-table1(1,:);
%x Ӧ ڻ ͼλ õ ʼ x
n_start_time=table1(1,:);%start time of every task //ÿ Ŀ ʼʱ
%length Ӧ ÿ ͼ x ᷽ ij
n_duration_time =table2;%duration time of every task //ÿ ij ʱ
%y Ӧ ڻ ͼλ õ ʼ y
n_bay_start=x2_best; %bay id of every task == Ŀ һ л
% ţ Ը ݹ ѡ ʹ һ ɫ
n_job_id=x2_best;%
rec=[0,0,0,0];%temp data space for every rectangle
for i =1:n_task_nb
rec(1) = n_start_time(i);% εĺ
rec(2) = n_bay_start(i)-0.3; % ε
rec(3) = n_duration_time(i); % ε x ᷽ ij
rec(4) = 0.6;
txt=sprintf(’%d-%d’,x1_best(i),table(1,i));% ţ ţ ӹ ʱ ַ
rectangle(‘Position’,rec,‘LineWidth’,0.5,‘LineStyle’,‘-’);%draw every rectangle
text(n_start_time(i)+0.2,n_bay_start(i),txt);%label the id of every task
text(n_start_time(i)+n_duration_time(i)+0.1,n_bay_start(i)+0.5,num2str(table1(2,i)));
end
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
🍅 仿真咨询
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 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合