一、车间调度简介

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]的机器组合。调度的目的还是总的完工时间最短(也可以是其他目标,比如机器最大负荷最短、总的机器负荷最短)

二、模拟退火算法简介

1 模拟退火算法的应用背景
模拟退火算法提出于1982年。Kirkpatrick等人首先意识到固体退火过程与优化问题之间存在着类似性;Metropolis等人对固体在恒定温度下达到热平衡过程的模拟也给他们以启迪。通过把Metropolis 算法引入到优化过程中,最终得到一种对 Metropolis 算法进行迭代的优化算法,这种算法类似固体退火过程,称之为“模拟退火算法”。
模拟退火算法是一种适合求解大规模组合优化问题的随机搜索算法。目前,模拟退火算法在求解 TSP,VLSI 电路设计等组合优化问题上取得了令人满意的结果。将模拟退火算法同其它的计算智能方法相结合,应用到各类复杂系统的建模和优化问题中也得到了越来越多的重视,已经逐渐成为一种重要的发展方向。
2 模拟退火算法介绍




3 模拟退火算法的参数
模拟退火是一种优化算法,它本身是不能独立存在的,需要有一个应用场合,其中温度就是模拟退火需要优化的参数,如果它应用到了聚类分析中,那么就是说聚类分析中有某个或者某几个参数需要优化,而这个参数,或者参数集就是温度所代表的。它可以是某项指标,某项关联度,某个距离等等。

二、部分源代码

