matlab生产调度问题及其优化算法_第1页
matlab生产调度问题及其优化算法_第2页
matlab生产调度问题及其优化算法_第3页
matlab生产调度问题及其优化算法_第4页
matlab生产调度问题及其优化算法_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

生产调度问题及其优化算法(采用遗传算法与MATLAB编程)信息014 孙卓明二零零三年八月十生产调度问题及其优化算法背景及摘要这是一个典型的Job-Shop动态排序问题。目前调度问题的理论研究成果主要集中在以Job-Shop问题为代表的基于最小化完工时间的调度问题上。一个复杂的制造系统不仅可能涉及到成千上万道车间调度工序,而且工序的变更又可能导致相当大的调度规模。解空间容量巨大,N个工件、M台机器的问题包含(N!)M种排列。由于问题的连环嵌套性,使得用图解方法也变得不切实际。传统的运筹学方法,即便在单目标优化的静态调度问题中也难以有效应用。本文给出三个模型。首先通过贪婪法手工求得本问题最优解,既而通过编解码程序随机模拟优化方案得出最优解。最后采用现代进化算法中有代表性发展优势的遗传算法。文章有针对性地选取遗传算法关键环节的适宜方法,采用MATLAB软件实现算法模拟,得出优化方案,并与计算机随机模拟结果加以比较显示出遗传算法之优化效果。对车间调度系列问题的有效解决具有一定参考和借鉴价值。一.问题重述某重型机械厂产品都是单件性的,其中有一车间共有A,B,C,D四种不同设备,现接受6件产品的加工任务,每件产品接受的程序在指定的设备上加工,其工序与加工周期如下表:(S-设备号、T-周期)产品\12345678STSTSTSTSTSTSTST1C8A2B4C24D62A4D5B3C43C3D7A15B20A84B7C6D21A1D16C35D10B4C8D4A12C6D16A1B4A7C3D5A2C5A8(表一)条件:1、每件产品必须按规定的工序加工,不得颠倒;2、每台设备在同一时间只能担任一项任务。(每件产品的每个工序为一个任务)问题:做出生产安排,希望在尽可能短的时间里,完成所接受的全部任务。要求:给出每台设备承担任务的时间表。注:在上面,机器A,B,C,D即为机器1,2,3,4,程序中以数字1,2,3,4表示,说明时则用A,B,C,D二.模型假设1.每一时刻,每台机器只能加工一个工件,且每个工件只能被一台机器所加工,同时加工过程为不间断;2.所有机器均同时开工,且工件从机器I到机器J的转移过程时间损耗不计;3.各工件必须按工艺路线以指定的次序在机器上加工多次;4.操作允许等待,即前一操作未完成,则后面的操作需要等待,可用资源有限。三.符号说明及初始数据表达分析J-第i个工件 (i=l・・・6)J-机器顺序阵 J j)表示i工件的第j个操作的机器号MMM-第j台机器 (j=l・・・4)M-工件排列阵 M(i,j)表示i机器上第j次加工的工件号JJT-加工时间阵T(i,j)为i工件的第j个操作的时间周期C-整个任务完成时间整理数据后得到:J=[M[CABCD000]T=[824246000]ADBC0000][45340000][CDABA000][3715208000][BCDADC00][7621116300][DBCDACD0][1048412610][ABACDACA][14735258]上述二阵直接从题目得出,而M则是我们要求的关于工件的加工时间表:(表二)产品/工件(i):123456总计J总净加工时间(周期)441653544535247iJ加工工序总数(个) i 154567835关于机器的加工时间表:(表三)机器/设备(j):ABCD总计M总净加工时间60427075247jM加工操作次数10610935分析:由于各产品总净加工时间和各机器总净加工时间之中最大值为75,而总计为247,那么总时间C介于[75,247]。同时各工件加工繁杂程度不一,各机器的任务量也有轻重之别。合理的调度排序是对于节省时间和资源是必要的。

