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

 """ pop是种群,种群中的每个个体的形式是,(makespan, 染色体)""" pop = [(ComputeStartTimes(g, I)[-1], g) for g in InitPopulation(ps, I)]
 2     for it in xrange(1, mit+1):""" mit是迭代次数"""
 3         # Random ordering of the population
 4         shuffle(pop)"""把pop中各个个体的顺序打乱 """
 5         hpop = len(pop) / 2""" hpop是种群的一半"""
 6         for i in xrange(hpop):""" 遍历种群的前半部分份"""
 7             if random() < pc:"""若[0,1]之间的随机数 < pc """
 8                 # Create two new elements
 9                 ch1 = Crossover(pop[i][1], pop[hpop + i][1], I)""" 通过交叉生成下一代"""
10                 ch2 = Crossover(pop[hpop + i][1], pop[i][1], I)""" 通过交叉生成下一代"""
11                 if random() < pm:"""若[0,1]之间的随机数 < pm """
12                     ch1 = Mutation(ch1)""" 对ch1进行变异"""
13                 if random() < pm:"""若[0,1]之间的随机数 < pm """
14                     ch2 = Mutation(ch2)"""对ch2进行变异"""
15                 pop.append((ComputeStartTimes(ch1, I)[-1], ch1))""" 将进化后的染色体放回种群"""
16                 pop.append((ComputeStartTimes(ch2, I)[-1], ch2))
17         # Sort individuals in increasing timespan order and
18         # select only the best ones for the next iteration
19         pop.sort()""" 将pop中的染色体按makespan排序"""
20         pop = pop[:ps]""" 提取pop中的前ps个染色体"""
21     return pop[0]"""返回makespan最大的染色体 """
时间: 2024-12-27 04:21:53

遗传算法在JobShop中的应用研究(part 7:整体流程)的相关文章

遗传算法在JobShop中的应用研究(part 1)

1. 什么是JobShop问题 Job,中文翻译成工件.一个工件又由若干道工序加工完成. resource, 资源.在本文的车间调度中资源指的是机器,每道工序要在某个特定机器上加工. Constraint, 约束.在车间调度中约束主要有以下两种: 同一个工件包含的工序有先后顺序. 每个机器不能同时处理两道工序,因此这台机器上完成工序时要串行,不能并行. Objective,目标.JobShop问题的一个常见目标是使所有工件完成的总时间最小,这个总时间英语叫做Makespan. 一个JobShop

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

2.交叉 交叉是遗传算法中的一个重要操作,它的目的是从两条染色体中各自取出一部分来组合成一条新的染色体这里,在车间调度中一种常见的交叉方法叫Generalized Order Crossover方法(GOX),假设有三个工件A,B,C, 每个工件下面包含三道工序,根据这一信息我们可以利用上一节介绍的编码技术随机生成两条染色体如下: 我们可以用一个list来存储一条染色体, 这个list中的每个元素是一个有序偶,有序偶的第一个元素是工件号,第二个元素是工序号. Parent1用list可以表示为[

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

编码 在上一篇博客中我们讨论了车间调度问题的编码,具体说就是根据工件的个数和每个工件的工序数来生成12122这样的数字排列,具体的说一个工件包含多少道工序,那么这个工件的编号就出现多少次.从12122中我们可以看出总共有两个工件1和2,工件1下面有两道工序,工件2下面有三道工序,所以1出现了2次,2出现了3次. 此外,我们还提到了种群的概念,种群就是指随机生成多个工件号排列的集合,集合中排列的个数就是种群的大小.大家思考一下如何编程实现初始种群的生成,大家看一下下面的python代码: 1 de

遗传算法在JobShop中的应用研究(part 6:结果显示)

1 def FormatSolution(s, C, I): 2 T = [0 for j in xrange(I.n)] 3 S = [[0 for t in I[j]] for j in xrange(I.n)] 4 for i in xrange(len(s)):"""遍历染色体""" 5 j = s[i]"""获得i的工件号j """ 6 t = T[j]""

人工智能深度学习神经网络在双色球彩票中的应用研究

人工神经网络(Neural Networks)在双色球彩票中的应用研究网上已经有比较多的研究论文和资料,最近比较火的AlphaGo中用到的深度学习在双色球预测上还没有相关论文,以后研究成果出来将逐步更新内容. 人工智能神经网络是什么? 神经网络的好处就是可以自己纠正,可以自己生成节点,错误的输入也可以给你输出接近正确的结果.这个就是为什么叫做智能,他会自动根据情况跟人脑思维一样进行学习,进化而不是单纯的执行命令了. 普通过滤算法就是单线的执行,根据我的输入根据写好的逻辑算法直接给出输出,没有自动

IVI 技术在自动测试系统中的应用研究

最近在做一个项目,关于TR组件自动测试系统,其中对测试系统仪器的设置,想底层用IVI 来实现,新的仪器大多支持lan口,厂家都自带IVI 驱动程序,只要按指定步骤就能实现多个厂家的IVI 仪器设置,实现同类仪器的可互换性. 本项目中用到示波器.频谱仪.宽带信号源.微波信号源等仪器.下面讲一下开发IVI 步骤: 1.首先要对IVI 有所了解,IVI 相关信息可从下面网址获得:http://www.ivifoundation.org/default.aspx overview 中大家可以学习IVI

Z-Stack中SimpleApp开关结点加入网络流程

(1)开关结点初始化 这时选择的节点类型是终端节点,所以使用f8wEndev.cfg文件,所以在Zglobals.h文件中,我们可以得到下面的定义 #define ZG_DEVICETYPE_ENDDEVICE        0x02 #define DEVICE_LOGICAL_TYPE   ZG_DEVICETYPE_ENDDEVICE uint8 zgDeviceLogicalType = DEVICE_LOGICAL_TYPE; 开关节点的 IAR 工程配置选项中定义了阻止自定义启动,即

Android中利用OpenMax 编程的基本流程

最近由于公司在做数字电视,播放器和模块由供应商打包一起卖,驱动调通了,可是播放器要硬件解码,和平台差异,原厂又没有相关文档,就自己试着看了一个系统的播放器流程,顺便整理了一下,也方便以后查询,希望对播放器硬解码的开发能起到点作用.由于对视频也不了解,所以难免有不少错误,欢迎高手指导. 1: 由文件或者设备来创建一个dataSource(DataSource) (其中可以是文件描述符fd, uri ,http) 2:  通过dataSource来创建一个MediaExtractor(即视频的分流器

电商的支付前、中、后这3个流程都是怎么设计的?

支付环节对于任何一个涉及到线上交易的网站都是最重要的一个环节,大部分的商业网站都是想让用户将买买买进行到底,如果在支付环节出现问题,让原本就要付款的用户失去购买欲望,后果可想而知.如何在支付环节让提高用户的购买概率?其实现有的很多商务网站的网站在这方面已经做的很成熟了,我们可以多了解这些支付流程的设计,思考为什么这么做,以此作为参考来优化自己产品的支付流程. 支付前 1.触发用户注册登录的条件.对比两大电商平台京东和淘宝,京东允许用户在选购好商品加入购物车,在进入支付环节前才要求用户登录,而淘宝