遗传算法在JobShop中的应用研究(part1: 绪论)
1. 什么是JobShop问题
- Job,中文翻译成工件。一个工件又由若干道工序加工完成。
- resource, 资源。在本文的车间调度中资源指的是机器,每道工序要在某个特定机器上加工。
- Constraint, 约束。在车间调度中约束主要有以下两种:
- 同一个工件包含的工序有先后顺序。
- 每个机器不能同时处理两道工序,因此这台机器上完成工序时要串行,不能并行。
- Objective,目标。JobShop问题的一个常见目标是使所有工件完成的总时间最小,这个总时间英语叫做Makespan。
一个JobShop问题可以用一个表格来刻画,例如下面的表格:
θ(1,1) | θ(1,2) | θ(2,1) | θ(2,2) | |
r (i,j) | 1 | 2 | 2 | 1 |
D (i,j) | 3 | 2 | 5 | 1 |
θ表示工序,例如, θ(1,1)就表示第1个工件的第1道工序。
r (i,j)表示机器编号,例如,r(1,1)=1,表示第一个工件的第一道工序的加工机器号为1。
D (i,j) 表示加工时间,例如,D(1,1)=3,表示第一个工件的第一道工序的加工需要3个单位的时间。
JobShop问题的一个解可以用一个加权有向无环图来表示,请看下面的一个有向无环图:
这个加权有向无环图就代表上述JobShop问题的一个解,我们可以看到每个工序作为图中的一个节点出现,权重就是这个节点对应的加工时间。工序之间的先后顺序用箭头表示,在这里需要注意的是:除了同一个工件下面的工序之间有先后顺序外,同一台机器上加工的工序也要串行。另外,我们增加了两个虚节点,分别为 θI 和 θF,表示开始和结束。从θI有箭头指向每个工件的第一道工序,从每个工件的最后一道工序出发用箭头指向 θF。虚节点的加工时间为0。
一个有向无环图中有若干条从θI到θF的路径,在这些路径中我们找出那条路径上所有节点的权重相加最大的那一条,这个最大的权重和就是这个解对应的makespan,即所有工件加工完毕所需的时间。
注意:所有工件都完成的总时间(Makespan)不是3+2+5+1=11,而是上面那个有向完全图中所有能从开始节点到达结束节点的全体路径中那条所需时间最长的路径花费的时间,即7.下面是另外两个有向图,即另外两个解的例子:
2. 遗传算法与JobShop
遗传算法是一种随机搜索算法,它主要分为六大功能模块:编码、交叉、变异、解码、评价、选择。整个算法的流程如下:
编码:
我们利用工件号的排列来表示工序的先后顺序,例如:1212这个排列中第一个1代表第一个工件的第一道工序,第二个1代表第一个工件的第二道工序,第一个2代表第二个工件的第一道工序,第二个2代表第2个工件的第二道工序。可见,1212这个排列可以完全体现出上面的有向无环图中体现的节点先后顺序。
需要说明的是一个有向无环图可能对应多个工件号的排列方式,例如,1212,2121,1221,2112都对应上面的有向无环图。
在遗传算法中首先做的就是编码,即随机生成若干个工件号的排列,这些个随机生成的排列构成的集合被称为种群,每个排列被称为染色体。
如图所示,种群大小为4,该种群中包含4条染色体,分别为2211,1212,1122,2121。请思考为什么1111为非法染色体?
遗传算法在JobShop中的应用研究(part1: 绪论)的更多相关文章
- 遗传算法在JobShop中的应用研究(part 5:解码)
解码操作是整个遗传算法最重要的一步,在这步里面我们利用配置文件中的信息将染色体解码成一个有向无环图. 在介绍解码操作之前我们先来看一下配置文件,在part1绪论中我们已经介绍了一个车间调度问题的基本信 ...
- 遗传算法在JobShop中的应用研究(part4:变异)
下面,我们以车间调度为例来谈谈遗传算法中的另一个重要操作变异.变异操作通常发生在交叉操作之后,它的操作对象是交叉得到的新染色体.在本文中我们通过随机交换染色体的两个位置上的值来得到变异后的染色体,变异 ...
- 遗传算法在JobShop中的应用研究(part3:交叉)
2.交叉 交叉是遗传算法中的一个重要操作,它的目的是从两条染色体中各自取出一部分来组合成一条新的染色体这里,在车间调度中一种常见的交叉方法叫Generalized Order Crossover方法( ...
- 遗传算法在JobShop中的应用研究(part 7:整体流程)
""" pop是种群,种群中的每个个体的形式是,(makespan, 染色体)""" pop = [(ComputeStartTimes(g ...
- 遗传算法在JobShop中的应用研究(part 6:结果显示)
def FormatSolution(s, C, I): T = [0 for j in xrange(I.n)] S = [[0 for t in I[j]] for j in xrange(I.n ...
- 遗传算法在JobShop中的应用研究(part 2:编码)
编码 在上一篇博客中我们讨论了车间调度问题的编码,具体说就是根据工件的个数和每个工件的工序数来生成12122这样的数字排列,具体的说一个工件包含多少道工序,那么这个工件的编号就出现多少次.从12122 ...
- (转)RRU交织冗余在LTE-R组网中的应用研究
RRU交织冗余在LTE-R组网中的应用研究 王 芳1,2 庞萌萌1,2 (1.北京全路通信信号研究设计院集团有限公司,北京 100070; 2.北京市高速铁路运行控制系统工程技术研究中心,北京 100 ...
- Pywinauto在Windows Twain Driver自动化测试中的应用研究
摘 要: 以Python为基础,结合对Twain Driver测试工具的具体需求,将Pywinauto引入到Twain Driver的自动化测试中.介绍了Pywinauto的基本概念,通过测试用例说 ...
- 遗传算法中几种不同选择算子及Python实现
前言 本文对遗传算法中的几种选择策略进行了总结, 其中包括: Proportionate Roulette Wheel Selection Linear Ranking Selection Expon ...
随机推荐
- EDI - Biztalk Setting
1. Applications:
- BizTalk动手实验(六)Orchestration开发
1 课程简介 通过本课程熟悉Orchestration的相关开发与测试技术 2 准备工作 熟悉XML.XML Schema.XSLT等相关XML开发技术 熟悉.NET相关开发技术 新建BizTalk空 ...
- Java封装
面向对象的三大特征:封装.继承.多态.封装在书面上来说,他无非就是set和get方法罢了.为什么要用到封装,比如买主机如果没有机箱只有内存条.CPU.主板等等那些零件买回到家,你还得一个个的去装那些零 ...
- A trip through the Graphics Pipeline 2011_05
After the last post about texture samplers, we’re now back in the 3D frontend. We’re done with verte ...
- Android SDK路径不能含有空格
错误, android sdk location shoud not contain whitespace,as this can cause problems with thte ndk tools
- thinkphp3.2 cli模式的正确使用方法
最近要使用thinkphp3.2版本的cli模式,手动执的话没有问题,比如php /www/index.php home/article/get 这样没有问题,但是一般用cli模式都是定时任务比较多, ...
- C++ 扫描文件夹下所有文件
void GetFilesFromDirectory(std::vector<std::string> &files, const char *directoryPath) { s ...
- tableView主从表在storyboard连线是 Selcetion Segue和Accessory Action的区别
当按住Ctorl这样连线时会出现,当选择Selection Segue下面的push时,点击cell的任何位置都会跳转到下一个tableView,当选择Accessory Action的下面的push ...
- 安装LNMP之后出现 Access denied.解决方法
权限问题, 执行 sudo chown -R www:www /home/wwwroot
- JS的基础知识
前言:写前端代码时的各种取值纠结,让我决定我必须要好好学一下js............加油~ $("#tr"+id).remove() 删除某一行,而不用刷新页面 HightCh ...