车间作业调度问题(JSP)的遗传算法通用MATLAB源代码
车间作业调度问题(JSP)是一类满足任务配置和顺序约束要求的资源分配问题,是最难的组合优化问题之一。下面的MATLAB源代码可用于求解标准JSP 问题,虽然采用的是最普通的遗传算法,但在编解码环节,采用了十分巧妙的设计,可以大幅提高搜索效率。
function [S_best,T_min,LC]=JSPGA(M,N,Pc,Pm,Q,W)
%% 车间作业调度问题遗传算法
% GreenSim团队——专业级算法设计&代写程序
% 欢迎访问GreenSim团队主页→http://www.doczj.com/doc/ec5de6eeb8f67c1cfad6b8b8.html/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,M);
%% 第二步:产生初始种群
farm=InitPop(N,Q,W,n,k,m);%调用产生初始种群的子函数
%%
counter=0;%设置迭代计数器
while counter%% 第三步:交叉
FARM=Cross(farm,Pc,m);%调用交叉子函数
%% 第四步:变异
FARM=Mutate(FARM,Pm,m);%调用变异子函数
%% 第五步:修正算子
FARM=Modify(FARM,Q,W,n,k);%调用修正子函数
%% 第六步:计算适应值
FITNESS=Fit(FARM);%调用计算适应值的子函数
%% 第七步:选择复制