1. 编码

在上一篇博客中我们讨论了车间调度问题的编码,具体说就是根据工件的个数和每个工件的工序数来生成12122这样的数字排列,具体的说一个工件包含多少道工序,那么这个工件的编号就出现多少次。从12122中我们可以看出总共有两个工件1和2,工件1下面有两道工序,工件2下面有三道工序,所以1出现了2次,2出现了3次。

此外,我们还提到了种群的概念,种群就是指随机生成多个工件号排列的集合,集合中排列的个数就是种群的大小。大家思考一下如何编程实现初始种群的生成,大家看一下下面的python代码:

 def InitPopulation(ps, I):
gene = [j for j in xrange(I.n) for t in I[j]]
population = []
for i in xrange(ps):
shuffle(gene)
population.append([j for j in gene])
return population

第1行我们定义了一个生成初始种群的函数,叫作InitPopulation,这个函数接收两个参数,ps 和 I。ps是个整型变量,它的值表示种群的大小,I是个list, 里面存放的是每个工件下每道工序使用的机器号和在该机器上加工的时间。我们还是用上一篇博客的那一个两个工件,两台机器的例子来说明

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQYAAABNCAIAAADLv11wAAALeElEQVR4nO2d30sb6RrH5w/ITS5zESiEghcFWcSLiiz2otKDUOUsEvqDEA97SOS0pN2FaA+rFpu6HKe0jWybbrehbdBzYo+DZzdb1ramW1NQqTlnU0xws0tsk9bsGmurJJKsk7zPuYhGx/yemU6mk/dzp4nzfuad+ZrJO+8zLwEYDGYXRKUFMBhxgSOBwTDAkcBgGOBIYDAMcCQwGAY4EhgMAxwJDIYBjgQGwwBHAoNhgCOBwTAoKRIEBiNuKhAJHpvkjhh8sINUHaQdiWQ0+Gzi++nFaLJyDoCiL2cnfni6uI6wQ6UdStqa8E1ypyQftOa1GTuHZpbfPOk7cdMb5/lAlNYnyah3+G+dN54tv3b1GSzeKHaonEPJWxO+Se6U4ENHnL0N2tEgjQBClKaVdK8L7gAo8qi7odMejAPQYUpfS84lsEOFHMrYmvBNcqeoD1qd7Kr5E+leAwCAEKWp01AhgR0ALTu7Pj5IPtsAAKDDlI7QUGHsUBGHsrYmfJPcKeaTCNhOyhqGPH8gAIDEjGmfSvhIpAK2NlmL2ZO+SFibMTUKfypgBzZbE75J7hTxSS1Ym/c1mH/6I/2T39pMHDF7YoI6QNxvbScysUwtWJuVH5k9/H7Nxw6lOZS5NeGb5E5hHxSyqwlVi8FEkiRJDhjbawn55xOrPA86FekT9MKu3idvMfyDJEmSHDS27ydqDRO/Y4cKOJS7NeGb5E5BHxRz9Sl3MrDiNNbJ9Y5lBACIXvFOmDv1uS+iCr9algNAzNWjzBz71LrznEJucCzTRVpBaz5qiLxx+/qZkx3mJ2G6yCgZOwcU9VLkpRu2oTPqTvPUazr7D+mIb8Ks0Y+XcnnDsh8K7ym//VAm0osEHaZ0RKPFl07EutOoaOhyLiMAtOK573BYDU05v1cUfrVMB4AwpSFaLb4NAABYcRrra7omV1GRVlIB+9+H/TQAbM5bDtcetwdS/DskAsPkcCAOgDZ9Nw7LP7UHmcM/KOK5f/+h9bSytCt+dv1QeE957ocykWgktg4nvewwKFqt/s3Mv5mom2zJf9IXfrV0h/SpoKPCNACgZYdecdzq3yjWSjLiOC1vswVS6fc0yXSOCP8OSw5dfZvtlxQA0G5SVaNzLGX/Ke0mVbxFItuh8J7y3Q9lIr1IQNJnaUwfzvhzS6uanFvd9bkrVCSS85bGTipMA0S9lpPN5Oyue7b5W6HfvHgVRQCAXjv0H2VGCHh1QPRK8FU0CelzVJ4ZC2KK8BWJfP1QeE/57YcykWAkYNNnbT/vfBOcGjjbN/mKea0sVCRgw2891e0Mhacu6/seMq+Gi7ZCR5x9h7V3vMXmoXBwAEBhZ/cnWuvzaK4Ldd4iUdihyJ7y1Q/lIcVIAKBo4On3D2eD2YdbsEgAoPXFpz9MzL7MkijcSjLqHe4eeFT0OyUnB7Tmvd0/sPf/xQ78RaJAPxTeU177oRykGYn87DkdE5Hns88jiTyvCu+QjHrvXRp5HkUAMVd/v6vwzRSWDmjNO3JtxLuGAMVcV/pdqwCIjsw/fb6cSQifkchN9p7udhCkH/JtraQ3SSMS8UXX+F1T+4F6w7Wx+54VBICClHa/3DCxmvNVoR1Q3D+s3S/bLgFQttp+LWzByiHqt+n27xQanLAtJtJTj2RbI9exRde3/zSp5fUGy9gDz0q+DxIuDjn3NONAC9IP+bdW0pukEYmcpBbuXP6RxZRAqTlA3H/npnO98GhnNThUeyQS4cf/GvezmassLQdEh5/cHl+IV7sDQNVHAjtgh6ytldgkBiNmKhAJHpvkjhh8sINUHXAksAN2YG5N+Ca5w80nseL/8e6ZVi23oiIODonw1PWzZ3oGTadb6j7pHV/Ief+4ChwAANErC4/vft6k5VRUhCPBwScVdH51yXzzgkbBtc6OrQPa9N/5dGA6Pd0o7v36qKyu0xFid0J+yA4AkAg5vyHNX5k0BzjW2eFIcPah3aSqUpHY8FlaZYcuTkVoAAD0q61VSbTaFlmdjx+yQ4aom2zCkeDKhxyJzbDj7P79Zx3hTQAACFEaFcG28vJDdsgg8UiguJ8ir17Ut/V/OzlKkpdNmiNam4/FzReefPJQyUgwibl6lLIDpumN4m+VqoPEI7Hi/NLqic9bGpX1vU/eJhesR2oOm//Lrq/58MmDWCIRD9p1iswFTJU6SDsSqZcP/zO/Eaa0snarn/fPhvJ98iGKSKDNgL3joM7qXWP9HEJJOEg7EgBbJee1pDvB7OTUL7Y29XYNbtbfBGxtH29XS/PskwsRRAK9fTrQ8eVkmNNj7yTgUA2RWHX1HFT2FJngzpEPPhJx33D3le1zcckxcK8Coz1icACogkgk5y2NdcwH9dAR1y2S/Oxo53fhrE5Hkemb5LXrXZ19U7+VfkQ+7Eig36b6TuqtTveca2KcosaudnY/WK1Chy0kH4mIQ1eTGd0DAIDUzyNXJl9MnT9wzB7ce9a/eTp0e2495rcea7TMlz4GyO1WHTn4haZeJlO1nDaRZrvnHbstsXVIBKlTuyp4CIKQl7XvUnGArVt1g+c09QpCddRgGiTtuZ6M8H4dcm1NiCbRa4e+Se94nftzAAUpbXOPq4x/UmK4T4IdpOogRCRQ0H6sdmD6lfPKyM+prDJfWHca95X3gErpHQbsIB4HQSIR/q7z6GckecsVoZllvgCAEm6ytszZBNI7DNhBPA4VmdCxu8Q25rO0l3shK73DgB3E4yB8JLZLbDd91rZ24xWTse/fvjLXkpPeYcAO4nGoyml/2AE7FNia8E1yRww+2EGqDrxGIuqxkyZDi4rYWWPjC92hhpaue+VeGvHj8z7BDlJ14PtTIr3qTPr5eVu/eecZUtd02AObrKeWcfDZA1rzjZoMXVdtY7dNWk3X8FykhEeO8uwgiiLPEKU91G68ahsbs1sHDWojFWQ504nb6VgNhabrTqNC0Wxd2P3ENhSmtLIm0wzL+8ScfBigDfelhkMXJsOJrQVHiKot8gxRGhVBEAShqFNfHPdXZCZsdRSaJn2WRqLRNLPG+C3tJlXspwxw8WGSWnedryEae1xvANKrgchYLyXI1kEkRZ4hSmd2syyR4MshjcTnOG2G7B051kqk3aSKUJG8HIKyfAqAYq4+pazN7GG5RDxbB5EUeeJI5N8ar02uOI11RLPVv+dBt2FKQ+y9muICty5IRkPzc1MjXUePX3TmXWDhPTtsU7EizxDV8Wdd/2WrffRWj6F7dL5CD60BqUciOW9plO8zzexZDzDm6lMSB8ua2MePT24SK/7/zTjHrp852XH1QYDtUBgfh6GCRZ7vPOOPF9MDHjFXj3JrhUthHdJIOhJo0daaY1XjdzOmJuLAwMyGCEacdoFWJ84o5PW9T95WpnRGDEWeaUKURiXTUtnVLII4SDkSqXXnOcXWEh47oNXJrpqaYzb/VgkFHxWnbLsgGfU/Gh6d3V7rKURpVKxXiec6FbKSRZ7JtzPX9foh19anU4jSsP+qhyNRgJjHfITYU3WNVufItho9FWQ7/M/BJ5slh66GILYflYBe2NX7CMU5Fmt8cHAAgIoXeeYY9WLcShLCIYOEI5Hds/TS9NBfDu6sSMlbxSn7ajL7X2u7JtOL/qIlqkOuZP1MHQ63Cyte5Ik2/SPnvvakl9Glg6NahdriZVfQhiORm6jfYSEv6Jpku2Zy9JxSq0+T1E87t4f5qzhl3wX07+7hfr2hZ5DsN7SfMFqnS1kwk1cHsRR5hqe+6e29SA6e07aetkwvVWLkrZoLTTPwVHEqvXk12EE8DoJGgq+KU+kdBuwgHgdhI8FTxan0DgN2EI9DZeslWFacSu8wYAfxOFQwEuwrTqV3GLCDeBxwVR12wA7MrZXYJAYjZoSOBAZTPeBIYDAMcCQwGAY4EhgMAxwJDIYBjgQGw+D/EfqH7bwG3/kAAAAASUVORK5CYII=" alt="" />

