您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 利用遗传算法解决生产调度问题
利用遗传算法解决生产调度问题范东雪,张雪,韩冰辽宁工程技术大学理学院,辽宁阜新(123000)Email:layincool@163.com摘要:遗传算法(GeneticAlgorithm)是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法,它是有美国Michigan大学J.Holland教授于1975年首先提出来的,并出版了颇有影响的专著《AdaptationinNaturalandArtificialSystems》,GA这个名称才逐渐为人所知,J.Holland教授所提出的GA通常为简单遗传算法(SGA)。由于遗传算法的整体搜索策略和优化搜索方法在计算是不依赖于梯度信息或其它辅助知识,而只需要影响搜索方向的目标函数和相应的适应度函数,所以遗传算法提供了一种求解复杂系统问题的通用框架,它不依赖于问题的具体领域,对问题的种类有很强的鲁棒性,所以广泛应用于许多科学。遗传算法对于决策问题有很好的应用效果,所以本文利用遗传算法来解决生产调度问题。关键词:遗传算法;梯度信息;简单遗传算法1.引言遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(individual)组成[1]。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。因此,在一开始需要实现从表现型到基因型的映射即编码工作。由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择(selection)个体,并借助于自然遗传学的遗传算子(geneticoperators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的昀优个体经过解码(decoding),可以作为问题近似昀优解。2.背景知识介绍2.1遗传算法的现状进入90年代,遗传算法迎来了兴盛发展时期,无论是理论研究还是应用研究都成了十分热门的课题。尤其是遗传算法的应用研究显得格外活跃,不但它的应用领域扩大,而且利用遗传算法进行优化和规则学习的能力也显著提高,同时产业应用方面的研究也在摸索之中。此外一些新的理论和方法在应用研究中亦得到了迅速的发展,这些无疑均给遗传算法增添了新的活力。遗传算法的应用研究已从初期的组合优化求解扩展到了许多更新、更工程化的应用方面。随着应用领域的扩展,遗传算法的研究出现了几个引人注目的新动向:一是基于遗传算法的机器学习[2],这一新的研究课题把遗传算法从历来离散的搜索空间的优化搜索算法扩展到具有独特的规则生成功能的崭新的机器学习算法。这一新的学习机制 对于解决人工智能中知识获取和知识优化精炼的瓶颈难题带来了希望。二是遗传算法正日益和神经网络、模糊推理以及混沌理论等其它智能计算方法相互渗透和结合,这对开拓21世纪中新的智能计算技术将具有重要的意义。三是并行处理的遗传算法的研究十分活跃。这一研究不仅对遗传算法本身的发展,而且对于新一代智能计算机体系结构的研究都是十分重要的。四是遗传算法和另一个称为人工生命的崭新研究领域正不断渗透。所谓人工生命即是用计算机模拟自然界丰富多彩的生命现象,其中生物的自适应[3]、进化和免疫等现象是人工生命的重要研究对象,而遗传算法在这方面将会发挥一定的作用,五是遗传算法和进化规划(EvolutionProgramming,EP)以及进化策略(EvolutionStrategy,ES)等进化计算理论日益结合。EP和ES几乎是和遗传算法同时独立发展起来的,同遗传算法一样,它们也是模拟自然界生物进化机制的只能计算方法,即同遗传算法具有相同之处,也有各自的特点。目前,这三者之间的比较研究和彼此结合的探讨正形成热点。1991年D.Whitey在他的论文中提出了基于领域交叉的交叉算子(Adjacencybasedcrossover),这个算子是特别针对用序号表示基因的个体的交叉,并将其应用到了TSP问题中,通过实验对其进行了验证。D.H.Ackley等提出了随即迭代遗传爬山法(StochasticIteratedGeneticHill-climbing,SIGH)采用了一种复杂的概率选举机制,此机制中由m个“投票者”来共同决定新个体的值(m表示群体的大小)。实验结果表明,SIGH与单点交叉、均匀交叉的神经遗传算法相比,所测试的六个函数中有四个表现出更好的性能,而且总体来讲,SIGH比现存的许多算法在求解速度方面更有竞争力。H.Bersini和G.Seront将遗传算法与单一方法(simplexmethod)结合起来,形成了一种叫单一操作的多亲交叉算子(simplexcrossover),该算子在根据两个母体以及一个额外的个体产生新个体,事实上他的交叉结果与对三个个体用选举交叉产生的结果一致。同时,文献还将三者交叉算子与点交叉、均匀交叉做了比较,结果表明,三者交叉算子比其余两个有更好的性能。国内也有不少的专家和学者对遗传算法的交叉算子进行改进。2002年,戴晓明等应用多种群遗传并行进化的思想,对不同种群基于不同的遗传策略,如变异概率,不同的变异算子等来搜索变量空间,并利用种群间迁移算子来进行遗传信息交流,以解决经典遗传算法的收敛到局部昀优值问题2004年,赵宏立等针对简单遗传算法在较大规模组合优化问题上搜索效率不高的现象,提出了一种用基因块编码的并行遗传算法(Building-blockCodedParallelGA,BCPGA)。该方法以粗粒度并行遗传算法为基本框架,在染色体群体中识别出可能的基因块,然后用基因块作为新的基因单位对染色体重新编码,产生长度较短的染色体,在用重新编码的染色体群体作为下一轮以相同方式演化的初始群体。2005年,江雷等针对并行遗传算法求解TSP问题,探讨了使用弹性策略来维持群体的多样性,使得算法跨过局部收敛的障碍,向全局昀优解方向进化。2.2生物遗传与进化对优化问题的启发组合优化问题可以形式地用二元集(S,f)描述,其中S是解空间,它是由一切可能的解组成的有限集,f是目标函数。组合优化问题是在S中找到一个解,使得其目标函数值达到昀小(或昀大)。 如果一个组合优化问题(S,f)的目标函数在S上只有一个昀小(或昀大)值,则称为凸情况。在这种情况下可以用任何梯度下降(或上升)方法找到昀优解。但在大多数情况下,目标函数在S上存在多个极值点,此时称为非凸情况,在优化计算时,这些局部极值点为全寻优带来困难[4]。2.3遗传算法的特点遗传算法是一类可用于复杂系统优化计算的鲁棒搜索算法,与其他一些优化算法相比,它主要有下述几个特点[5]:(1)遗传算法以决策变量的编码作为运算对象。传统的优化算法往往直接利用决策变量的实际值本身来进行优化计算,但遗传算法不是直接以决策变量的值,而是以决策变量的某种形式的编码为运算对象。这种对决策变量的编码处理方式,使得我们在优化计算过程中可以借鉴生物学中染色体和基因等概念,可以模仿自然界中生物的遗传和进化等机理,也使得我们可以方便地应用遗传操作算子。(2)遗传算法直接以目标函数值作为搜索信息。传统的优化算法不仅需要利用目标函数值,而且往往需要目标函数的导数值等其他一些辅助信息才能确定搜索方向。而遗传算法仅使用由目标函数值变换来的适应度函数值,就可确定进一步的搜索方向和搜索范围,无需目标函数的导数值等其他一些辅助信息。(3)遗传算法同时使用多个搜索点的搜索信息。传统的优化算法从解空间的一个初始点开始昀优解的迭代搜索过程。遗传算法从由很多个体所组成的一个初始群体开始昀优解的搜索过程,而不是从一个单一的个体开始搜索。对这个群体所进行的选择、交叉、变异等运算,产生出的乃是新一代的群体,在这之中包括了很多群体信息。(4)遗传算法使用概率搜索技术。很多传统的优化算法往往使用的是确定性的搜索方法,一个搜索点到另一个搜索点的转移有确定的转移方法和转移关系,这种确定性往往也有可能使得搜索永远达不到昀优点,因而也限制了算法的应用范围。而遗传算法数以一种自适应概率搜索技术,其选择、交叉、变异等运算都是以一种概率的方式来进行的,从而增加了其搜索的灵活性。如何选择遗传算法的参数在其应用中是一个比较重要的问题,而另一方面,与其他一些算法相比,遗传算法的鲁棒性又会使得参数对其搜索效果的影响会尽可能地低。2.4遗传算法的步骤遗传算法的实施过程中包括编码、产生群体、计算适应度、复制、交换、突变等步骤[6]。概括地讲,遗传算法主要执行以下几步。步骤1:对研究的变量或对象进行编码(形成字符串),并随机地建立一个初始群体。步骤2:计算群体中诸个体的适应度。步骤3:执行产生新群体的操作,包括a.复制将适应度高的个体进行复制后添入到新群体中,删除适应度低的个体;b.交换随机选出个体对,进行片段交叉换位,产生新个体对;c.突变随机地改变某个体的某个字符,而得到新个体。步骤4:根据某种条件判断计算过程是否可以结束,如果不满足结束条件,则返回到步骤2,直到满足结束条件为止。 3.用遗传算法解生产调度问题),(,,jiCjiB={}),(,,)1,(,1,,maxjiClkjiCjiEE−−其中),(,,jiclkE为机器C(i,j)上加工工件Ji之前所加工工件Jk的第l道工序的完工时间。我们选择机器的昀长完工时间昀小为目标函数,则目标函数可具体表示为:min∑{Ei,m,c(i,m)}i=1…n一个4×4的加工描述矩阵、加工时间矩阵如下P=1253503213524501Q=3324541653484125412548795641568494该问题的一个调度结果如下:T=4231521323251324Job-Shop调度问题就是在不破坏加工顺序的前提下,怎样在机器上安排工件以达到目标函数式(3-6)的要求,即各工件在机器上的昀佳排列组合,而这种排列组合关系有其内在的序关系,如果假定工件号按由小到大的自然顺序排列,则各台机器上任意两个不同工件之间只有两种序关系(顺序或逆序),这种序关系用二进制表示,顺序为1,逆序为0。例如对第k台机器上的工件Ji和Jj工件(设ij),若Ji在Jj前,则序值为1;若Jj在Ji前,则序值为0。以第k台机器上n个工件的序关系所对应的序值为基因码,可以得到一个长度为n(n-1)/2染色体子串,故m台机器的染色体串总长为mn(n-1)/2。(二进制染色体的产生算法){Fori=1tom/*对m台机器分别编码*/Forj=1ton-1/*对工件号逐个判断先后次序*/Fork=j+1tonifJ[j]⇒J[k]thena[i][p]=1;elsea[i][p]=0;endif;/*如果J[j]出现在J[k]之前,第i台机器上对应的基因码置为1,否则置为0*/初始群体产生时,将N矩阵各行列的元素值初始化为[(0,0)]m×n,我们假定某工件i的第j道工序已加工完毕,则M矩阵的第i行第j列对应元素设为(0,0)。从M矩阵某行随机产生左边第一个不为(0,0)的元素(i,k),得到一个将加工的工件Ji及所在机器k,加工完成后将该元素的变为(0,0),同时将N矩阵中的第k行第一个为0的元素变为(i,k),直到所有工件都加工完毕为止。便得到一个个体。(初始群体产生算法)1)种群已满吗?若是则结束,否则转2)2)初始化N(i,j)=[(0,0)]m×n3)随机产生一
本文标题:利用遗传算法解决生产调度问题
链接地址:https://www.777doc.com/doc-5406299 .html