• 大小: 7KB
    文件类型: .m
    金币: 2
    下载: 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个个体直接取上一带的最佳个体,剩下的个体用随即

评论

共有 条评论