希望最优化答案是75,这样达到最小值,如果答案是75,那么意味着机器D不间断工作,直至全部加工任务完成。四.贪婪法快速求解如果按照一定规则排序,当多个工件出现“抢占”同一机器的局面的时候,我们可以制定如下的工序安排规则:优先选择总剩余时间或总剩余操作较多的工件。(如果出现总剩余加工时间多者总剩余操作数反而较少的情况时,按照程度具体情况具体分析)。机器方面来说,尽量避免等待空闲时间,优先考虑剩余净加工时间或者剩余加工总次数较多的机器,尤其是机器D,即倘若能够使机器D不间断工作且其他机器完工时间均不多余75时,那么就可以得到最优解。首先按照最优化时间为75的设想避免D出现等待,排序后得到升以下具体排列顺序。10203040506070801020304050607080各机器承担任务表为(其中粗体字为对应工件产品号,括号内为对应时间周期段):操作1操作2操作3操作4操作5操作6操作7操作8操作9操作10A6216345636(1)(2-5)(12-13)(14-20)(21-35)(36)(43-54)(55-56)(57-64)(66-73)B465132(1-7)(8-11)(12-15)(16-19)(36-55)(56-58)C3145615624(1-3)(4-11)(12-17)(18-25)(26-28)(29-52)(55-60)(61-65)(66-69)(70-72)D534562415(1-10)(11-17)(18-38)(39-42)(43-47)(48-52)(53-68)(69-74)(75)(表四)1462715161228817444162033868 32426 5431072145 51661A机器B机器C机器D机器(图一)上图为加工周期图(甘特图),标注数字为相应操作的周期,完工时间为第75周期。五.计算机随机模拟(编程)1.编码:随机产生生产的工序操作优先顺序,进行编码,如:K=[43566231416354536641551326224415665](注:同时作为下文的染色体之用)意思为:工件4优先被考虑进行第一次操作,然后3进行其第一步操作,然后5操作,6操作,再6操作其第二步工序,依次进行。如果前后互相不冲突,则可同时在不同机器上操作。通过排列组合得出,总共有类似K的排列序列21023多种!当然,这其中只对应解[75,247],意味着有大量排列序列对应同一加工方案,而大量加工方案又对应同一时间解。2.解码:即对编码进行翻译,产生具体可操作工序安排方案,这里采用活动化解码算法。例如工件2第i步操作(记为J(2,i),且在机器A上进行)被安排在工件3第j步操作(记为JM(3,j))后面进行,那么如果安排好JM(3,j)后,只要J(2,i)在工件2已经排序好的操作之后进行,那么操作J(2,i)可插入到机器A处最前可安置的时间段进行。在这里,一个编码序列对应一个加工方案,而一个加工方案可对应一个或多个编码序列,这就是二者之关系。3.编程:通过一组随机编码产生一生产加工优先序列,通过解码过程产生相应加工方案及其总耗费时间C.N次模拟后即可得出解C的概率密度分布情况以及相对最优解(N个C的最小值,如80,77等,甚至出现75)。4.计算机模拟所得数据分析进行100次模拟得出最优解情况:(共运行10次)82,83,82,84,78,80,81,83,87,82平均值82.2,每回耗时约3秒进行1000次模拟得出最优解情况:(共运行10次)80,79,78,78,79,79,76,80,77,78平均值78.4,每回耗时25秒进行10000次模拟得出最优解情况:(共运行10次)76,77,77,75,76,76,77,76,76,77平均值76.3,每回耗时4分钟模拟1000000次得到的解C的概率密度分布情况为: (如图二所示)注:75处为17次(概率为17/1000000=1/58823),76处为40次,77处167次)结论:如果想将2X1023中排序序列以平均出现一次的可能性进行模拟,即运行2X1023次,计算机需运行将近150万亿年!当然,我们没有这个必要,因为我们只需要运行数万次,就很可能得到最优解75,(在随机模拟1000000次后出现17次75,那么意味着概率大约17/1000000=1/58823,另外76处为40次,77处167次)。六.遗传算法模型建立和步骤解法遗传算法(GeneticAlgorithm)作为一种优化算法特别适合于对象模型难于建立、搜索空间非常庞大的复杂问题的优化求解。它和模糊控制技术一样,虽然在理论上还没有完善,但是在实践中已经得到了广泛的应用。遗传算法的基本思想是:模仿生物系统“适者生成"的原理,通过选择、复制、交叉、变异等简单操作的多次重复来达到去劣存优的目的,从而获得问题的优化结果。遗传算法的实现由两个部分组成,一是编码与解码,二是遗传操作。其中遗传操作又包括选择、复制、交叉、变异等步骤。本文根据实际情况采取了1-6整数编码。数字1,2,3,4,5,6分别代表6件待加工产品。本文遗传算法基本流程:通过编码,解码程序随机产生N个(有一定数量,如50或100)个体构成初始种群a) 从初始中群中选取2个具有最优染色体(最有排序方案)的个体作为临时个体(父代);b) 如果此2个体中有一个个体通过解码操作能够实现最优排序(即使总时间为75周期),那么结束此算法,得到最优解;c) 对2个临时个体以一定方式(循环交叉)执行染色体交叉变换和变异选择(小概率,互换操作),产生2个新的个体;d) 对父代和子代共4个个体进行选择,从中选出最佳的2个个体,做为下一代的父代;e) 重复执行第二步(b)操作;f) 如果执行完M步后仍然未得出答案75,那么将目前的最优解作为本算法的最优解答案。

