《09车间作业调度问题JSP的遗传算法MATLAB源代码.docx》由会员分享,可在线阅读,更多相关《09车间作业调度问题JSP的遗传算法MATLAB源代码.docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、车间作业调度问题(JSP)的遗传算法通用MATLAB源代码车间作业调度问题(JSP)是一类满意任务配置和依次约束要求 的资源安排问题,是最难的组合优化问题之一。下面的MATLAB源代 码可用于求解标准JSP问题,虽然采纳的是最一般的遗传算法,但在 编解码环节,采纳了非常奇妙的设计,可以大幅提高搜寻效率。function S_best, T_min, LC =JSPGA (M, N, Pc, Pm, Q, W)%车间作业调度问题遗传算法% GreenSim团队专业级算法设计&代写程序% 欢迎访问GreenSim团队主页/greensim%输入参数列表%M遗传算法进化代数%N种群规模%Pc交叉概率
2、%Pm变异概率%Q机器序号矩阵%W操作时间矩阵%输出参数列表% S_best 最优调度方案,mXl的细胞结构,每个细胞单元为La X2的矩阵% 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, M);%其次步:产生初始种群farm=InitPop (N, Q, W, n, k, m) ;%调用产生初始种群的子函数counter=0; %设置迭代计数器while coun
3、terVM%停止条件为达到最大迭代次数%第三步:交叉FARM=Cross (farm, Pc, m) ;%调用交叉子函数%第四步:变异FARM=Mutate (FARM, Pm, m) ;%调用变异子函数%第五步:修正算子FARM二Modify (FARM, Q, W, n, k) ;%调用修正子函数%第六步:计算适应值FITNESS=Fi t (FARM) ; %调用计算适应值的子函数%第七步:选择复制farm, fitness=Select (FARM, FITNESS) ;%调用选择复制子函数%第八步:记录和更新S_best, T_min, LC=Updata(S_best, T_min
4、, LC, farm, fitness, count er) ; %记录和更新子函数counter=counter+l;disp (counter);endfunction FARM=Cross(farm, Pc, m)%子函数:交叉子函数%输入参数列表% farm交叉操作之前的种群%Pc交叉概率%Q机器序号矩阵,nXk的矩阵%W操作时间矩阵,nXk的矩阵%n工件总数%k工序总数%m机器总数%输出参数列表% FARM输出种群N=size(farm, 2);newfarm=cell(m, 2*N);SER=randperm(N);A=farm(:, 1);B=farm(:, N);pos=uni
5、drnd(m-1);AA=A(1 :pos, :) ;B(pos+l) :end,:);BB=B(1 :pos, :) ;A(pos+1) :end,:);newfarm(:, 1)=AA;newfarm(:, 2)=BB;for i=1:(N-l)A=farm(:, SER(i);B=farm(:, SER(i+l);pos=unidrnd (m-1);AA=A(1 :pos, :) ;B(pos+l) :end,:);BB=B(1 :pos, :) ;A(pos+l) :end,:);newfarm (:, 2*i+l) =AA;newfarm(:, 2*i+2) =BB;endfor i
6、=1:(2*N)if PcrandA=newfarm(:, i);for j=l:mAj=Aj;L=size (Aj, 2);if L2pos=unidrnd(L-2)+1;Bj= Aj (:, 1), Aj (:, (pos+1) :end), Aj (:, 2:pos);Aj=Bj;endendnewfarm(:, i)=A;endendFARM=farm, newfarm;function FARM二Mutate(FARM, Pm, m)%子函数:变异子函数%输入参数列表%FARM交叉操作之后新旧种群的合并种群%Pm变异概率%输出参数列表%FARM输出种群NN=size(FARM, 2)
7、;for i=l:NNif PmrandA=FARM(:, i);for j=l:mAj=Aj;L=size (Aj, 2);if L2pos=randperm(L-l)+1;posl=pos (1);pos2=pos(2);temp=Aj(:, posl);Aj (:, posl)=Aj (:, pos2);Aj(:, pos2)=temp;Aj=Aj;endendFARM (:, i)=A;endend% GreenSim团队一一专业级算法设计&代写程序% 欢迎访问GreenSim团队主页/greensim%子函数:记录和更新子函数%输入参数列表% S_best最优调度方案,n)Xl的细胞
8、结构,每个细胞单元为LaX2的矩阵% T_min最优调度方案对应的最短调度时间% LC历史最优适应值收敛曲线% f arm 种群% fitness种群的适应值% counter 计数器%输出参数列表% S_best 最优调度方案,mXl的细胞结构,每个细胞单元为LaX2的矩阵% T_min最优调度方案对应的最短调度时间% LC历史最优适应值收敛曲线minfitness=min (fitness);pos=find(fitness=minfitness);POS=pos(1);if minfitness=T_minT_min=minfitness;S_best=farm(:, POS);endLC (counter+1)=T_min;源代码运行结果展示