一、生产调度简介

1 车间调度定义
车间调度是指给定一个加工任务,根据已有的生产条件,对有限的系统资源进行分配,对产品的加工步骤进行安排,使得某项性能指标最优。在实际生产过程中,所涉及的约束条件主要有:机器的加工能力,机器的数量,加工的产品数量,产品的加工顺序,产品的交货时间,生产原料的数量,成本限制,机器故障,产品投产期等。考虑的性能指标主要有:产品交货时间最短,加工时间最短,生产周期最短,成本最少,设备利用率最高等,实际的生产过程一般要平衡多个性能指标[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]的机器组合。调度的目的还是总的完工时间最短(也可以是其他目标,比如机器最大负荷最短、总的机器负荷最短)

二、部分源代码

clear
global mac_num;
global job;
global mac;
gnmax=50;%最大代数
pc=0.8; %交叉概率
pm=0.2; %变异概率
[job,mac_num]=read_data('data.xlsx');
mac=creat_machine(mac_num);
pop_size=10;
pop=inipop(pop_size);
best_time=[];
mean_time=[];
best_pop=[];
generation=1;
while generation<=gnmaxfather_pool=choose_father(pop,pop_size);child_cross=cross_pox(father_pool,pc);child_mut=mutation_exchange(child_cross,pm);[~,best_time(end+1),best_pop_n,f]=choose_prob(child_mut);mean_time(end+1)=mean(f);best_pop(end+1,:)=child_mut(best_pop_n,:);generation=generation+1;
end
[minst_time,minst_n]=min(best_time);
draw_gantt(best_pop(minst_n,:));
figure(2);
plot(best_time,'r'); hold on;
plot(mean_time,'b');grid;
title('搜索过程');
legend('最优解','平均解');
fprintf('遗传算法得到的最短时间:%.2f\n',minst_time);
function child=cross_pox(father_pool,pc)
global job;
job_n=length(job);
job_length=size(father_pool,2)/2;
child=zeros(size(father_pool));
for i=1:2:size(father_pool,1)if rand<pc%job段交叉cross_job=find(rand(1,job_n)>0.5);while length(cross_job)==job_n || isempty(cross_job)%交叉的工件集合为全部工件,则相当于二者互换位置,无交叉工件则相当于没有交叉cross_job=find(rand(1,job_n)>0.5);endk1=1;%指针,k1用于child1从father2中取编码k2=1;for j=1:job_lengthif ismember(father_pool(i,j),cross_job)child(i,j)=father_pool(i,j);elsewhile ismember(father_pool(i+1,k1),cross_job)k1=k1+1;endchild(i,j)=father_pool(i+1,k1);k1=k1+1;endif ismember(father_pool(i+1,j),cross_job)child(i+1,j)=father_pool(i+1,j);elsewhile ismember(father_pool(i,k2),cross_job)k2=k2+1;endchild(i+1,j)=father_pool(i,k2);k2=k2+1;endend%mac段交叉
%         mac_cross=rand(1,job_length)>0.5;
%         child(i,mac_cross)=father_pool(i,mac_cross);
%         child(i+1,mac_cross)=father_pool(i+1,mac_cross);
%         child(i,mac_cross)=father_pool(i+1,mac_cross==0);
%         child(i+1,mac_cross)=father_pool(i,mac_cross==0);for j=job_length+1:job_length*2if rand>0.5child(i,j)=father_pool(i,j);child(i+1,j)=father_pool(i+1,j);elsechild(i,j)=father_pool(i+1,j);child(i+1,j)=father_pool(i,j);endendelsechild(i,:)=father_pool(i,:);child(i+1,:)=father_pool(i+1,:);end
end

三、运行结果


四、matlab版本及参考文献

1 matlab版本
2014a

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

