新浪博客

遗传算法求柔性车间调度FJSP问题MATLAB源码

2019-03-18 21:45阅读:
这个问题我曾经查阅过很多论文和教科书,研究过,并根据算例编写过程,具体的求解过程我也整理过,由于整理的资料上有公式,在此无法编辑,所以我就直接上传图片了。
遗传算法求柔性车间调度FJSP问题MATLAB源码
遗传算法求柔性车间调度FJSP问题MATLAB源码
MATLAB编程得到的计算结果图如下:
遗传算法求柔性车间调度FJSP问题MATLAB源码

所有程序文件如下图:
遗传算法求柔性车间调度FJSP问题MATLAB源码
%%%% 遗传算法双层编码求PFJSP:第一层为工序编码(TSP编码),第二层为机器分配编码
%%%% PFJSP:部分柔性作业车间调度问题,只有部分工件的部分工序都可以在可选择的机器中
%%%% 选择一台进行加工。(注意区别TFJSP)两种不同的问题其编码是不同的
%%%% by 圆 一个有心的人在用心做事
%%%% 2018-09-17
%%%% 如有问题请联系 QQ530807088 新浪微博:MATLAB圆创工作室
% ======================= 高 端 定 制 · 华 丽 分 割 ======================
clear
clc
close all
load data
% M: 加工机器矩阵,M{i,j}表示工件i的第j道工序的加工机器集合
% T: 加工时间矩阵,T{i,j}表示工件i的第j道工序在对应机器上的加工时间
% m: 机器数量
[n, q] = size(M); % n为工件数量, q为工序个数
CityNum = n * q; % 工序总个数
Cm = zeros(1,CityNum); % 各工序对应的可选加工机器数量
k = 1;
for i = 1 : n
for j = 1 : q
Candidate = M{i,j};
Cm(k) = length(Candidate); % 可选加工机器数量
k = k + 1;
end
end
NP = 40; % 种群大小
maxgen = 200; % 最大进化代数
Pc = 0.8; % 交叉概率
Pm = 0.6; % 变异概率
Gap = 0.9; % 代沟(Generation gap)
%% 初始化种群
X = XInitPop(NP, n, q); % 工序顺序种群初始化
Y = YInitPop(X, M); % 机器分配种群初始化
%% 遗传进化
gen = 1;
figure;
hold on;
box on
xlim([0,maxgen])
title('优化过程'); xlabel('代数'); ylabel('最优值')
Fxy = zeros(NP,1);
for i = 1:NP
Fxy(i) = Fitness(X(i,:), Y(i,:), m ,M, T); % 计算路线长度
end
fpbest=min(Fxy);
while gen
line([gen-1,gen],[fpbest,min(Fxy)]);
pause(0.01)

% 记录各代最优值
fpbest = min(Fxy);
FG(gen) = fpbest; % 各代最短路径
% 计算适应度
fit = 1./(Fxy+1); % 将求最小路径转为最大值fit
% 选择
XSel = Select(X, fit, Gap);
YSel = Select(Y, fit, Gap);
% 交叉操作
XSel = XRecombin(XSel, Pc);
YSel = YRecombin(YSel, Pc);
% 变异
XSel = XMutate(XSel, Pm);
YSel = YMutate(YSel, m, Pm);
% 重插入子代的新种群
X = Reins(X, XSel, fit);
Y = Reins(Y, YSel, fit);
% 不可行机器编码检查,
Y = YCheck(X, Y, Cm);
% 计算路线长度
for i = 1 : NP
Fxy(i) = Fitness(X(i,:), Y(i,:), m, M, T); % 计算路线长度
end
% 更新迭代次数
gen = gen + 1 ;
end
%% 画出最优解的路线图
[fgbest,Idx] = min(Fxy);
xgbest = X(Idx(1),:);
ygbest = Y(Idx(1),:);
fgbest
figure
drawGantt(xgbest, ygbest, m, M, T)

我的更多文章

下载客户端阅读体验更佳

APP专享