遗传算法(Genetic Algorithm, GA)是进化算法中产生最早、影响最大、应用最为广泛的一种群智能优化算法[1]. 但遗传算法在理论和应用方面还有很多不足, 如收敛速度慢, 容易陷入局部最优等问题.
Ehrlich和Rave在研究植物和植食性动物的关系时提出了协同进化这一概念, 近年来这一概念已经成为计算智能领域的一个研究热点[2]. 由于协同进化的搜索能力强, 越来越多的优化算法采取了协同进化方式[3-5]. 协同进化研究的应用领域也在不断扩展, 在车间调度[6]、电力调度[7]、机器人路径规划[8]、交通规划[9]等领域都得到了成功应用.
生产调度通过对生产资源的合理安排, 以缩短生产时间和成本, 使资源能够得到更有效的利用, 在生产系统中扮演重要的角色. 其应用领域十分广泛, 涵盖工业、商业等方方面面. 按主流的分类方法, 生产调度可分为单机调度、并行机调度、流水车间调度、作业车间调度等. 其中流水车间调度模型作为典型生产调度模型之一, 是一个NP-hard问题[10]. 该问题主要是安排待加工工件在加工机器上的加工顺序, 最终求解得到的是一个最符合要求的工件加工顺序. 流水车间调度问题有很多的求解方法, 其中包括精确方法、构造型方法、改进型方法等. 精确方法计算量较大, 一般适用于小规模问题. 构造型方法通过一定的规则来构造问题的解, 能够快速构造解, 但是解的质量较差. 改进型算法从若干解出发, 通过对其邻域不断搜索和当前解的替换来改进解的质量, 是解决流水车间调度问题的主要研究方向, 如遗传算法、协同进化算法等. 作为车间调度的典型问题, 流水车间调度问题得到了广泛研究和应用[11].
本文在遗传算法和协同进化框架的基础上, 提出了一种自适应协同进化遗传算法(Adaptive Co-evolutionary Genetic Algorithm, ACGA). 与传统算法相比, 该算法通过两个中间组的进化实现了优质解组和劣质解组个体信息的交互, 兼顾了种群内的自我进化和种群间的共同优化; 同时引入了自适应策略, 根据个体的进化情况采用了自适应变异因子及自适应灾变几率策略. 通过函数优化实验验证了ACGA算法在求解简单问题方面的有效性. 接着描述了流水车间调度模型, 并且使用ACGA算法求解流水车间调度问题, 通过与其他相关算法对该问题求解的对比实验, 验证了ACGA算法求解流水车间调度问题的有效性.
1 协同进化遗传算法及函数优化测试 1.1 自适应协同进化遗传算法协同进化遗传算法的实质是对遗传算法采用协同进化的方式进行优化. 遗传算法的操作算子包括选择、交叉和变异3种基本形式, 构成了遗传算法强大搜索能力的核心, 是模拟自然选择和遗传过程中发生的繁殖、杂交和突变现象的主要载体[12]. 选择因子是按照一定的规则选择出更加符合要求的多个个体组成一个新的种群, 常见的方法包括轮盘赌算法、最佳保留策略等. 交叉因子是两个个体互相交换部分染色体, 最终得到两个新个体, 常见的方法有单点交叉和多点交叉等. 变异是对单个个体的染色体按照一定的规则进行变更, 最终得到一个新个体, 常见方法有单点变异和多点变异等. 其中交叉和变异操作会导致原个体部分染色体发生改变, 可能产生冲突, 需要进行冲突检测. 协同进化遗传算法相比遗传算法在一定程度上增强了优化的效果, 但仍存在搜索速度慢、经常找不到全局最优解的问题.
ACGA算法结合了遗传算法和协同进化算法, 在此基础上引入自适应变异因子以及灾变机制达到自适应的目的, 算法流程图如图1所示.
首先针对收敛速度过慢的问题, ACGA算法采取操作协同. 对原始种群根据适应度值进行分组, 考虑不同组内各个个体的优良情况以及个体差异情况, 优质解组采用多点交叉和单点变异, 尽可能的保持更多优良个体; 劣质解组采用多点交叉搭配多点变异, 产生更多新个体; 中间组采用单点交叉配合多点变异, 完成组与组之间的交叉和变异操作.
针对容易陷入局部最优的问题. 在传统算法中, 变异率通常采取固定数值. 但变异率对于种群优化起着重要作用, 不同阶段甚至于不同种群都需要合适的变异率, 变异率较大时, 容易产生新个体, 跳出局部最优; 变异率较小时容易保留较优个体. 局部最优问题正是由于进化到后期时, 变异率较低, 无法产生新个体, 使得种群内个体的多样性不足. 为解决这个问题, 考虑采用自适应变异率来动态确定[13], 随着迭代次数的增加, 变异率也在动态改变, 来适应种群的进化. 本文根据种群的要求提出了一种自适应变异因子:
$ \lambda {\rm{=e}}^{\frac{{{G-G}}_{\rm{m}}}{{{G}}_{}}}, {{F=F}}_{0}\cdot{2}^{\lambda }$ | (1) |
其中,
在进化初期时,
但仅仅通过调整变异率来增强种群多样性的效果是十分有限的. 当初始变异率
${{u = }}\frac{{\text{π}} }{{2\left( {{{N - }}1} \right)}}\left( {i - 1} \right)$ | (2) |
${P_{\textit{z}}} = \left\{ \begin{array}{l} \cos \left( u \right)\dfrac{{{k_{\textit{z}}}\left( {{T_{\textit{z}}} - {T_a}} \right)}}{{{T_{\max }} - {T_a}}},{T_{\textit{z}}} > {T_a} \\ {k_{\textit{z}}},{T_{\textit{z}}} < {T_a} \\ \end{array} \right.$ | (3) |
其中,
如式(2)、式(3)所示, 首先该自适应概率考虑到了迭代次数的影响, 随着迭代次数的增大,
灾变机制的触发条件也格外重要, 本文的灾变触发条件设置为全局最优值连续3次相同, 只有在这种情况下才触发灾变机制, 否则只采用自适应变异因子.
ACGA算法的步骤如下:
1) 初始化进化参数, 包括最大迭代次数, 种群规模以及3种因子的具体实现形式;
2) 随机生成一个初始种群, 计算种群中个体的适应度值;
3) 对种群内的个体根据适应度值由小到大进行排序, 取适应度值较小那部分的前2/3个体组成优质解组, 取适应度值较大部分的前2/3个体组成劣质解组, 将两部分剩下的1/3部分合并成一个组, 命名为中间组;
4) 对优质解组采用单点交叉以及单点变异, 交叉概率设为0.8, 变异概率设为0.03, 尽可能的保留优质个体; 对劣质解组采用单点交叉以及多点变异, 交叉概率设为0.95, 变异概率设为0.1, 尽可能的产生更多新的个体; 对中间组采用多点交叉以及单点变异, 交叉概率设为0.9, 变异概率设为0.07;
5) 交叉变异之后得到一个临时种群, 计算临时种群中各个个体的适应度值, 当临时种群中相对应个体的适应度值小于当前种群中的个体时, 就使用临时种群中的这个个体更新当前种群, 否则将保持当前种群中的个体;
6) 计算最优解连续相同的次数, 若次数小于3, 则根据式(1)计算当前的变异因子; 若次数大于等于3次时, 根据灾变机制进行灾变;
7) 判断是否满足终止迭代条件, 若是, 输出全局最优解以及最优个体; 若否, 返回步骤3) 继续进行迭代进化.
1.2 函数优化测试为了检验ACGA算法在优化求解方面的性能, 将该算法与GA算法进行了对比, 分别采用ACGA算法和GA算法对以下函数进行求解.
$\left\{ {\begin{array}{l} y = \displaystyle\sum\limits_{i = 1}^N {\left( {{x_i}^2 - 10\cos \left( {2{\text{π}} {x_i}} \right) + 10} \right)}\\ {x_i} \in \left[ { - 5.12,\;5.12} \right],i = 1,\;2,\cdots,\;30 \end{array}} \right.$ | (4) |
该目标函数是传统的多峰函数, 在
从图2可以看出, 在迭代次数相同的情况下ACGA算法的求解结果优于GA算法, 更加接近全局最优解; 在求解结果相同的情况下, ACGA算法的迭代次数也明显小于GA算法的迭代次数. ACGA算法无论在收敛速度还是在求解精度上的表现都要优于GA算法, 展现了ACGA算法的优良性能.
2 ACGA算法求解流水车间调度问题 2.1 流水车间调度问题模型流水车间调度问题主要是研究n个工件在m台机器上进行流水加工, 作为最简单的车间调度模型, 该模型要求每个工件都有m道工序, 同时每台机器只能加工一道工序, 这就意味着每个工件都要经过m台机器的加工; 每个工件在各个机器上的加工顺序相同, 各个工件在各机器上的加工时间和准备时间已知, 优化目标为最小化最大完工时间.
令
$f(x) = \min \{ \mathop {\max }\limits_{1 \le j \le m} \{ \mathop {\max }\limits_{1 \le i \le n} {T_{ij}}\} \} $ | (5) |
1) 初始化算法求解参数, 如种群规模、迭代次数、3种因子的具体实现形式;
2) 根据流水车间调度问题, 采用特定的编码以及解码方式随机生成一个可以进化的初始种群, 根据问题模型计算种群内各个个体的适应度值;
3) 根据适应度值由低到高对种群内的个体进行排序, 将种群平均分成两部分, 并且从两部分中各取该部分适应度值较高的1/3个体组成一个中间组, 用来进行种群间的交叉变异, 同时将剩下的两部分中适应度值较低种群的取为优质解组, 适应度值较高的种群取为劣质解组;
4) 根据不同组的个体特点采取不同的操作, 优质解组采用多点交叉以及单点变异; 劣质解组采用多点交叉和多点变异; 中间组采用单点交叉和多点变异; 变异因子选取自适应变异因子;
5) 操作后得到临时一个种群, 计算该种群中各个个体的适应度值, 并根据适应度值使用临时种群对原种群进行更新操作;
6) 计算全局最优解连续相同的次数, 若次数少于3次, 根据式(1)计算自适应变异率, 并更新之前的变异率; 若次数不少于3次, 计算种群的平均适应度, 根据式(2)和式(3)分情况计算除最优个体之外的每个个体的灾变几率, 将需要灾变的个体根据编码方式随机初始化, 使用灾变最新产生的个体贪婪替换原个体;
7) 判断是否满足终止条件, 若是, 则将得到的全局最优解进行解码, 生成最优的调度方案; 若否, 则返回步骤3, 继续进行.
2.3 仿真实验 2.3.1 实验准备程序运行平台为Windows 10操作系统下的Matlab软件. 输入的种群规模为90, 最大迭代次数为800, 初始灾变概率
分别采用ACGA算法、MDE算法[13]以及GA算法对上述3种规模的数据集进行流水车间调度问题的求解, 以最小化最大完工时间为优化目标. 在实验过程中, 为使结果更加精准, 避免实验偶然性, 每种算法在每个数据集分别运行10次. 实验结果的参考指标主要为10次结果的平均值以及10次结果的方差, 均值和方差越小越好. 均值越小, 说明算法优化的精度越高; 方差越小说明算法的稳定性越高.
仿真结果如表1所示. 首先看10次结果的平均值, 在同等规模、相同问题的情况下, ACGA算法在每一种问题上都可以得到比MDE算法和GA算法更小的完工时间, 而GA算法和MDE算法相比, GA算法更适合较小规模, MDE算法更适合较大规模; 从10次结果的最优值来看, ACGA算法在每种问题下的最优值也小于MDE算法GA算法, 而MDE算法与GA算法的对比情况与均值类似; 从10次结果的方差来看, ACGA算法的方差明显要小于GA算法和MDE算法, MDE算法在小规模情况下比GA算法稳定, 较大规模下的稳定性不如GA算法, 从这3个指标可以看出ACGA算法的求解效果更加稳定. 由此可以得出结论, ACGA算法在求解流水车间调度问题方面与GA算法和MDE算法相比, 求解结果更加精准, 求解效果更加稳定, 精确性和稳定性都是最佳的.
图3给出了使用ACGA算法对数据规模为20×5进行流水车间调度得到的甘特图.
3 结论与展望本文提出了自适应协同进化遗传算法, 该算法通过引入自适应策略、灾变机制以及协同进化思想, 适当加快收敛速度, 提高优化效果. 通过函数优化实验, 验证了ACGA算法的可行性和有效性. 用ACGA算法求解以最小化最大完工时间为指标的流水车间调度问题, 通过与GA算法和MDE算法对比, 取得了满意的调度效果, 具有一定的应用价值. 接下来的研究工作将着重于研究ACGA算法使用不同变异因子及灾变因子的优化效果, 以及ACGA算法在其它车间调度问题中的应用.
[1] |
林诗洁, 董晨, 陈明志, 等. 新型群智能优化算法综述. 计算机工程与应用, 2018, 54(12): 1-9. DOI:10.3778/j.issn.1002-8331.1803-0260 |
[2] |
Ehrlich PR, Raven PH. Butterflies and plants: A study in coevolution. Evolution, 1964, 18(4): 586−608. |
[3] |
张鹏. 多蜂群协同进化算法及其应用研究[硕士学位论文]. 济南: 山东师范大学, 2014.
|
[4] |
刘朝华, 李小花, 章兢. 精英免疫克隆选择的协同进化粒子群算法. 电子学报, 2013, 41(11): 2167-2173. DOI:10.3969/j.issn.0372-2112.2013.11.009 |
[5] |
刘振, 鲁华杰, 刘文彪. 自适应协同进化蝙蝠算法. 控制与决策, 2019, 34(8): 1626-1634. |
[6] |
于晓义, 孙树栋, 褚崴. 基于并行协同进化遗传算法的多协作车间计划调度. 计算机集成制造系统, 2008, 14(5): 991-1000. |
[7] |
宋晓英, 王艳松. 基于协同进化遗传算法的微网经济环保调度. 电力系统保护与控制, 2014, 42(5): 85-89. DOI:10.7667/j.issn.1674-3415.2014.05.014 |
[8] |
冯涛. 基于协同进化算法的多机器人路径规划研究[硕士学位论文]. 南京: 南京邮电大学, 2015.
|
[9] |
雷明, 孟学雷. 基于协同进化遗传算法的高速铁路运行调整研究. 铁道科学与工程学报, 2017, 14(6): 1137-1145. DOI:10.3969/j.issn.1672-7029.2017.06.004 |
[10] |
Garey MR, Johnson DS, Sethi R. The complexity of flowshop and jobshop scheduling. Mathematics of Operations Research, 1976, 1(2): 117-129. DOI:10.1287/moor.1.2.117 |
[11] |
刘长平, 叶春明. 求解置换流水车间调度问题的布谷鸟算法. 上海理工大学学报, 2013, 35(1): 17-20. DOI:10.3969/j.issn.1007-6735.2013.01.004 |
[12] |
梁静, 刘睿, 瞿博阳, 等. 进化算法在大规模优化问题中的应用综述. 郑州大学学报(工学版), 2018, 39(3): 15-21. |
[13] |
颜学峰, 余娟, 钱锋, 等. 基于改进差分进化算法的超临界水氧化动力学参数估计. 华东理工大学学报(自然科学版), 2006, 32(1): 94-97, 124. DOI:10.3969/j.issn.1006-3080.2006.01.022 |
[14] |
程俊, 顾幸生. 灾变合作型协同进化遗传算法及其在Job Shop调度中的应用. 华东理工大学学报(自然科学版), 2007, 33(5): 704-707, 732. DOI:10.3969/j.issn.1006-3080.2007.05.024 |
[15] |
叶彦斐, 童先洲, 刘之境. 一种基于改进遗传算法的柔性车间调度方案. 国外电子测量技术, 2020, 39(9): 122-127. |
[16] |
周艳平, 蔡素, 李金鹏. 一种粒子群和改进自适应差分进化混合算法及在生产调度中的应用. 计算机测量与控制, 2019, 27(8): 227-230. |
[17] |
王凌. 车间调度及其遗传算法. 北京: 清华大学出版社, 2003.
|