基于遗传算法求解作业车间调度问题生产运作实践文档格式.docx
- 文档编号:20305187
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:31
- 大小:349.06KB
基于遗传算法求解作业车间调度问题生产运作实践文档格式.docx
《基于遗传算法求解作业车间调度问题生产运作实践文档格式.docx》由会员分享,可在线阅读,更多相关《基于遗传算法求解作业车间调度问题生产运作实践文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
(1.1)
:
机器顺序阵,此为
(i,j)表示i工件的第j道工序的机器号,
表示i工件的所有工序按优先顺序加工的各机器号的排列。
注意:
如果某工件的工序数不足
(1.2)
T:
加工时间阵,此为
T(i,j)表示工件i的第j道工序在
(i,j)上的加工时间。
同样地,如果某工件的工序数不足
(1.3)
工件排列阵,此为
表示在i机器上排在第j位加工的工件号,
表示i机器上依次加工的各工件的排列。
同上,如果某工件的工序数不足
事实上,工件排列阵就是调度的一种表示形式。
由此,我们可以给出一般性的车间作业调度数学模型的定义:
如果对应于一个确定的
,满足
或
。
即
使得目标函数
取值最小(或最大),且与
相容,则称
为车间作业调度问题在此目标函数下的最优解。
2.基本遗传算法
遗传算法是一种基于自然群体遗传演化机制的高效探索算法,由美国学者Holland于1975年首先提出来的,通过模拟达尔文的遗传选择和自然淘汰的生物进化过程来求解。
它将问题域中的可能解看作是群体的一个个体或染色体,并将每一个体编码成符号串形式,对群体反复进行基于遗传学的操作(遗传,交叉和变异),根据预定的目标适应度函数对每个个体进行评价,依据适者生存,优胜劣汰的进化规则,不断得到更优的群体,同时以全局并行搜索方式来搜索优化群体中的最优个体,求得满足要求的最优解。
2.1遗传算法的基本思路
1.首先确定问题的求解空间;
2.将求解空间中的每一个点进行编码,并从求解空间中任选N个点组成初始群体;
3.计算当前群体中每个个体的适应度函数值,然后运用选择、交叉、变异算子产生新一代群体;
4.对新一代群体中的每个个体进行评价,若找到满足问题的最优解则结束;
否则,转步骤3。
2.2基本遗传算法参数说明
对遗传算法性能有影响的参数主要有:
种群数目N、交换概率Pc、变异概率Pm、代沟G、尺度窗口W、和选择策略S等。
1.种群数目
种群数目N的多少直接影响到遗传算法的优化性能和效率。
种群选择太小时,不能提供足够多的个体,致使算法性能较差,易产生早熟收敛,甚至不能得到可行解;
种群选择过大时,虽然能避免早熟收敛,但是增加了计算量。
2.交换概率
交换概率Pc用于控制交换操作的频率。
交换概率太大的时,易产生更新过快,从而破坏掉高适应度个体的现象;
交换概率太小的时候又容易产生搜索停滞不前的现象。
3.变异概率
变异概率Pm对于增加种群多样性具有重要意义。
如果变异概率太大的时,遗传算法易变成随机搜索,如果变异概率太小,则不能产生新个体,不利于种群的多样性。
4.代沟
代沟G用于控制每一代群体被替换的比例,每代有N×
(1-G)个父代个体选中进入下一代种群中,该参数和交换、变异概率以及选择策略有很大关系,它并不是一个初始参数,而是评价遗传算法的一个参数。
5.尺度窗口
该参数用于作出由目标值到适应度函数值的调整。
6.选择策略
一般来说有两种选择策略,一种为纯选择,种群中每个个体根据其适应度值进行比例选择,即个体被选择的概率与其适应度值成正比。
另一种为保优策略,首先进行纯选择,把目前最优个体直接加入下一代种群中,该策略是为了防止最优解的丢失,但在实际应用中往往采取这两种选择策略结合的方法,并做适当的变型。
3.用遗传算法对具体问题的解决
遗传算法在解决作业车间调度问题上比经典的启发式算法好,同时遗传算法比传统的搜索技术有更强的优越性,因为它不仅能解决某一特定问题,而且可以适应不同的问题形式。
3.1参数编码
遗传编码技术是实施遗传算法的核心。
遗传算法的工作基础是选择适当的方法表示个体和问题的解,对于同一问题可以有不同的编码表示方法。
由于遗传算法不能直接处理空间解的数据,在解决此车间调度问题上把它们转换成遗传空间的基因按一定结构组成的染色体或个体,也就是通过编码将它们表示成遗传空间的基因型串结构数据。
我们采用了基于操作的编码来解此车间调度问题,其基本思想是将所有工件的操作进行编码,不同的工件用不同的编码表示,而同一工件的所有操作在染色体中则用相同的编码表示,其解码原则是将染色体上的基因按照从左到右的顺序解释为相应工件的操作顺序,具有相同编码的基因按照其在整个染色体中的位置解释为工件相应顺序的操作。
表3.1加工时间和工艺约束
项目
工件
操作序列
1
2
3
操作时间
J1
J2
J3
5
机器
M1
M2
M3
3.2初始种群的生成
在N个工件M台机器的排序问题中,对每个机器的加工存在加工工艺顺约束,这个工艺约束表示为工件的加工顺序矩阵:
M11M12…M1M
M(J,M)=M21M22…M2M
:
:
(3.2)
Mn1Mn2…MnM
其中第J行表示第J个工件的机器顺序.机器号为零表示工件加工结束。
相应的每个加工操作有时间矩阵:
T11T12…T1M
T21T22…T2M
T(J,M)=:
(3.3)
TN1TN2…TNM
其中第J行表示第J个工件的机器加工时间,时间为零表示工件不在机器上加工。
因为群体中的个体都是由工件的符号组成的,而且工件任意排列总能产生可行调度,所以可以采用随机方法产生初始种群。
3.3个体的适应度函数
在遗传算法中,适应度是描述个体性能的主要指标。
根据适应度的大小,对个体进行优胜劣汰。
适应度是驱动遗传算法的动力。
从生物学角度讲,适应度相当于“生存竞争,适者生存”的生物生存能力,在遗传过程中具有重要意义。
适应度函数就是目标函数,在用遗传算法解决车间调度问题里,定义个体的适应度函数为在M台机器上排序加工完N个工件所需的时间,根据染色体编码的思想提出的适应度算法如下:
STEP1:
定义ti(n)为每个工件的可加工时间,初始化向量为零向量。
STEP2:
chrom(i)对应相应工序的加工机器为machiner(i)。
ti(chrom
(1))=ti(chrom
(1),machine
(1))
STEP3:
fori=2ton
Fork=1ton
ti(chrom(i))=ti(chrom(i-1))+max(ti(chrom(i-k),machine(i-k)+k))其中若当i-k<
=0,则ti(chrom(i-k),machine(i-k))=0,还有要判断chorm(i)所对应的工件在以前是否加工过,若加工过,则ti(chrom(i))=ti(chorm(i-1))。
STEP4:
求出适应度函数F=ti(chorm(n))。
3.4遗传算子的设计
1.选择算子
选择操作是对自然界“适者生存”的模拟。
评价值(目标函数)较小的个体有较高的概率生存,即在下一代群体中再次出现。
我们采用一种常用的选择方法:
按比例选择,即若个体i适应值(目标函数)是fi,则个体在群体中复制(再生)的子代个数在群体中的比例将为:
其中,∑fi表示指所有个体适应值之和。
对群体中各个体的适应值做比较,将适应值小的个体复制,将适应值大的淘汰掉,这是因为在作业调度算法中的适应度函数为在M台机器上加工完N个工件所需的时间,时间越短,更能达到优化的目的。
2.交叉算子
在用遗传算法解决作业车间调度问题中,在对工序编码的排序问题中,交叉算子不能简单交换两个个体的相应位置的基因段,因为这样得到的后代个体可能不能满足每个工件号重复M次的要求。
为了满足我们的工序编码的要求,本文采用下面的交叉算子:
随机将工件集合{1,2,…N}分成两个互补子集,相应的将个体的基因分成两个部分,然后把父母个体中的part2部分用h代替形成两个新串,用第二个父母个体的part2部分按照原来的相对顺序逐个替换第一个父母个体的part2产生的新串中的h,同样用第一个父母个体的part2按照原来的相对顺序逐个替换第二个父母个体的prat1产生的新串中的h,得到两个后代个体。
例如:
对于一个4个工件4个机器问题,假如父母个体为:
Parent1:
1342423314321421
Parent2:
3241123442312413
假设随机选择工件1,2,则从parent1得到的新串为:
New1:
1hh2h2hh1hh21h21
Part1:
12212121
Part2:
34433434
同样从Parent2得到的新串为
New2:
h2h112hhh2h12h1h
21122121
34344343
然后用Parent2个体的part2:
34344343按照原来的相对顺序逐个替换第一个父母个体Parent1产生的新串New1:
1hh2h2hh1hh21h21中的h,得到的后代个体为:
Parent1':
1342324413421321
同理用Parent1个体的part2:
34433434按照原来的相对顺序逐个替换第二个父母个体Parent2产生的新串New2:
h2h112hhh2h12h1h中的h,得到的后代个体为:
Parent2′:
3241124332412314
3.变异算子
在做变异时,先对解群以一定的概率进行突变操作。
在此作业调度算法中,不能简单的将基因的值做改变。
由于问题及其表示的特殊性,这样简单的改变可能是没有意义的。
我们使用如下变异方法:
随机产生一个整数,确定变异位置,然后,把该位置的基因与其前面的基因互换位置。
同样,以132312312为例,假设变异位置为2,则变异前后的基因链码为:
变异前:
132312312
变异后:
312312312
3.5遗传算法终止条件
从查阅的资料来看,大多是以优化时间或迭代次数或适应度的增量或其他参数作为终止条件的,我们采用以迭代次数作为是否终止的条件,从而控制优化过程。
4.模型的求解
假设交叉概率Pc=100%,变异概率Pm=25%,群体规模为6,加工顺序矩阵:
T=[136736;
851010104;
548917;
555389;
935431;
3391041;
];
M=[201354;
124503;
235014;
102345;
214503;
135042;
运行程序结果如下,最短时间为61,
最后,由仿真得到6×
6的曲线图3.3和甘特图3.4,图中显示了适应度值为6个工件在6个机器加工所需的最短时间,对应得工序即为工件的加工顺序。
图3.3中实线代表最优解的变化,虚线代表种群均值的变化。
图3.4表示了工件6×
6的调度。
图3.3曲线图
图3.4甘特图
5.结论总结
作业车间调度问题是计算机集成制造系统工程中的一个重要组成部分,它对企业的生产管理和控制系统有着重要的影响,在当今的竞争环境下,如何利用计算机技术实现生产调度计划优化,快速调整资源配置,统筹安排生产进度,提高设备利用率已成为许多加工企业面临的重大挑战。
6.附录
主程序:
%将机器号+1
fori=1:
6
S=M(i,:
);
forj=1:
S(j)=S(j)+1;
end
M(i,:
)=S;
end
PNumber=6;
%零件个数6
MNumber=6;
%机器个数6
WPNumber=[666666];
%将时间处理下
TTemp=T;
6
TTemp(i,j)=T(M(i,j),i);
end
NIND=40;
%个体数目(Numberofindividuals)
MAXGEN=200;
%最大遗传代数(Maximumnumberofgenerations)
GGAP=0.9;
%代沟(Generationgap)
XOVR=0.8;
%交叉率
MUTR=0.6;
%变异率
gen=0;
%代计数器
trace=zeros(2,MAXGEN);
%寻优结果的初始值
WNumber=0;
PNumber
WNumber=WNumber+WPNumber(1,i);
%工序个数
%初始化群
Chrom=zeros(NIND,WNumber);
NIND
Chrom(i,:
)=randperm(WNumber);
%计算目标函数值
[PValObjVP]=cal(Chrom,NIND,T,M,PNumber,MNumber,WPNumber);
whilegen<
MAXGEN
FitnV=ranking(ObjV);
%分配适应度值(Assignfitnessvalues)
SelCh=select('
sus'
Chrom,FitnV,GGAP);
%选择
SelCh=across(SelCh,NIND*GGAP,XOVR,WNumber);
%交叉
SelCh=aberrance(SelCh,NIND*GGAP,MUTR,WNumber);
%变异
[PValObjVSelP]=cal(SelCh,NIND*GGAP,T,M,PNumber,MNumber,WPNumber);
%计算目标函数值
[ChromObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
%重插入子代的新种群
[PValObjVlP]=cal(Chrom,NIND,T,M,PNumber,MNumber,WPNumber);
gen=gen+1;
%代计数器增加
%%输出最优解及其序号,并在目标函数图像中标出,Y为最优解,I为种群的序号
trace(1,gen)=min(ObjV);
%遗传算法性能跟踪
trace(2,gen)=sum(ObjV)/length(ObjV);
%初始化
ifgen==1
Val1=PVal;
Val2=P;
MinVal=min(ObjV);
%记录最小的工序
ifMinVal>
trace(1,gen)
MinVal=trace(1,gen);
PVal=Val1;
%工序时间
P=Val2;
%工序
MinVal=MinVal%最小时间
%计算解的变化
holdon;
plot([0,0],[0,0]);
plot(trace(1,:
));
plot(trace(2,:
),'
-.'
grid;
legend('
解的变化'
'
种群均值的变化'
%显示结果
figure
(2);
WNumber
val=P(1,i);
a=(mod(val,10))+1;
b=((val-a+1)/10);
mText=M(b,a);
PlotRec(PVal(1,i),PVal(2,i),mText);
holdon;
mPoint1=PVal(1,i);
mPoint2=PVal(2,i);
x1=mPoint1;
y1=mText-0.5;
x2=mPoint2;
y2=mText-0.5;
x3=mPoint2;
y3=mText;
x4=mPoint1;
y4=mText;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,0.5,1]);
word=num2str(P(1,i));
%text(0.5*mPoint1+0.5*mPoint2,mText-0.5,word);
text(mPoint1,mText-0.7,word);
end
M文件如下:
aberrance.m
functionChromNew=aberrance(Chrom,NIND,MUTR,WNumber)
%新群
ChromNew=Chrom;
NIND
%是否变异
a=rand;
ifMUTR>
a;
%变异位置
Pos1=unidrnd(WNumber);
Pos2=unidrnd(WNumber);
%变异位置不相同
whilePos1==Pos2
%取数据
S=Chrom(i,:
%交换
temp=S(Pos1);
S(Pos1)=S(Pos2);
S(Pos2)=temp;
ChromNew(i,:
across.m:
functionChromNew=across(Chrom,NIND,XOVR,WNumber)
%%交叉位置
%Pos1=fix((1-XOVR)*WNumber);
%Pos2=fix(XOVR*WNumber);
%随机选择交叉个体
SelNum=randperm(NIND);
%fori=1:
%SelNum(i)=unidrnd(NIND);
%end
%交叉个体组个数
Num=NIND/2;
Num=2*fix(Num);
2:
Num
ifXOVR>
Pos3=unidrnd(WNumber);
Pos4=unidrnd(WNumber);
ifPos1>
Pos2
temp=Pos1;
Pos1=Pos2;
Pos2=temp;
whilePos3==Pos4
ifPos3>
Pos4
temp=Pos3;
Pos3=Pos4;
Pos4=temp;
%取交换的个体
S1=Chrom(SelNum(i),:
S2=Chrom(SelNum(i+1),:
%初始化新2个体
S11=zeros(1,WNumber);
S22=zeros(1,WNumber);
%新个体中间部分的COPY
forj=Pos1:
S11(j)=S1(j);
%S22(j)=S2(j);
forj=Pos3:
S22(j)=S2(j);
%交换个体1
WNumber
flag=ismember(S2(j),S11);
ifflag==0
k=1;
whilek<
=WNumber
ifS11(k)==0
S11(k)=S2(j);
k=WNumber+1;
k=k+1;
%交换个体2
flag=ismember(S1(j),S22);
whi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 遗传 算法 求解 作业 车间 调度 问题 生产 运作 实践
![提示](https://static.bdocx.com/images/bang_tan.gif)