欢迎光临散文网 会员登陆 & 注册

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

2022-05-16 00:13 作者:Matlab工程师  | 我要投稿

1 简介

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

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);    endfor 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 仿真结果

4 参考文献

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

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

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






【车间调度】基于遗传算法实现柔性车间调度问题附Matlab代码的评论 (共 条)

分享到微博请遵守国家法律