资源描述:
《09车间作业调度问题(jsp)的遗传算法通用matlab源代码》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、欢迎访问GreenSim团队主页→http://blog.sina.com.cn/greensim邮箱:greensim@163.com车间作业调度问题(JSP)的遗传算法通用MATLAB源代码车间作业调度问题(JSP)是一类满足任务配置和顺序约束要求的资源分配问题,是最难的组合优化问题之一。下面的MATLAB源代码可用于求解标准JSP问题,虽然采用的是最普通的遗传算法,但在编解码环节,采用了十分巧妙的设计,可以大幅提高搜索效率。function[S_best,T_min,LC]=JSPGA(M,N,Pc,Pm,Q,W)%%车间作业调度问题遗传算法%GreenSim团队——专业
2、级算法设计&代写程序%欢迎访问GreenSim团队主页→http://blog.sina.com.cn/greensim%%输入参数列表%M遗传算法进化代数%N种群规模%Pc交叉概率%Pm变异概率%Q机器序号矩阵%W操作时间矩阵%%输出参数列表%S_best最优调度方案,m×1的细胞结构,每个细胞单元为La×2的矩阵%T_min最优调度方案对应的最短调度时间%LC历史最优适应值收敛曲线%%第一步:参数初始化[n,k]=size(Q);%n为工件总数,k为工序总数m=max(max(Q));%m为机器总数S_best=cell(m,1);T_min=inf;LC=zeros(1,
3、M);%%第二步:产生初始种群farm=InitPop(N,Q,W,n,k,m);%调用产生初始种群的子函数%%counter=0;%设置迭代计数器whilecounter4、页→http://blog.sina.com.cn/greensim邮箱:greensim@163.com[farm,fitness]=Select(FARM,FITNESS);%调用选择复制子函数%%第八步:记录和更新[S_best,T_min,LC]=Updata(S_best,T_min,LC,farm,fitness,counter);%记录和更新子函数counter=counter+1;disp(counter);endfunctionFARM=Cross(farm,Pc,m)%%子函数:交叉子函数%%输入参数列表%farm交叉操作之前的种群%Pc交叉概率%Q机器序号
5、矩阵,n×k的矩阵%W操作时间矩阵,n×k的矩阵%n工件总数%k工序总数%m机器总数%%输出参数列表%FARM输出种群%%N=size(farm,2);newfarm=cell(m,2*N);SER=randperm(N);A=farm(:,1);B=farm(:,N);pos=unidrnd(m-1);AA=[A(1:pos,:);B((pos+1):end,:)];BB=[B(1:pos,:);A((pos+1):end,:)];newfarm(:,1)=AA;newfarm(:,2)=BB;fori=1:(N-1)A=farm(:,SER(i));B=farm(:,SER
6、(i+1));pos=unidrnd(m-1);AA=[A(1:pos,:);B((pos+1):end,:)];BB=[B(1:pos,:);A((pos+1):end,:)];newfarm(:,2*i+1)=AA;newfarm(:,2*i+2)=BB;end%%fori=1:(2*N)ifPc>randA=newfarm(:,i);forj=1:mAj=A{j};第4页欢迎访问GreenSim团队主页→http://blog.sina.com.cn/greensim邮箱:greensim@163.comL=size(Aj,2);ifL>2pos=unidrnd(L-2)
7、+1;Bj=[Aj(:,1),Aj(:,(pos+1):end),Aj(:,2:pos)];A{j}=Bj;endendnewfarm(:,i)=A;endendFARM=[farm,newfarm];functionFARM=Mutate(FARM,Pm,m)%%子函数:变异子函数%%输入参数列表%FARM交叉操作之后新旧种群的合并种群%Pm变异概率%%输出参数列表%FARM输出种群%%NN=size(FARM,2);fori=1:NNifPm>randA=FARM(:,i);forj=1