clc;
clear;
close all;%% Problem Definitionmodel=CreateModel();        % Create Model of the ProblemCostFunction=@(q) MyCost(q,model);       % Cost FunctionnVar=model.nVar;        % Number of Decision VariablesVarSize=[1 nVar];       % Size of Decision Variables Matrix%% SA ParametersMaxIt=500;      % Maximum Number of IterationsMaxIt2=25;      % Maximum Number of Inner IterationsT0=10;          % Initial Temperaturealpha=0.97;     % Temperature Damping Rate%% Initialization% Create Initial Solution
x.Position=CreateRandomSolution(model);
[x.Cost, x.Sol]=CostFunction(x.Position);% Update Best Solution Ever Found
BestSol=x;% Array to Hold Best Cost Values
BestCost=zeros(MaxIt,1);% Set Initial Temperature
T=T0;%% SA Main Loopfor it=1:MaxItfor it2=1:MaxIt2% Create Neighborxnew.Position=CreateNeighbor(x.Position);[xnew.Cost, xnew.Sol]=CostFunction(xnew.Position);if xnew.Cost<=x.Cost% xnew is better, so it is acceptedx=xnew;else% xnew is not better, so it is accepted conditionallydelta=xnew.Cost-x.Cost;p=exp(-delta/T);if rand<=px=xnew;endendfunction model=CreateModel()p=[ 48    27    18    1523    52    50    5935    39    25    1045    38    36    4955    56    18    5158    24    40    5437    48    23    1417    48    43    3017    29    45    2323    38    48    5052    13    32    3222    12    14    5651    37    21    1922    49    56    2357    57    17    1727    16    52    1620    39    37    5422    33    60    3941    10    13    3834    27    32    17];I=size(p,1);J=size(p,2);s(:,:,1)=[4 7 5 7 7 5 2 7 5 3 8 6 6 6 7 2 6 2 8 63 5 8 5 6 6 5 2 7 4 2 2 5 2 4 7 5 2 3 46 8 6 8 3 2 7 8 4 2 3 2 4 7 3 4 5 3 3 43 4 3 6 6 6 8 8 5 5 2 7 2 2 2 6 6 3 4 52 7 3 6 2 4 3 8 2 4 5 8 7 2 7 8 2 4 2 47 4 4 7 6 2 3 8 3 3 2 5 4 6 3 5 4 4 6 43 7 7 8 6 5 5 7 6 3 8 2 6 4 4 6 7 3 4 55 7 7 8 7 3 6 5 4 8 3 7 7 6 5 7 6 3 8 76 4 7 2 8 2 4 3 8 6 2 4 2 7 3 5 2 8 4 44 3 4 8 8 3 3 4 2 5 4 4 2 6 6 6 2 6 6 57 7 5 6 7 3 8 2 8 8 5 7 5 7 5 2 2 5 3 24 8 2 8 6 3 2 2 5 2 2 2 5 3 3 8 2 3 4 26 4 2 5 8 2 2 8 6 7 8 2 8 7 7 3 4 3 3 46 6 2 5 6 6 2 4 8 7 4 6 7 8 2 3 6 2 7 45 5 6 7 2 3 3 4 4 5 4 6 7 8 4 7 7 8 8 62 7 5 3 2 5 6 4 4 3 2 5 2 2 3 5 5 6 4 84 7 3 5 8 6 6 5 5 6 4 7 2 4 5 7 2 5 6 84 3 5 8 5 5 2 6 7 4 2 6 2 4 2 4 6 4 4 53 8 3 6 7 5 8 2 7 2 5 7 7 6 4 3 2 3 5 33 8 2 7 3 5 7 7 2 3 7 4 8 6 2 2 2 6 7 7];s(:,:,2)=[7 7 7 6 3 3 2 4 7 2 5 7 3 5 4 4 5 8 4 57 7 3 4 4 3 3 6 6 3 5 4 3 5 2 2 6 5 6 37 2 2 8 2 5 3 7 2 2 8 5 6 8 3 3 4 7 8 82 5 7 3 6 3 2 6 7 5 7 8 6 4 3 7 2 6 7 76 4 6 6 3 7 2 5 8 3 5 5 6 5 4 7 5 2 5 85 5 7 6 2 8 6 6 7 8 8 4 6 8 3 8 4 5 7 33 4 6 4 7 2 8 5 2 2 2 6 2 2 4 6 7 6 4 62 4 4 2 4 5 4 2 4 2 4 4 4 8 2 2 7 5 8 67 3 4 2 6 2 4 7 6 5 8 7 5 3 8 8 6 4 8 23 3 7 4 4 7 8 8 7 7 8 4 3 6 2 7 2 8 8 43 2 4 3 6 8 8 4 3 4 6 5 7 6 8 4 2 7 4 36 8 7 7 2 2 6 8 3 3 6 6 7 6 4 5 5 7 5 78 6 7 4 8 8 8 4 6 4 4 8 3 4 2 8 4 4 3 35 8 7 7 7 2 7 8 5 3 8 4 7 6 4 7 8 6 7 86 3 5 7 7 6 4 5 6 5 2 7 2 7 7 7 8 8 8 73 8 6 5 7 7 6 4 3 8 7 7 7 2 7 5 4 8 8 48 7 8 3 4 5 3 3 3 6 6 8 2 2 5 5 7 6 5 55 6 5 8 6 8 4 2 7 2 7 2 6 8 6 5 8 3 6 66 5 2 3 6 8 6 4 7 4 4 4 4 6 8 3 6 6 3 72 3 8 8 5 6 5 7 8 2 7 6 7 3 2 7 8 2 8 6];s(:,:,3)=[6 5 8 5 4 6 3 8 2 3 6 5 3 6 7 2 6 5 7 84 6 5 6 5 5 5 6 3 2 6 7 2 5 4 6 6 7 6 55 8 5 7 4 3 2 5 2 6 5 3 4 6 6 2 3 8 8 26 7 4 5 7 6 7 7 5 8 3 4 6 3 2 6 2 7 2 28 4 5 3 7 2 7 5 3 8 7 3 6 2 2 7 3 4 6 77 7 5 5 5 6 8 5 4 3 3 4 5 5 8 3 8 5 3 52 2 2 4 6 6 8 6 4 5 4 4 5 3 3 5 8 7 7 46 2 8 8 8 2 5 4 2 4 8 5 4 8 6 5 6 2 3 75 2 2 6 7 2 3 3 5 5 7 2 5 8 8 2 7 2 5 45 3 5 6 6 3 2 6 6 3 4 5 7 4 3 5 3 3 4 52 4 7 7 2 2 5 8 3 2 4 3 7 2 3 6 6 5 7 67 4 4 4 4 5 6 4 7 5 6 3 6 6 4 3 7 8 6 84 2 6 5 6 7 7 2 2 3 8 3 7 7 8 7 4 6 3 43 5 7 5 5 6 2 5 4 2 8 3 6 8 4 8 8 4 4 64 2 8 3 2 5 6 4 2 8 6 8 2 2 3 7 2 4 2 84 3 8 5 3 8 5 4 3 5 4 8 5 5 3 5 4 7 6 25 6 3 6 7 2 3 7 2 8 7 7 4 6 4 3 5 8 5 65 8 3 4 2 8 8 4 3 7 5 7 2 6 4 7 2 6 3 44 8 8 7 8 2 6 4 2 2 8 3 3 7 2 3 7 3 3 44 5 6 7 2 5 5 4 3 6 2 4 3 6 5 8 5 2 5 3];s(:,:,4)=[7 7 8 3 8 2 5 2 3 8 2 5 7 7 3 4 7 6 8 78 5 2 3 6 7 6 4 7 6 4 8 5 8 8 4 7 3 5 63 3 2 4 4 4 8 8 4 6 7 7 4 3 6 8 4 5 8 57 5 4 8 7 7 3 5 4 7 3 8 7 2 8 6 5 7 7 33 5 6 5 8 5 7 4 3 2 7 3 5 3 5 8 8 3 5 88 8 5 4 5 5 6 3 7 8 6 5 8 4 8 3 6 4 6 57 7 8 3 5 2 5 5 6 4 7 2 8 4 2 7 7 5 8 24 8 5 8 4 2 8 8 7 2 7 7 4 8 6 6 3 4 3 67 6 5 4 2 2 4 2 7 7 4 6 5 2 7 3 6 7 4 55 4 5 7 3 6 3 5 2 3 4 8 4 6 3 5 6 8 8 27 8 6 6 2 3 6 7 8 3 5 8 6 3 8 4 8 3 4 84 5 2 4 5 7 6 2 5 6 4 8 7 7 7 6 2 3 6 42 3 7 8 2 8 4 6 7 3 7 4 7 3 7 7 5 6 8 36 4 2 7 8 8 7 8 7 4 7 2 2 5 6 2 5 4 8 28 6 5 5 6 5 8 3 7 4 5 5 7 8 7 7 2 8 6 43 5 3 7 2 3 8 2 3 4 3 3 2 4 4 7 8 8 2 35 7 4 8 2 3 2 6 5 4 6 3 4 2 3 4 8 6 2 67 8 6 5 3 5 3 8 6 6 3 4 7 3 4 5 5 8 6 22 8 3 4 5 7 2 6 8 3 5 2 7 4 6 6 7 4 5 38 5 3 6 2 4 6 8 7 3 4 7 4 4 7 6 3 6 8 3];model.I=I;model.J=J;model.p=p;model.s=s;model.nVar=I+J-1;end

