資源簡介
用matlab程序解決作業車間調度問題的小例子,程序可運行,可畫出進化圖與甘特圖。內附算例與程序說明。

代碼片段和文件信息
function?[?ret?]?=?Cross(?pxchromlenchromn?)
%本函數完成交叉操作
%px?input:交叉概率
%chrom?input:染色體群
%sizepop?input:種群規模
%lenchrom?input:染色體長度
%ret?output:交叉后的染色體
sizepop=size(chrom1);
i=1;
randjob=4;?%變動工件數
while?i<=sizepop???%是否進行交叉操作由交叉概率決定(continue控制)
????%隨機選擇兩個染色體進行交叉
????temp=randperm(sizepop);
????index=temp(1:2);
????s1=chrom(index(1):);
????s2=chrom(index(2):);
????%初始化中間片段
????s11=zeros(1n*2);
????s22=zeros(1n*2);
????index=zeros(2n*2);
????%交叉概率決定是否交叉
????pick=rand;
????while?pick==0
????????pick=rand;
????end
????id1=1;
????id2=1;
????if?pick ????????%隨機選擇兩個工件
????????tempjob=randperm(n);
????????job1=tempjob(11);
????????job2=tempjob(12);
????????job3=tempjob(13);
????????job4=tempjob(14);
????????%job5=tempjob(15);
????????for?j=1:lenchrom
????????????if?s1(1j)==job1
????????????????index(1id1)=j;
????????????????s11(1id1)=job1;
????????????????id1=id1+1;????
????????????end
????????????if?s1(1j)==job2
????????????????index(1id1)=j;
????????????????s11(1id1)=job2;
????????????????id1=id1+1;
????????????end
????????????if?s1(1j)==job3
?????????????????index(1id1)=j;
?????????????????s11(1id1)=job3;
?????????????????id1=id1+1;
????????????end?????
????????????if?s1(1j)==job4
?????????????????index(1id1)=j;
?????????????????s11(1id1)=job4;
?????????????????id1=id1+1;
????????????end
???????????
????????end
????????for?j=1:lenchrom
????????????if?s2(1j)==job1
????????????????index(2id2)=j;
????????????????s22(1id2)=job1;
????????????????id2=id2+1;???????????
????????????end
????????????if?s2(1j)==job2
????????????????index(2id2)=j;
????????????????s22(1id2)=job2;
????????????????id2=id2+1;
????????????end
????????????if?s2(1j)==job3
????????????????index(2id2)=j;
????????????????s22(1id2)=job3;
????????????????id2=id2+1;
????????????end???????????
????????????if?s2(1j)==job4
????????????????index(2id2)=j;
????????????????s22(1id2)=job4;
????????????????id2=id2+1;
????????????end
????????????
????????end????????
????????%交叉后的第一條染色體
????????for?j=1:(randjob*n)
????????????id1=index(1j);??????????
????????????s1(1id1)=s22(1j);
????????end
????????%交叉后的第二條染色體
????????for?j=1:(randjob*n)
????????????id2=index(2j);
????????????s2(1id2)=s11(1j);
????????end;
????end
????if?i==sizepop???%調整ret染色體數目,控制為奇數
????????ret(i:)=s1;
????else
????????ret(i:)=s1;
????????ret((i+1):)=s2;???
????end
????i=i+2;
end
end
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????2617??2017-12-24?15:59??GA_JSP\Cross.m
?????文件????????5399??2018-05-25?23:06??GA_JSP\gant.m
?????文件????????3297??2018-06-04?20:09??GA_JSP\main.m
?????文件????????4251??2018-06-04?20:01??GA_JSP\makespan.m
?????文件?????????738??2018-01-15?14:17??GA_JSP\Mutation.m
?????文件?????????382??2018-06-04?20:04??GA_JSP\remain.m
?????文件????????1142??2018-06-04?20:00??GA_JSP\Select.m
?????文件?????????422??2018-06-04?19:59??GA_JSP\time.m
?????文件?????????233??2018-06-04?20:14??GA_JSP\程序說明.txt
?????文件????????1019??2017-12-21?13:05??GA_JSP\算例.txt
評論
共有 條評論