1.编码和解码(同上)2.交叉变换(crossover)对2个父代临时个体进行染色体交叉变换,采用循环交叉方法(CyclecrossoverCX),如父代染色体为:X:[926473581]和Y:[345816729],如果随机选到第二位开始交叉,那么X的2对应Y的4,X的4对应Y的8,X的8对应Y的2,这样就确定了以上为不变的染色体,其余位置的染色体互换位置,最后得到X':[325416789],Y':[946873521],实现交叉变换。3.变异选择(mutation)采用互换操作(SWAP),,即随机交换染色体中两不同基因的位置。如上面的染色体为:X':[325416789]。随机产生变换位置号,如产生随机数3和5,那么交换数字后得到染色体:[321456789],变异概率取0.1 。选择操作(selection)对父代2个体f1,f2和子代2个体f3,f4进行选择,通过编码操作确定具有最优解的2个个体,成为新一代f1和f2。如此,通过多次编码和解码随机产生一定数量的个体,选取2个最佳个体进行交叉变换操作,产生2个新个体,然后对4个个体进行选择,产生下一代,如果某时刻通过解码操作得出最优解(所有解的下限,这里是75周期),那么算法结束,否则循环进行,直至预先给定的循环次数达到为止,以最后得到的最优解作为最终最优解。七•遗传算法模拟(采用MATLAB工具编程)主程序如下:(子程序见略)%本程序为主程序,调用以下各分支程序task='Welcome!Waitamomentplease!---Writer:孙卓明,信息014',% 此步避免初始染色体% 此步避免初始染色体f1,f2相同,导致以下死循环%种群初始化;基于操作的编码策略;活动化解码算法;chushijie(N)参数N为初始种群数%选取的第一个初始个体%再次种群初始化%选取的第二个初始个体% e=1:M进行M次遗传操作(交叉-变异-选择)%交叉变化(循环交叉操作,cyclecrossoverCX),选取“染色体”无需变动部分基因%生成交叉后的“染色体”,并进行变异选择%选择:对父代f1,f2和子代f3,f4进行解码,得出2个较优个体,成为下一代的父代(N);(N);[minminmax1,s1]=chushijief1=s1;minminmax1,(N)[minminmax2,s2]=chushijie;f2=s2;minminmax2,end;fore=1:M;[D]=jiaocha(f1,f2);f1;f2;[f3,f4]=jiaocha_bianyi(f1,f2,D);f3;f4;[f1,f2]=xuanze(f1,f2,f3,f4);f1;f2;[minmaxfl,al,bl]=tongbujinzhan(fl);%求该时刻个体fl的最优时间(因为fl优于f2)ifminmaxf1==75;fl,al,bl,minminmaxl,minminmax2,minminmax_last=minmaxfl,task='Finish!Successful!Bestanswer!Congratulation!',return;end;end;fl,al,bl,minminmaxl,minminmax2,minminmax_last=minmaxfl,ifminminmax_last>=90;task='Finish!Actionagainplease!',end;ifminminmax_last>=80&&minminmax_last<90;task='Finish!',end;ifminminmax_last<80;task='Finish!Successful!',end;八.遗传算法模拟结果首先给出最优方案:在进行某次n=100,m=200的操作后得到模拟最优结果75周期时间:minminmaxl=83minminmax2=78(二个初始较优个体解)fl=[45663l36456l325453l52645646643225ll](fl为各工件优先选择顺序排列,即“染色体”)al=535396400000 (a1,b1为四台机器空闲周期段)l5240000000l75365000000000000000bl=ll3842650000020350000000l85468000000000000000minminmax=75(最终最优解)其中机器A空闲时间段为:5-11,35-38,39-42,64-65;机器B则为:15-20,24-35;机器C为:17-18,53-54,65-68;机器D无空闲。以下为:取不同N和M值情况下数据优化过程以及时间上的比较: (表五)NNM第一次运行第二次运行第三次运行第四次运行第五次运行平均运行时间111104-114-9898-105-9392-93-92100-132-9586-86-84/1110106-97-86108-100-89102-87-8799-90-9088-104-84/1110094-81-8181-102-7891-105-91101-84-8090-101-90/111000107-100-7892-101-76101-100-8288-97-8691-93-878.5(s)111000088-105-77103-81-7789-99-84107-104-7893-105-7880(s)10101090-108-90104-91-83104-100-9395-98-87105-106-87/101010098-96-9693-99-9088-90-80105-92-8091-95-85/10101000101-96-7891-89-8096-104-87105-105-8488-99-789.5(s)10101000099-92-7797-95-7596-104-7689-99-7691-101-7590(s)10010010095-100-8698-90-80104-99-7893-88-8192-99-80/1001001000109-98-8591-100-82100-99-77114-101-8496-110-7611(s)1001001000096-101-78101-86-76101-97-8099-110-7699-111-77100(s)

