混合流水车间HFSP
混合流水车间调度问题(HFSP)是传统流水车间调度问题(FSP)的拓展,本文针对HFSP问题进行描述、建模和求解。
混合流水车间问题(HFSP)
通常模型做如下假设:
HFSP符号描述:
决策变量:
主要约束:
优化目标:
遗传算法(带精英保留)求解
本节使用带精英保留的遗传算法GA对HFSP问题进行求解。求解结果如下:
自定义算例如下:
加工时间矩阵:
每阶段的并行机数量:
部分代码:
如需完整matlab代码,可私~ ~,也可咨询3249992049(扣)
main.m
clear all;
clc;
%% 生成数据
xls_path='.\工件信息.xlsx';
dataGenerate(xls_path);
%% 加载数据
load jobdata.mat
%% GA遗传算法
GAResult=GA(jobInfo,jobNum,machineVec,machineGroup);
%% GA迭代曲线
figure(1)
plot(GAResult.Convergence_curve_min,'r-','LineWidth',1.5)
hold on
plot(GAResult.Convergence_curve_avg,'b-.','LineWidth',1.5)
xlabel('运行次数');
ylabel('最大完工时间(makespan)');
title('运行结果')
legend('最小值','平均值')
box on; grid on
%% 画出甘特图
ganttIndex=1;
figure(2);
gantt_chart(GAResult.machineTable{ganttIndex},machineName,'甘特图');
GA.m
function GAResult=GA(jobInfo,jobNum,machineVec,machineGroup)
tstart=tic; % 计时器
%% 种群规模、最大迭代次数
pop=100;
maxGen=100;
% 加工阶段数量,本数据集是8;自变量维度:dim
stageN=length(machineGroup);
dim=2*jobNum*stageN;
% 初始化种群
[chrom]=init(pop,jobNum,machineGroup);
% 计算目标函数值
for i=1:pop
makespan=fitness(chrom(i,:),jobNum,machineVec,jobInfo,stageN);
chrom(i,dim+1)=makespan;
end
%% 迭代主循环
Convergence_curve_min=zeros(1,maxGen);
Convergence_curve_avg=zeros(1,maxGen);
for gen=1:maxGen
% 锦标赛法选择父代
parent_chromosome=tournamentGA(chrom,dim);
% 交叉变异
offspring_chromosome=varOperator(parent_chromosome,jobNum,machineVec,...
jobInfo,stageN);
% 下面进行合并种群
intermediate_chromosome=[chrom;offspring_chromosome];
% 筛选种群
[~,index]=sort(intermediate_chromosome(:,dim+1));
chrom=intermediate_chromosome(index(1:pop),:);
%% Disp
disp(['当前迭代次数:',num2str(gen),'||最大完工时间(平均值):',num2str(mean(chrom(:,dim+1))),...
'||最大完工时间(最小值):',num2str(min(chrom(:,dim+1)))]);
%% 迭代曲线
Convergence_curve_min(gen)=min(chrom(:,dim+1));
Convergence_curve_avg(gen)=mean(chrom(:,dim+1));
end
RunTime=toc(tstart);
% disp(['Time:',num2str(RunTime)]);
%% 保存
GAResult.chrom=chrom;
GAResult.BestMakespan=chrom(1,size(chrom,2));
GAResult.RunTime=RunTime;
GAResult.Convergence_curve_min=Convergence_curve_min;
GAResult.Convergence_curve_avg=Convergence_curve_avg;
for i=1:pop
[~,GAResult.machineTable{i}]=fitness(chrom(i,:),jobNum,machineVec,jobInfo,stageN);
end
save('GA_运行结果.mat','GAResult');
end
迭代曲线:
甘特图:
写在最后
本文内容为本人原创,未经本人允许,本文所有内容禁止搬运,严禁盗图盗文!如需MATLAB完整代码,可私博主~ ~
版权归原作者 你真的好哇塞 所有, 如有侵权,请联系我们删除。