针对作业车间调度问题,提出改进的混合蛙跳算法.采用基于工件操作的蛙体结构,定义青蛙的相似性和距离,构造相应的青蛙移位策略,有效克服工件机器顺序的约束限制,保证青蛙新位置的可行性.通过经典算例仿真计算结果表明,该算法能有效求解较大规模的作业车间调度问题.
clc clear all close all %-------------------------------------------------------------------------- % 问题:自定义时间矩阵的JSSP问题 % 在下面手动输入时间矩阵T(行数M=4为机器数,列数N=5为工件数) % 仿真实例出处如下: % [日]玄光男,遗传算法与工程设计,北京:科学出版社,2000,P127. 第5.4.4节 例5.2 % 最优解 fval=213, X = [4 2 5 1 3] T = [31 19 23 13 33 % 手动输入时间矩阵T 41 55 42 22 5 25 3 27 14 57 30 34 6 13 19]; [M,N] = size(T) % 行数M为机器数,列数N为工件数 %-------------------------------------------------------------------------- % 必需参数 popsize = 50; % 种群规模 maxgen = 50; % 最大进化代数 method = 6 % 方法选择,1 - 伪并行小生境自适应遗传算法(PPNSA) % 2 - 混合蛙跳算法+变异算子(SFLA+MO) % 3 - 批处理蛙跳算法(BFLA),为SFLA的改进算法 % 4 - PPNSA+扰动算子(末选算法,收敛速度中,较易跳出局部极小) % 5 - SFLA+MO+扰动算子(次选算法,收敛速度快,最易陷入局部极小) % 6 - BFLA+扰动算子(首选算法,收敛速度中,可能陷入局部极小) type = 1; % 初始化方式,1 - 随机初始化(缺省设置) % 2 - 启发式初始化 %-------------------------------------------------------------------------- % 函数调用 [X,fval,F] = SFLA(T,popsize,maxgen,method,type); % 混合蛙跳算法(Shuffled Frog-Leaping Alogrihtm,SFLA) % 输入参数: % T - 时间矩阵 % popsize - 种群规模 % maxgen - 最大进化代数 % method - 方法选择,1 - 伪并行小生境自适应遗传算法(PPNSA) % 2 - 混合蛙跳算法+变异算子(SFLA+MO) % 3 - 批处理蛙跳算法(BFLA),为SFLA的改进算法 % 4 - PPNSA+扰动算子(末选算法,收敛速度中,较易跳出局部极小) % 5 - SFLA+MO+扰动算子(次选算法,收敛速度快,最易陷入局部极小) % 6 - BFLA+扰动算子(首选算法,收敛速度中,可能陷入局部极小) % type - 初始化方式,1 - 随机初始化(缺省设置) % 2 - 启发式初始化 % 输出参数: % X - 最优适应度对应的解 % fval - 最优适应度值 % F - 最优,平均,最差适应度 %-------------------------------------------------------------------------- % 结果作图 figure(1) FigSche(X,T); figure(2); plot(1:maxgen,F,'.-'); grid on; legend('最优','平均','最差',3); xlabel('进化代数'); ylabel('适应度'); set(gcf,'position',[700 200 500 400]) set(gca,'XLim',[1 maxgen]); title(['工件数:',num2str(N),' 机器数:',num2str(M),', 最优值:',num2str(fval)]);
[1]蔡良伟,李霞. 基于混合蛙跳算法的作业车间调度优化[J]. 深圳大学学报(理工版)(4):391-395.
部分理论引用网络文献,若有侵权联系博主删除。