遗传算法GA解决混合流水车间调度问题HFSP

混合流水车间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完整代码,可私博主~ ~

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年8月28日
下一篇 2023年8月28日

相关推荐