1. 什么是JobShop问题

  1. Job,中文翻译成工件。一个工件又由若干道工序加工完成。
  2. resource, 资源。在本文的车间调度中资源指的是机器,每道工序要在某个特定机器上加工。
  3. Constraint, 约束。在车间调度中约束主要有以下两种:
    1. 同一个工件包含的工序有先后顺序。
    2. 每个机器不能同时处理两道工序,因此这台机器上完成工序时要串行,不能并行。
  4. 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

遗传算法是一种随机搜索算法,它主要分为六大功能模块:编码、交叉、变异、解码、评价、选择。整个算法的流程如下:

  1. 编码:

我们利用工件号的排列来表示工序的先后顺序,例如:1212这个排列中第一个1代表第一个工件的第一道工序,第二个1代表第一个工件的第二道工序,第一个2代表第二个工件的第一道工序,第二个2代表第2个工件的第二道工序。可见,1212这个排列可以完全体现出上面的有向无环图中体现的节点先后顺序。

需要说明的是一个有向无环图可能对应多个工件号的排列方式,例如,1212,2121,1221,2112都对应上面的有向无环图。

在遗传算法中首先做的就是编码,即随机生成若干个工件号的排列,这些个随机生成的排列构成的集合被称为种群,每个排列被称为染色体。

如图所示,种群大小为4,该种群中包含4条染色体,分别为2211,1212,1122,2121。请思考为什么1111为非法染色体?

遗传算法在JobShop中的应用研究(part1: 绪论)的更多相关文章

  1. 遗传算法在JobShop中的应用研究(part 5:解码)

    解码操作是整个遗传算法最重要的一步,在这步里面我们利用配置文件中的信息将染色体解码成一个有向无环图. 在介绍解码操作之前我们先来看一下配置文件,在part1绪论中我们已经介绍了一个车间调度问题的基本信 ...

  2. 遗传算法在JobShop中的应用研究(part4:变异)

    下面,我们以车间调度为例来谈谈遗传算法中的另一个重要操作变异.变异操作通常发生在交叉操作之后,它的操作对象是交叉得到的新染色体.在本文中我们通过随机交换染色体的两个位置上的值来得到变异后的染色体,变异 ...

  3. 遗传算法在JobShop中的应用研究(part3:交叉)

    2.交叉 交叉是遗传算法中的一个重要操作,它的目的是从两条染色体中各自取出一部分来组合成一条新的染色体这里,在车间调度中一种常见的交叉方法叫Generalized Order Crossover方法( ...

  4. 遗传算法在JobShop中的应用研究(part 7:整体流程)

    """ pop是种群,种群中的每个个体的形式是,(makespan, 染色体)""" pop = [(ComputeStartTimes(g ...

  5. 遗传算法在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 ...

  6. 遗传算法在JobShop中的应用研究(part 2:编码)

    编码 在上一篇博客中我们讨论了车间调度问题的编码,具体说就是根据工件的个数和每个工件的工序数来生成12122这样的数字排列,具体的说一个工件包含多少道工序,那么这个工件的编号就出现多少次.从12122 ...

  7. (转)RRU交织冗余在LTE-R组网中的应用研究

    RRU交织冗余在LTE-R组网中的应用研究 王 芳1,2 庞萌萌1,2 (1.北京全路通信信号研究设计院集团有限公司,北京 100070; 2.北京市高速铁路运行控制系统工程技术研究中心,北京 100 ...

  8. Pywinauto在Windows Twain Driver自动化测试中的应用研究

    摘  要: 以Python为基础,结合对Twain Driver测试工具的具体需求,将Pywinauto引入到Twain Driver的自动化测试中.介绍了Pywinauto的基本概念,通过测试用例说 ...

  9. 遗传算法中几种不同选择算子及Python实现

    前言 本文对遗传算法中的几种选择策略进行了总结, 其中包括: Proportionate Roulette Wheel Selection Linear Ranking Selection Expon ...

随机推荐

  1. 让dwz 在td里显示图片

    让dwz 在td里显示图片 <!@{foreach from = $list item = element}@> <tr target="gid" rel=&qu ...

  2. 常用SQLPLUS工具命令

    有两个   EMPNO ENAME          SAL的列标题 满   14行   为一个标题行 列行重叠了 虽然上述是修改了 linesize 的值,但是仍然没有改变 登录框的宽度,下面是修改 ...

  3. equals和=,==的区别

    一. ==和equals的区别 1. ==是运算符 2. equals是String对象的方法 一般有两种类型的比较 1. 基本数据类型的比较 2. 引用对象的比较 1. 基本数据类型的比较 ==和e ...

  4. UIView常见属性设置汇总

    1.圆角设置 viewT.layer.cornerRadius = 10;//设置那个圆角的有多圆 viewT.layer.borderWidth = 10;//设置边框的宽度,当然可以不要 view ...

  5. Convert Sorted Array to Binary Search Tree || LeetCode

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * s ...

  6. Kingdom of Obsession---hdu5943(二分匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5943 题意:给你两个数n, s 然后让你判断是否存在(s+1, s+2, s+3, ... , s+n ...

  7. 下载pdf_不同操作系统,无法正常下载(兼容性问题)

    [功能点]:下载pdf文件 [问题描述]:window上传附件,linux无法下载 [根本原因]:window中路径分割符为"\",linux中路径分割符为"/" ...

  8. MVC 区域功能

    因为MVC项目是要求都放在固定的文件夹,所以,当项目大的时候,会很不方便管理,所以微软引入的区域的功能 使用方法: 在项目上右击--添加--区域 就会出现Areas的文件夹,里面就是子MVC 渲染: ...

  9. ucos 学习

    1.UCOSII 早期版本只支持 64 个任务,但是从 2.80 版本开始,支持任务数提高到 255 个,不过对我们来说一般 64 个任务都是足够多了,一般很难用到这么多个任务. UCOSII 保留了 ...

  10. java 读取excel poi 和cell 方法

    http://poi.apache.org/spreadsheet/quick-guide.html http://www.aspose.com/docs/display/cellsjava/Eval ...