当前位置 : 主页 > 编程语言 > python >

【车间调度】基于遗传算法实现柔性车间调度问题附Matlab代码

来源:互联网 收集:自由互联 发布时间:2022-06-15
1 简介 针对传统作业车间调度存在加工设备功能单一,加工工序对应设备固定的问题,采用遗传算法进行求解优化.通过一个8个工件,每工件8道工序的应用实例进行测试,验证了该方法切实可


1 简介

针对传统作业车间调度存在加工设备功能单一,加工工序对应设备固定的问题,采用遗传算法进行求解优化.通过一个8个工件,每工件8道工序的应用实例进行测试,验证了该方法切实可行有效.

【车间调度】基于遗传算法实现柔性车间调度问题附Matlab代码_遗传算法

【车间调度】基于遗传算法实现柔性车间调度问题附Matlab代码_d3_02

【车间调度】基于遗传算法实现柔性车间调度问题附Matlab代码_取整_03

【车间调度】基于遗传算法实现柔性车间调度问题附Matlab代码_取整_04

【车间调度】基于遗传算法实现柔性车间调度问题附Matlab代码_取整_05

【车间调度】基于遗传算法实现柔性车间调度问题附Matlab代码_遗传算法_06

【车间调度】基于遗传算法实现柔性车间调度问题附Matlab代码_遗传算法_07

【车间调度】基于遗传算法实现柔性车间调度问题附Matlab代码_取整_08

【车间调度】基于遗传算法实现柔性车间调度问题附Matlab代码_取整_09

【车间调度】基于遗传算法实现柔性车间调度问题附Matlab代码_取整_10

2 部分代码

%-------------------------计算各染色体的适应度-----------------------
function [fit,Y1,Y2,Y3] = object(p,TN,N,P,m,n) %计算各染色体的适应度
fit = zeros(N,1);
Y1 = cell(N,1);
Y2 = cell(N,1);
Y3 = cell(N,1);
for j = 1:N
Y1{j} = zeros(m,n);
Y2{j} = zeros(m,n);
Y3{j} = zeros(m,n);
end
for w = 1:N
X = p{w}; %变量初始化
T = TN{w};
[m,n] = size(X);
Y1p = zeros(m,n);
Y2p = zeros(m,n);
Y3p = zeros(m,n);
Q1 = zeros(m,1); %计算第一道工序的安排
Q2 = zeros(m,1);
R = X(:,1); %取出第一道工序的机器号
Q3 = floor(R); %向下取整得到各工件在第一道工序使用的机器号
for k =1:P(1) %第一道工序的时间安排,k为机器号
pos = find(Q3 == k); %在Q3中取出用机器k加工的工件编号
lenpos = length(pos); %使用机器k的工件数量
if lenpos == 0
end
if lenpos >= 1
Q1(pos(1)) = 0;
Q2(pos(1)) = Q1(pos(1)) + T(pos(1),1);
if lenpos >= 2
for j = 2:lenpos
Q1(pos(j)) = Q2(pos(j-1));
Q2(pos(j)) = Q1(pos(j)) + T(pos(j),1);
end
end
end
end
Y1p(:,1) = Q1;
Y2p(:,1) = Q2;
Y3p(:,1) = Q3;
for k = 2:n %计算第2到n道工序的安排
Q1 = zeros(m,1);
Q2 = zeros(m,1);
R = X(:,k); %取出第k道工序的机器号
Q3 = floor(R); %向下取整得到各工件在第k道工序使用的机器号
R1 = X(:,k-1); %取出前一道工序的机器号
Q31 = floor(R1); %向下取整得到各工件在前一道工序使用的机器号
for i = 1:P(k) %第i道工序的时间安排,k为机器号
pos = find(Q3 == i);
lenpos = length(pos);
pos1 = find(Q31 == i);
lenpos1 = length(pos1);
if lenpos == 0
end
if lenpos >= 1
EndTime = Y2p(pos(1),k-1);
POS = zeros(1,lenpos1);
for j = 1:lenpos1
POS(j) = Y2p(pos1(j),k-1);
end
EndTime1 = max(POS);
if EndTime1 > EndTime
EndTime = EndTime1;
else
EndTime = EndTime;
end
Q1(pos(1)) = EndTime;
Q2(pos(1)) = Q1(pos(1)) + T(pos(1),k-1);
if lenpos >= 2
for j = 2:lenpos
Q1(pos(j)) = Y2p(pos(j),k-1); %前一道工序的结束时间
if Q1(pos(j)) < Q2(pos(j-1))
Q1(pos(j)) = Q2(pos(j-1));
else
Q1(pos(j)) = Q1(pos(j));
end
Q2(pos(j)) = Q1(pos(j)) + T(pos(j),k);
end
end
end
end
Y1p(:,k) = Q1;
Y2p(:,k) = Q2;
Y3p(:,k) = Q3;
end
Y2m = Y2p(:,n);
Y2m1 = Y2p(:,n-1);
Zx = max(Y2m1);
Zp = max(Y2m);
if Zx >Zp
Zp = Zx;
end
fit(w) = Zp;
Y1{w} = Y1p;
Y2{w} = Y2p;
Y3{w} = Y3p;
end

3 仿真结果

【车间调度】基于遗传算法实现柔性车间调度问题附Matlab代码_d3_11

【车间调度】基于遗传算法实现柔性车间调度问题附Matlab代码_遗传算法_12

【车间调度】基于遗传算法实现柔性车间调度问题附Matlab代码_取整_13

【车间调度】基于遗传算法实现柔性车间调度问题附Matlab代码_遗传算法_14

4 参考文献

[1]郭庆、张明路、孙立新、刘轩. 基于遗传算法的柔性车间调度优化[J]. 科学技术与工程, 2020, 20(29):6.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。


网友评论