I=[[(1,3),(2,2)],[(2,5),(1,1)]]。

I 下面又分别有两个list, 它们是I[0]=[(1,3),(2,2)] 和I[1]=[(2,5),(1,1)]。

I.n 表示 工件的个数,这里 I.n=2。

I.m 表示 机器的个数,这里I.m=2。

第2行 gene表示染色体模版,所有的染色体通过这个模版产生。就上面这个I而言,第二行执行完后gene的结果是1122,即按工件号由小到大排列,每个工件号出现的次数与这个工件包含的工序数相同。

第3行 定义一个空list命名为population

4,5,6 行 for循环,生成ps个染色体,存放在population中,最后返回population。具体做法是利用python的shuffle函数来随机打乱gene的顺序来制造染色体(第5行),比如第一次shuffle(1122)后的结果可能是1212,第二次的结果是shuffle(1122)的结果可能是2211,这样经过ps次shuffle操作就可以生成ps个染色体存到population中(第6行)。

第7行 返回种群population。

总结:大家请思考一下染色体与有向无环图的对应关系,尤其要注意的是一个有向无环图可以对应多条染色体,但一条染色体只能对应一个有向无环图这个特点。

遗传算法在JobShop中的应用研究(part 2:编码)的更多相关文章

  1. 遗传算法在JobShop中的应用研究(part1: 绪论)

    1. 什么是JobShop问题 Job,中文翻译成工件.一个工件又由若干道工序加工完成. resource, 资源.在本文的车间调度中资源指的是机器,每道工序要在某个特定机器上加工. Constrai ...

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

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

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

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

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

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

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

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

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

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

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

  8. Python中的字符串与字符编码

    本节内容: 前言 相关概念 Python中的默认编码 Python2与Python3中对字符串的支持 字符编码转换 一.前言 Python中的字符编码是个老生常谈的话题,同行们都写过很多这方面的文章. ...

  9. 广告系统中weak-and算法原理及编码验证

    wand(weak and)算法基本思路 一般搜索的query比较短,但如果query比较长,如是一段文本,需要搜索相似的文本,这时候一般就需要wand算法,该算法在广告系统中有比较成熟的应 该,主要 ...

