91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 7KB
    文件類型: .m
    金幣: 1
    下載: 1 次
    發布日期: 2021-06-18
  • 語言: Java
  • 標簽: matlab??GA??JSP??

資源簡介

遺傳算法解決JSP問題。即多工件分配于多機器的np hard問題。

資源截圖

代碼片段和文件信息

clear;
clc;
%輸入初始條件
prompt1=‘Please?input?the?size?of?group\n‘;
NIND=input(prompt1);%種群初始化,種群大小為NIND
prompt2=‘Please?input?the?longth?of?chrom\n‘;
WNumber=input(prompt2);%一個一行多列的矩陣,矩陣列數取決于總工序數%
prompt3=‘Please?input?the?possible?chrom\n‘;
seed=input(prompt3);%種子
prompt5=‘Please?input?variation?probability\n‘;
MUTR=input(prompt5);%設定變異概率
prompt6=‘Please?input?the?number?of?parts\n‘;
Npart=input(prompt6);%輸入零件總數目
prompt7=‘Please?input?the?max?number?of?process?for?all?parts\n‘;
Npro=input(prompt7);%輸入零件所需的最大工序數
prompt8=‘Please?input?the?number?of?machine\n‘;
Nmachine=input(prompt8);%輸入機器數目
prompt10=‘Please?input?the?number?of?generation\n‘;
Ngenera=input(prompt10);%輸入代數
for?k=1:Npart
????prompt9=‘Please?input?information?of?parts\n‘;%第一行工序編號,第二行機器編號,第三行時間%
????gongjian(k::)=input(prompt9);
end


%建立初始種群
Chrom=zeros(NINDWNumber);%預定義零矩陣,用于存放種群所有染色體
for?i=1:NIND
????Chrom(i:)=seed(randperm(numel(seed)));%生成染色體并賦到矩陣各行
end

time_opt=zeros(20100);%?預定義存儲100代種群中的各個個體時間的空間
pp=zeros(Ngenera1);
P=zeros(WNumber1);%一條染色體上零件編號存儲空間
M=zeros(WNumber1);
T=zeros(WNumber1);
t_bz=zeros(NpartNpro);%用于存放各零件各工序時間
T_qunti=zeros(NINDNgenera);
best_time=zeros(Ngenera1);%儲存各代的最優時間
for?generation=1:Ngenera
%%解碼求適應度?計算最短時間

for?i=1:NIND?????????%%群體中的各個染色體分別求時間???
?????%解碼染色體
?????for?k=1:Npart
?????????a=1;
?????????for?j=1:WNumber
????????if?Chrom(ij)==k
????????????P(j)=k*100+a;
????????????M(j)=gongjian(k2a);
????????????T(j)=gongjian(k3a);
????????????a=a+1;
????????end
?????????end
?????end
??????%解碼完成?
????%計算每個染色體的時間
????t=zeros(Nmachine1);
????for?n=1:Nmachine
????????t(n)=0;
????????for?j=1:WNumber
?????????if?M(j)==n
????????????x=floor(P(j)/100);%?x為工件號
????????????y=mod(P(j)100);%?y為工序號
????????????if?y==1%顯然,如果該工序為第一個工序,則M1機床時間t1直接為當前時間加上該工序的時間%
????????????????t(n)=t(n)+T(j);
????????????????t_bz(xy)=t(n);%行數代表工件號,列數代表工序
????????????else?%如果該工序不是第一個工序最終時間為該機床當前的時間以及該工件上一工序對應時間%
????????????????temp1=[t(n)?t_bz(xy-1)];
????????????????t(n)=max(temp1)+T(j);%工件在n機床上上對應的機床時間%
????????????????t_bz(xy)=t(n);%將該時間賦值到時間矩陣
????????????end
?????????end????
????????end
????end??
????temp=zeros(1Nmachine);
????for?n=1:Nmachine
????????temp(1n)=t(n);
????end
???????t0=max(temp);??????%得出該染色體對應的加工時間
???????T_qunti(igeneration)=t0;???%將該染色體對應的時間賦值給時間矩陣
time_add=sum(T_qunti(:generation));?%計算出種群中各個染色體總時間和
time_indiv=NIND*T_qunti/time_add;?%計算每一個個體與總時間的比值
min_time=min(T_qunti(:generation));%該代種群中時間最短的個體時間
best_time(generation)=min(T_qunti(:generation));
end?%%截至該句,計算出每個染色體的時間
%以下執行選擇操作?---.>穩態復制的方法
next_pop=Chrom;%初始化群體
best_flag=0;%初設最優染色體數目
??for?tt=1:NIND
????if?T_qunti(ttgeneration)==min_time?%如果該個體為截止到當前代最好的個體,則保留%
???????best_flag=best_flag+1;
???????next_pop(best_flag:)=Chrom(tt:);%最優染色體保留至下一代%
????end
??end
pp(generation)=best_flag;%pp記錄T_qunti中與最小時間個體相同的個體數量
flag=best_flag;
while?flag????for?z=1:NIND?%下一代群體的前flag個個體直接取上一帶的最佳個體,剩下的個體用隨即

評論

共有 條評論