说明:以最后一行第一次运行“96T01-78”为例,96和101分别为2次N取100时得到的100*2个随机解中的最优解,78为经过M=10000代的遗传(交叉变异选择)后得到的最终最优解。明显地发现:M的增大所产生的优化效果明显好于N增大产生的优化效果M从1-10-100-1000T0000的变化使最优解有从9*--8*--7*的变化规律,N的1-10-100的变化则不明显。因此相对于随机取解,经过遗传算法优化之后效果是显著的。另外对采用遗传算法前后模拟所得数据进行比较:第一次第二次第三次第四次第五次均值平均时间N=1000,M=0787981807979.425(S)N=1,N=1,M=1000807577768278.08.5(S)(表六)由上表看来,虽然在均值方面相差不显著,但是时间上采用遗传算法之后节约了约三分之二的运行时间,效率显而易见。九.模型优缺点及改进模型优点,采用遗传算法可对一个理论上无法求尽的NP问题以较有效方法在较短时间内得到较精确解。缺点,采用遗传算法还不全面,只是一个简单模型,未考虑收敛性,适配值等,对参数设置与最优解关系研究还不够深入。模型本身还具有漏动,仍需改进,较好设想为采用和模拟退火算法的混合遗传算法,由于时间紧迫,在此就不再深入给出模型及分析了。[参考文献]:1.车间调度与遗传算法 王凌清华大学出版社2.数值计算的算法与分析张可村赵英良科学出版社PeterG.Anderson,PeterG.Anderson,电子工业出版社清华大学出版社3.PermutationBasedGAsandOrderedGreedMATLAB6.0与科学计算 王沫然C程序设计(第二版) 潭浩強信息014孙卓明2003年8月14日本文网上下载地址(个人主页):http://附录:子程序一:(种群初始化,得较优个体)function[minminmax,ss]=chushijie(n)%种群初始化,以下为编码和解码过程,同时对n次选取最优化个体Jm=[31234000;14230000;34121000;23414300;42341340;12134131];minminmax=200;ford=1:n;s=0;%编码程序:基于操作的编码策略k=1;fort=1:35;I=randint(1,1,[1,6]);whileJm(I,1)==0;I=randint(1,1,[1,6]);end;s(k)=I;k=k+1;x=1;whilex<=7;Jm(I,x)=Jm(I,x+1);x=x+1;end;Jm(I,8)=0;end;Jm=[31234000;1423000034121000;23414300;42341340;12134131]T=[824246000;45340000;3715208000;7621116300;1048412610;14735258];%解码程序:活动化解码算法fori=1:6;