随机推荐

  1. 20145337《Java程序设计》第八周学习总结

    20145337<Java程序设计>第八周学习总结 教材学习内容总结 15.1日志 15.1.1日志API简介 使用日志的起点是logger类,logger实例的创建有许多要处理的要素,必 ...

  2. 安装Arch Linux

    参考自:https://wiki.archlinux.org/index.php/Main_Page_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) 用fdisk建立分区 ...

  3. Laravel-5.1 ---- 将mews captcha整合到项目中!

    经过摸索,终于能在laravel 5.1中应用验证码了. 因为英语渣五水平,所以几乎没搜索到什么有用的,于是考虑在github上搜索验证码包! 提示: github上的package中往往会有使用说明 ...

  4. Jquery EasyUI使用总结(一)

    1,弹出Iframe,新窗口 //打开编辑页面要加载的数据 function ShowDialog(id, url, width, height, onLoadFunc) { $("#&qu ...

  5. yiii 框架登录 判断是否是游客模式及未登录状态

    原地址:http://blog.csdn.net/a553181867/article/details/50987388 最近在利用Yii 2.0框架进行项目后台的编写,遇到的第一个问题是用户登陆,包 ...

  6. Maven应用

    Maven进行项目管理很方便,下面介绍一下学习maven中的笔记.我是在Windows上运行的          有些知识点没有试,只是收集转载,很可能存在错误 1.安装 解压缩之后,配置环境变量MA ...

  7. Cross-Site Scripting(XSS)的类型

    本文源自: https://www.owasp.org/index.php/Types_of_Cross-Site_Scripting 在原文理解上翻译为中文. 背景 本文描述多种不同类型的XSS攻击 ...

  8. PinPhoto On OS X

    把多张图片摆放到屏幕任何位置并保存成文件,下次打开时恢复之前的状态! 一般使用场景: 经常要看的图片,比如说软件快捷键.库的API.英文生词.常用配色等等摆好在屏幕上以便查看和记忆. 用PS等画画.设 ...

  9. c#大文件分割过程

    需求: 在项目开发中,我们会遇到单个文件大小超过1TB的文件,这样的文件只能进行单文件读取,往往会造成读取完成耗时过长,导致客户在使用体验过程中不满意. 为了解决提升大文件的解析速度,我想到了先分割大 ...

  10. MyEclipse中无法识别 sun.misc.BASE64Encoder

    sun.misc.BASE64Encoder/BASE64Decoder类不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用.但是在MyEclipse中直接使用却找不到该类. 解决方法: 1 ...