详谈改进的遗传算法求解柔性作业车间调度问题论文
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详谈改进的遗传算法求解柔性作业车间调度问题论文相关的知识,希望对你有一定的参考价值。
参考技术A详谈改进的遗传算法求解柔性作业车间调度问题论文
0 引言
作业车间调度问题(Job-shop scheduling problem,JSP)是研究生产线调度问题最常用的模型之一,也是实现先进制造和提高生产效率的基础和关键. 柔性作业车间调度问题( Flexible jobshopscheduling problem,FJSP)是传统作业车间调度问题的扩展,在传统的作业车间调度问题中,每个工件的加工工序是确定的,每一道工序的加工机器和加工时间也是确定的,而在柔性作业车间调度问题中,每个工件的每一道工序可以在多个可选择的加工机器上进行加工,并且不同的加工机器所需要的加工时间是不同的,增加了调度的灵活性,比较符合生产的实际情况.
柔性作业车间调度问题已经被证明是更复杂的NP-Hard 问题,因而难以取得最优解. 目前,求解FJSP 的常用方法有禁忌搜索( TS),模拟退火(SA)和遗传算法(GA)等. 其中遗传算法以其操作简单、鲁棒性强、搜索全局最优解速度快等特点,在生产调度领域得到了广泛的应用.
遗传算法是由美国J. Holland 教授于1975 年提出的,是一种模拟自然进化过程的一种优化算法. 由于传统的遗传算法存在着较大的缺陷,国内外学者已从不同角度对其进行了改进,本文对传统遗传算法的初始种群进行了改进,以提高初始解的质量.
1 柔性作业车间调度模型设有n 个待加工工件J(J1,J2,…,Jn),在m台设备上加工M(M1,M2,…,Mm),每个工件Ji有Pi(Pi1,Pi2,…,Pin) 道工序,每道工序可在一台或多台设备上加工,同一道工序在不同设备上加工的时间可能不等,工序Pik的可选机器集为Mik(Mik 罬),每台设备的加工时间从0 开始,加工完所有工件的完成时间为ETMi . 本文以最小化最大完工时间为性能指标,其目标函数为:f(x) = min(max(ETMi)),1 ≤ i ≤ m模型需满足如下约束条件:(1)同一工件的工序加工顺序确定;(2)每道工序必须在它的上一道工序加工完成后才能开始加工;(3)每道工序只能选择一台设备进行操作;(4)每台设备在同一时间只能加工一个工件的一道工序;(5)每道工序在设备上操作时都不允许被中断;(6) 不同工件工序之间没有先后约束条件.一个包含3 个工件、5 台机器的FJSP 的问题.
2 算法的设计
(1) 基因编码
常用的遗传算法编码方案有二进制编码、格雷码编码、矩阵编码、自然数编码等,本文采用自然数编码,每条染色体表示一个可行解,同时采用双层编码,第一层编码为基于工件的工序编码,编码长度为所有工件工序之和,基因值代表工件号,基因值出现的次数代表该工件的工序总数,第二层编码为对应于第一层工件工序的机器编码,所以编码长度也为所有工件工序之和.染色体表示的工序顺序为(O31,O11,O12,O21,O22,O32,O13,O33),染色体表示的机器序列为(M2,M4,M2,M1,M4,M5,M3,M4).
(2)产生初始种群
初始种群的优良对生物进化会产生很大的影响,本文对初始种群的机器选择进行了改进,首先随机生成初始种群的工序编码,工序编码生成后就要对应生成机器编码,每个工件工序在对应可选机器集中选择机器时,是以不同的概率的来选择不同的机器,机器加工时间短的以大概率被选择,相比之下,机器加工时间长的以小概率被选择,这样既保证了机器选择的随机性,也优化了初始种群.
(3)适应度函数的确定
本文以最小化最大完工时间为目标函数,故选择全部工件完工时间作为评价种群优劣的标准,设n 个待加工工件在m(M1,M2,…,Mm) 台设备上加工,所有加工工件工序在设备上的最后完工时间为ETMi(i = 1,2,…,m),T = max(ETMi),则适应度函数fi = 1 /T,T 越小,则适应度越大,即个体越优.
(4)选择
选择操作的目的是为了保留优良个体,使他们可以遗传到下一代. 本文采用精英保留策略和轮盘赌法相结合的方法,对父代个体和子代个体进行选择时直接将最优个体和次优个体遗传到下一代,然后对剩余的个体采用轮盘赌法进行选择,选择出p - 2 个个体到下一代进行遗传操作. 若种群规模为p,个体i 的适应度为fi,则个体i 被选择的概率pi为pi = fi /Σpk = 1fk即适应度越高的个体被选择的概率就越大.
(5)交叉
交叉操作是产生新个体的主要方法,提高全局搜索能力. 本文采用单点交叉方式,即随机产生一个交叉点,交换交叉点后的基因. 从种群中随机选择两个个体,交换两个个体工序编码的交叉点后面的基因,将交叉后工件多余的工序替换为其他工件缺失的工序;机器部分则按交叉前工件工序所选择的机器进行相应调整以保证其子代染色体的`合法性.
(6)变异
变异操作的目的是改变算法的局部搜索能力,有助于维持进化群体的多样性,防止过早陷入局部最优. 本文采用互换方式,即随机产生两个变异点,交换两点的基因值. 从种群中随机选择一个个体,对该个体的工序编码部分随机产生两个变异点,交换两点的基因值,同时将交换的基因位所对应的机器号也进行交换.
3 仿真实例分析
6 × 6(6 个工件,6 台机器) FJSP的加工工序,机器选择和加工时间矩阵表. 分别用标准遗传算法和本文提出的改进遗传算法对工件最小化最大完工时间进行优化计算,并分析优化计算结果.
遗传算法采用以下参数:种群规模为100,进化代数为100,交叉概率Pc = 0. 8,变异概率Pm =0. 1. 算法运行10 次,标准遗传算法的最大完工时间为20,收敛代数为75 代左右;改进遗传算法的最大完工时间为16,收敛代数为35 代左右. 改进遗传算法既缩短了工件完工时间,也加快了收敛代数. 从而验证了改进遗传算法的可行性
4 结论
传统遗传算法在进行种群初始化时采用的大多是随机选择方式,而本文提出了一种新的种群初始化方法,提高了种群初始解的质量. 最后对改进遗传算法进行了仿真实验,并将结果与标准遗传算法进行比较,结果表明了本算法的优越性和可行性.
;车间调度基于matlab候鸟算法MBO求解柔性作业车间调度问题含Matlab源码 2354期
⛄一、车间调度简介
1 柔性作业车间调度问题
FJSP问题可描述为:车间内n个工件在m台机器上加工.各工件均包含一道或多道工序,同工件各工序间存在固定的加工顺序.工序可在多于一台的机器上加工,其加工时间与所在机器有关.FJSP问题优化的目标是为工序分配适当的机器,排列各机器上工序间的加工顺序并计算其开始/完工时间,最终使系统某个或某些性能达到最优[1].
对于这样的系统,存在一些基本的假设条件:
1)初始零时刻所有工件和机器都是可用的.
2)一台机器在某一时刻只允许加工一个工件.
3)各工序的加工过程一旦开始不允许被中断.
4)同工件工序间具有先后加工的约束关系,不同工件工序间则相互独立.
5)各工件具有相同的加工优先级.
6)忽略机器加工工序前所需的调整时间.
高效快速完成生产任务仍然是大多数企业追求的首要目标.因此,本文以最大完工时间Cmax作为优化目标,则目标函数可表示为
其中,Ci表示工件i的完工时间.
2 混合型候鸟迁徙优化算法
候鸟迁徙优化算法是一种新兴的邻域搜索技术,它通过模拟候鸟的自然迁徙行为来实现对目标的优化[10].整个算法分为算法初始化,领飞鸟进化,跟飞鸟进化和领飞鸟替换四个阶段.种群中所有个体构成V字形编队,由领飞鸟开始向队列两端通过搜索个体的邻域解进行进化,最终实现目标的优化.种群中的个体除了搜索自身邻域解进行更新外,还可以搜索其所在队列中前一个个体的邻域解(领飞鸟除外,只搜索自身邻域解).这种搜索机制能够提高算法找到更优解的概率,使算法能够快速地获得最优解,体现了算法的集中搜索能力[13].MBO算法比较适用于求解离散组合优化问题[13],因此,本文针对FJSP问题的特点采取一系列改进措施,使MBO算法能够更好地用于FJSP问题的求解.
2.1 编码/解码方案
由于求解FJSP问题主要是解决机器分配和工序排序两个子问题,因此种群中每个个体可分为两段表示,长度均为车间内的工序总数.前半段表示机器分配方案,后半段表示工序间排序方案,如图1所示.前半段中元素值为工序所在机器的编号,按固定顺序存储,如图1(a)所示;后半段中相同的元素值表示同一工件的不同工序,元素间的先后顺序表示工序间的加工顺序,如图1(b)所示.
解码时结合前后两段编码进行操作,从左到右依次读取后半段元素代表的工序,然后在前半段找到其对应的机器,并计算工序的开始和完工时间.
图1 编码方案
2.2 种群初始化方案
与其他群智能优化算法(如遗传算法和粒子群算法等)相同,候鸟迁徙优化算法的性能也在一定程度上受到种群初始解的影响.因此,设计一个好的种群初始化方案是必须要解决的问题.根据个体编码方式,初始种群可分两个阶段进行初始化,即机器分配阶段和工序排序阶段.
对于机器分配阶段,采用以下3种方法:
1)随机生成法:在每道工序可加工机器集内随机选择一台机器填入初始解的前半段.
2)全局搜索法:采用文献[2]中的全局搜索方法确定初始解前半段机器分配方案,使机器的工作负载平衡,提高机器的使用率,并同时考虑最小化最大完工时间.
3)局部搜索法:采用文献[2]中的局部搜索方法确定初始解前半段机器分配方案,其目的和全局搜索方法一样.
对于工序排序阶段,目前很多文献均采用随机生成法或根据调度规则生成初始排序方案[14,15].本文采用基于搜索的方法得到初始解的后半段.针对每一个已生成的机器分配方案,均采取以下操作:首先随机生成若干个工序排序方案,然后评估每个排序方案结合该机器分配方案后各自对应的目标值,选择其中最优的一组作为初始解.
2.3 邻域结构
候鸟迁徙优化算法中个体通过搜索自身以及排前一个个体的邻域解对问题的解空间进行搜索,以获取优化目标的最优值.因此,邻域解的构造直接影响着算法的求解质量和收敛速度.本文采用以下3种邻域结构,具体构造过程如下:
1)邻域结构N1:在调度解的工序排序部分任意选择两个位置,并将两位置间元素逆序排列.
2)邻域结构N2:在调度解的工序排序部分任意选择两道不同工件的工序,并互换两工序所在的位置.
3)邻域结构N3:在调度解的机器分配部分任意选择一道工序,并将其分配至可选机器集合中(不包括当前机器)加工时间最短的机器上.
2.4 重置机制
在算法中引入一种重置机制,以避免算法陷入局部最优解.具体做法为,首先为种群中每个个体均设置一个解龄.对于新产生的个体,其解龄为1,若经过一次进化后计算结果未发生变化的个体,其解龄加1.若某个个体的解龄超过了预定的上限limit,则对该个体进行重置操作,即采用上述全局搜索法和基于搜索的方法重新生成一个新个体替代原来的个体.
2.5 变邻域搜索
基于上述3种邻域结构设计一种变邻域搜索算法嵌入到候鸟迁徙优化算法中,并作用于当前最优个体,以加强算法的局部搜索能力.
变邻域搜索算法的具体步骤如下:
步骤1:算法初始化.将候鸟迁徙优化算法得到的当前最优解作为变邻域搜索算法的初始解 π,设置qmax←3,it←1及最大循环次数itmax.
步骤2:设置q←1.
步骤3:振动环节.若q=1,则按邻域结构N1和N3对π进行变换得到新解π′;若q=2,则按邻域结构N2和N3对π进行变换得到新解π′;若q=3,则按邻域结构N3对π进行变换得到新解π′.
步骤4:局部搜索.以振动环节得到的π′ 作为局部搜索的初始解,找到局部最优解π″.
步骤5:若π″优于π,则π←π″,并设置q←1;否则,设置q←q+1.
步骤6:判断q>qmax是否成立.若是,设置it←it+1,执行步骤7;否则,转到步骤3.
步骤7:判断it>itmax是否成立.若是,执行步骤8;否则,转到步骤2.
步骤8:变邻域搜索结束.
变邻域搜索算法中局部搜索的具体步骤如下:
步骤1:获取初始解π′,并设置lmax← 3,λ←1和最大循环次数λmax.
步骤2:设置πL.
⛄二、部分源代码
clc;clear
%% 下载数据
% 加工数据包括加工时间,加工机器,机器数,各机器权重,工件数,各工件对应的工序数
load data operation_time operation_machine num_machine machine_weight num_job num_op
%% 基本参数
MAXGEN=200; % 最大迭代次数
sizepop=201; % 种群规模
e=0.5; % 目标值权重
N_size=30; % 邻域解数量
S_size=15; % 共享解数量
G=5; % 巡回次数
G1=20; % 竞争机制1参数
G2=10; % 竞争机制2参数
trace=zeros(2,MAXGEN);
chrom_best=[];
%% =种群初始化==
total_op_num=sum(num_op);
chroms=initialization(num_op,num_job,total_op_num,sizepop,operation_machine,operation_time);
[Z,,,,]=fitness(chroms,num_machine,e,num_job,num_op);
% 将最好的解划分为领飞鸟
[Z_leader,ind]=min(Z);
leader=chroms(ind,:);
% 从chroms中移出领飞鸟,然后划分左右两个跟飞鸟种群
chroms(ind,:)=[];
Z(ind)=[];
sp=(sizepop-1)/2;
lefts=chroms(1:sp,:);
Z_left=Z(1:sp);
rights=chroms(sp+1:end,:);
Z_right=Z(sp+1:end);
%% 迭代过程=
for gen=1:MAXGEN
fprintf(‘当前迭代次数:’),disp(gen)
%% 巡回阶段
for i=1:G
%% 领飞鸟进化
[leader,Z_leader,share,Z_share]=bird_evolution(leader,Z_leader,[],[],…
N_size,S_size,total_op_num,num_machine,e,num_job,num_op);
%% 跟飞鸟进化
% 初始化左右队列的共享解集
share_left=share;
Z_share_left=Z_share;
share_right=share;
Z_share_right=Z_share;
for j=1:sp
% 左队列
[lefts(j,:),Z_left(j),share_left,Z_share_left]=bird_evolution(lefts(j,:),Z_left(j),share_left,Z_share_left,…
N_size-S_size,S_size,total_op_num,num_machine,e,num_job,num_op);
% 右队列
[rights(j,:),Z_right(j),share_right,Z_share_right]=bird_evolution(rights(j,:),Z_right(j),share_right,Z_share_right,…
N_size-S_size,S_size,total_op_num,num_machine,e,num_job,num_op);
end
%% 竞争机制2:队间交叉
% 随机产生G2对位置相同的个体
ind=randperm(sp,G2);
[rights(ind,:),Z_right(ind),lefts(ind,:),Z_left(ind)]= crossover(lefts(ind,:),rights(ind,:),…
Z_left(ind),Z_right(ind),total_op_num,num_machine,e,num_job,num_op);
end
%% 竞争机制1:队内竞争
ind=randperm(sp,G1);
% 左队列
[~,ind1]=sort(Z_left(ind));
lefts(ind,:)=lefts(ind(ind1)😅;
Z_left(ind)=Z_left(ind(ind1));
% 右队列
[~,ind2]=sort(Z_right(ind));
rights(ind,:)=rights(ind(ind2)😅;
Z_right(ind)=Z_right(ind(ind2));
%% 领飞鸟替换
if rand<0.5
% 选择左队列首只跟飞鸟
[leader,Z_leader,lefts,Z_left]=update_leader(leader,Z_leader,lefts,Z_left);
else
% 选择右队列首只跟飞鸟
[leader,Z_leader,rights,Z_right]=update_leader(leader,Z_leader,rights,Z_right);
end
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]姚妮.混合候鸟迁徙优化算法求解柔性作业车间调度问题[J].华中师范大学学报(自然科学版). 2016,50(01)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
以上是关于详谈改进的遗传算法求解柔性作业车间调度问题论文的主要内容,如果未能解决你的问题,请参考以下文章
论文阅读|《 基于强化学习的自适应遗传算法求解柔性作业车间调度问题》
车间调度基于matlab改进的遗传算法求解车间调度问题含Matlab源码 H002期