a(q,x)=0;b(q,x)=0;flag_(q)=0;end;end;forp=1:6;flag(p)=0;end;fori=1:35;q=Jm(s(i),k(s(i)));t=T(s(i),k(s(i)));z=0;v=0;forx=1:9;ifmax(flag(s(i)),a(q,x))+t<=b(q,x)&&z==0;ifflag(s(i))<=a(q,x)&&a(q,x)+t==b(q,x);flag(s(i))=b(q,x);fory=x:8;a(q,y)=a(q,y+1);b(q,y)=b(q,y+1);end;z=1;elseifflag(s(i))<=a(q,x)&&a(q,x)+t<b(q,x);a(q,x)=a(q,x)+t;flag(s(i))=a(q,x);z=1;elseifflag(s(i))>a(q,x)&&a(q,x)+t==b(q,x);flag(s(i))=b(q,x);b(q,x)=b(q,x)-t;z=1;elseifflag(s(i))>a(q,x)&&a(q,x)+t<b(q,x);fory=8:x+2;a(q,y)=a(q,y-1);b(q,y)=b(q,y-1);end;b(q,x+1)=b(q,x);b(q,x)=flag(s(i));a(q,x+1)=flag(s(i))+t;flag(s(i))=a(q,x+1);z=1;end;end;end;ifz==0;ifflag(s(i))<=flag_(q);flag(s(i))=flag_(q)+t;flag_(q)=flag_(q)+t;k(i)=1;elseifflag(s(i))>flag_(q)end;forx=1:9;forq=1:4;ifa(q,x)==0&&v==0;forx=1:9;a(q,x)=flag_(q);b(q,x)=flag(s(i));v=1;end;end;flag(s(i))=flag(s(i))+t;flag_(q)=flag(s(i));end;end;k(s(i))=k(s(i))+1;end;minmax=0;forq=1:4;ifminmax<flag_(q);minmax=flag_(q);end;end;ifminminmax>minmax;%得出初始最优解minminmax=minmax;ss=s;end;end;子程序二:(父代交叉变换)function[D]=jiaocha(f1,f2)%交叉变化(循环交叉操作,CX),选取“染色体”无需变动部分基因s=randint(1,1,[1,35]);whilef1(s)==f2(s);s=randint(1,1,[1,35]);end;forp=1:34;D(p)=0;end;z=0;j=1;D(j)=s;j=j+1;fori=1:35;iff1(i)==f2(s)&&z==0;D(j)=i;j=j+1;z=1;end;end;iff2(D(j-1))==f1(s);return;end;form=1:34;z=0;fori=1:35;iff1(i)==f2(D(j-1))&&z==0;w=0;fort=3:j;if(i-D(t-1))>0||(i-D(t-1))<0;w=w+1;end;end;ifw==j-2;D(j)=i;j=j+1;z=1;end;end;end;iff2(D(j-1))==f1(s)&&z==1;return;end;end;end;子程序三:(变异选择,形成子代)function[f3,f4]=jiaocha_bianyi(f1,f2,D)%生成交叉后的“染色体”,并进行变异选择g2=f1;g1=f2;fori=1:34;ifD(i)>0;g1(D(i))=f1(D(i));g2(D(i))=f2(D(i));end;end;f3=g1;f4=g2;c=randint(1,1,[1,100]);ifc==1;d1=randint(1,1,[1,35]);d2=randint(1,1,[1,35]);whiled1==d2;d2=randint(1,1,[1,35]);end;m=f3(d1);f3(d1)=f3(d2);f3(d2)=m;elseifc==2;d1=randint(1,1,[1,35]);d2=randint(1,1,[1,35]);whiled1==d2;d2=randint(1,1,[1,35]);end;m=f4(d1);f4(d1)=f4(d2);f4(d2)=m;end;子程序四:(四者中选取最优二个体)function[f1,f2]=xuanze(f1,f2,f3,f4)%对父代fl,f2和子代f3,f4进行解码,得出2个较优个体,成为下一代的父代min1=0;min2=0;min3=0;min4=0;h=0;g=0;[min1]=tongbujinzhan(f1);[min2]=tongbujinzhan(f2);[min3]=tongbujinzhan(f3);[min4]=tongbujinzhan(f4);ifmin1<=min2&&min1<=min3&&min1<=min4;h=f1;ifmin2<=min3&&min2<=min4;g=f2;elseifmin3<=min2&&min3<=min4;g=f3;elseifmin4<=min2&&min4<=min3;g=f4;end;elseifmin2<=min1&&min2<=min3&&min2<=min4;h=f2;ifmin1<=min3&&min1<=min4;g=f1;elseifmin3<=min1&&min3<=min4;g=f3;elseifmin4<=min1&&min4<=min3;g=f4;end;elseifmin3<=min1&&min3<=min2&&min3<=min4;h=f3;ifmin1<=min2&&min1<=min4;g=f1;elseifmin2<=min1&&min2<=min4;g=f2;elseifmin4<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论