三、运行结果


五、matlab版本及参考文献

1 matlab版本
2014a

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

【车间调度】基于matlab模拟退火算法求解车间调度问题【含Matlab源码 894期】相关推荐

  1. 【MVO TSP】基于matlab灰狼算法求解旅行商问题【含Matlab源码 1327期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab灰狼算法求解旅行商问题[含Matlab源码 1327期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  2. 【BA TSP】基于matlab蜜蜂算法求解旅行商问题【含matlab源码 1248期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab蜜蜂算法求解旅行商问题[含matlab源码 1248期] 获取代码方式2: 付费专栏Matlab路径规划(初级版 ...

  3. 【IA TSP】基于matlab免疫算法求解旅行商问题【含Matlab源码 195期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[旅行商问题]基于matlab免疫算法求解旅行商问题[含Matlab源码 195期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  4. 【FA TSP】基于matlab萤火虫算法求解旅行商问题【含Matlab源码 328期】

    ⛄一.TSP简介 旅行商问题 (Travel Salesman Problem, TSP) 是最基本的路线问题, 其探索单一旅行者由起点出发, 并通过所有给定点后, 再回到起点的最小路径成本问题.求解 ...

  5. 【AFSA TSP】基于matlab人工鱼群算法求解旅行商问题【含Matlab源码 422期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab人工鱼群算法求解旅行商问题[含Matlab源码 422期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  6. MATLAB模拟退火算法求解超市物流配送选址问题实例

    模拟退火算法编程问题实例: MATLAB模拟退火算法求解超市物流配送选址问题实例 在范围为(0,0)到(100,100)的矩形区域内,散布着40个连锁超市,各个连锁超市的坐标及需求量见表1.要求在该矩 ...

  7. 【背包问题】基于matlab禁忌搜索算法求解背包问题【含Matlab源码 373期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[背包问题]基于matlab禁忌搜索算法求解背包问题[含Matlab源码 373期] 获取代码方式2: 通过订阅紫极神光博客付费专栏,凭支付 ...

  8. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  9. 【算法】优先队列的分枝限界算法的流水作业调度问题(C++源码)

    [算法]优先队列的分枝限界算法的流水作业调度问题(C++源码) 一.任务描述 二.步骤描述 三.运行结果截图 四.源代码(C++) 一.任务描述 有一个流水作业调度问题,n=4,a[]={5,10,9 ...

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

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

最新文章

  1. TVM Operator Inventory (TOPI)简介
  2. IntelliJ IDEA 快捷键和设置
  3. 去除链接虚线边框css
  4. vb.net 2019-机器学习ml.net情绪分析(3)
  5. Linux安装宝塔(Bt-Panel),修改用户名或密码,查看面板入口
  6. Agile.Net 组件式开发平台 - 平台系统介绍
  7. mysql分组取每组前几条记录(排序)
  8. Struts2不扫描jar包中的action
  9. 【BZOJ】1176: [Balkan2007]Mokia(cdq分治)
  10. 注塑机服务器显示e011,海天注塑机伺服控制器故障代码表.doc
  11. 最基本的25道深度学习面试问题和答案
  12. 分析 : BSOD案例 2013-0821
  13. 比尔·盖茨表示 AI应被用来改善教育医疗
  14. 阿里云云计算专业认证考试(ACP级)
  15. HCIE 面试资料-STP/RSTP/MSTP
  16. 把Excel转换成xml文件
  17. MySQL InnoDB Cluster部署
  18. ChemDraw Professional for Mac 16.0.1.4 专业的生物化学绘图软件
  19. AI 人工智能之概率论基础(1)
  20. 新浪短信WEBSERVICE--本文转载

热门文章

  1. Oracle join连接的使用
  2. Pandorabox等类OpenWrt的路由器 实现后端设备接入IPV6(中继代理+NAT)
  3. Mountain Road
  4. 【转】几个颇有创意的网站推广方法
  5. 国内物联网平台初探(二) ——阿里云物联网套件
  6. python之sklearn
  7. HCI实验数据分析之数据可靠性计算,绘制箱图,描述性变量统计,ANOVA,Bonferroni 的连续变量方差分析
  8. Atitit knowmng file list知识管理文档索引 目录时索引 part1
  9. Atitit 常见触发器功能总结 目录 1.1. mysql触发器实例 插入数据前更改数据值.mhtml 1 1.2. 数据修改后更改数据值 1 1.3. 不能为空检测约束。。 1 2. Ref 2
  10. Atitit 字符串转换数组main参数解析 args splitByWholeSeparator String string= -host 101.1 8*124 -db 1