【生产调度】基于matlab遗传算法求解柔性生产调度(FJSP)问题【含Matlab源码 1780期】相关推荐

  1. 【生产优化】基于matlab遗传算法求解帐篷工序问题【含Matlab源码 2145期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源: [生产优化]基于matlab遗传算法求解帐篷工序问题[含Matlab源码 2145期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  2. 【Matlab语音处理】声音信号频谱分析仪【含GUI源码 325期】

    一.代码运行视频(哔哩哔哩) [Matlab语音处理]声音信号频谱分析仪[含GUI源码 325期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊, ...

  3. 【Matlab图像检索】综合特征图像检索【含GUI源码 395期】

    一.代码运行视频(哔哩哔哩) [Matlab图像检索]综合特征图像检索[含GUI源码 395期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  4. 【Matlab肌电信号】肌电信号处理【含GUI源码 966期】

    一.代码运行视频(哔哩哔哩) [Matlab肌电信号]肌电信号处理[含GUI源码 966期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继周,杨 ...

  5. 【Matlab条形码识别】二维条形码识别【含GUI源码 607期】

    一.代码运行视频(哔哩哔哩) [Matlab条形码识别]二维条形码识别[含GUI源码 607期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  6. 【指派问题】基于matlab遗传算法求解指派优化问题【含Matlab源码 2292期】

    ⛄一.遗传算法求解指派优化问题简介 1 遗传算法 1.1 遗传算法简介 遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化概率搜索算法,它是一种多学科融合交叉的产物.遗传算法通过 ...

  7. 【ELM分类】基于matlab遗传算法优化ELM神经网络数据分类【含Matlab源码 2138期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[ELM分类]基于matlab遗传算法优化ELM神经网络数据分类[含Matlab源码 2138期] 点击上面蓝色字体,直接付费下载,即可. ...

  8. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  9. 【Matlab路径规划】改进的遗传算法机器人避障路径规划【含GUI源码 703期】

    一.代码运行视频(哔哩哔哩) [Matlab路径规划]改进的遗传算法机器人避障路径规划[含GUI源码 703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  10. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

最新文章

  1. android5.1内核版本,Android-x86现已基于5.1.1 Lollipop:支持UEFI和64位内核
  2. Oracle Schema Objects——Index
  3. C# — 通过点击回车执行任务
  4. 70个python毕设项目_10 个最值得 Python 新人练手的有趣项目
  5. 【中级软考】函数参数传递传值与传引用的区别(global关键字,函数内定义全局变量)
  6. html入门学习(一)
  7. 再读新疆系列(六)——吹拂“卡拉库里湖”的风
  8. VS2017创建ASP.NET Core Web程序
  9. 工作169:vue项目报错[Vue warn]: Property “visible“ must be accessed with “$data.visible“ because properties
  10. java web access_Java Web项目中连接Access数据库的配置方法
  11. deleted 表和 inserted 表
  12. 测绘工程所用软件评析
  13. python3打印不换行
  14. 在iOS App中增加完整的照片多选功能
  15. 百度风云榜前50名小偷——专门用于提高你网站的流量!
  16. 数论基础——扩展欧几里德算法解析
  17. 期刊论文发表有哪些方法
  18. Abp 添加阿里云短信发送
  19. ajax到底怎么读呢
  20. Miracle密码算法开源库(十三)分析 :mrflsh4.c

热门文章

  1. 在VMWare中配置SQLServer2005日志传送 Step by Step(二)——配置和测试
  2. 探索与发现,我们在路上
  3. atlas对webpart的增强
  4. BZOJ1101 [POI2007] Zap
  5. iOS 之NSOperation(一)
  6. div+css 兼容ie6 ie7 ie8 ie9和FireFox Chrome等浏览器方法
  7. DC概论三之setup time 与 hold time 之二
  8. Unity间隔或延迟固定的时间让物体移动一下,绘制线条
  9. 简化Simulink的建模与模型重构
  10. Atitit mybatis 简化开发与提升开发效率法 目录 1.1. 使用注解模式代替xml模式 1 1.2. 使用通用mapper代替专用mapper 1 1.3. 使用js等脚本语言来输出sq