车间调度|基于遗传算法的柔性车间调度(Matlab代码实现)

目录

1 概述

2 遗传优化算法 

3 车间调度 

 4 运行结果

5 参考文献 

6 Matlab代码实现


1 概述

调度通过合理安排生产资源,以缩短生产时间和提高资源利用率为目的,在生产系统中扮演着重要的角色。作业车间调度问题(Job-shop Schedu-ling Problem,JSP)是一类经典的调度问题,其通过安排n个工件在m台机器上的加.工顺序来优化一个或多个调度指标。在JSP中,每个工件由一道或多道具有固定加工顺序的工序构成,且每道工序的加工机器唯一。柔性作业车间调度问题(FlexibleJob-shop Scheduling Problem,FJSP)是JSP的扩展,它允许一道工序有多台可供选择的加工机器,且
在不同机器上的加工时间可能存在差异,即相对于JSP,FJSP具有一般性,更符合柔性制造系统的实际情况。在FJSP中,机器柔性虽然能够提高制造系统的执行效率,但是扩大了可行解的范围,增加了求解问题的难度和复杂性。

柔性作业车间调度(FJSP)是一类具有广泛应用背景的调度问题,作为求解FISP最受欢迎的算法
之一,遗传算法引起了广泛关注。针对求解FJSP的遗传算法,特别是5类主要染色体编码方法以及相关的交叉和变异算子进行全面综述,并从编码可行性、编码空间与解空间的映射关系、染色体存储空间、解码复杂性、编码完备性、遗传操作复杂性和遗传操作多样性7个维度综合评价了5类编码方法。结果表明,MSOS-I编码是遗传算法求解FJSP较好的染色体编码方法,其染色体结构简单,并可选用较多类型的交叉和变异算子。
 

2 遗传优化算法 

智能优化算法——遗传算法(Python&Matlab实现)

智能优化算法——遗传算法

3 车间调度 

定每道工.序的加工机器(路径子问题),开确定所有工序在机器上的加工顺序(调度子问题),以实现对一个或多个调度目标的优化,如最大完工时间、总机器负荷、总延迟时间、最大松弛时间等。
求解FJSP通常需要满足如下假设条件:
(l)0时刻,所有工件均处于待加工.状态,所有机器均处于空闲状态。
(2)同一时刻,同一台机器只能加工一个工件的某道工序。
(3)同一时刻,同一工件只能被一台机器加且不允许中断正在加工的T序。
(4)同一工件的工序加工顺序固定且不可更改,不同工件的工序间没有顺序约束关系。
基于上述FJSP的描述,很多学者提出求解FJSP的O-l整数规划模型,另外析取图模型也常用于描述FJSPL,本文不再给出这些模型的数学定义。部分代码:

function [Z,machine_weight,pvals] = fitness(chroms,num_machine,e,num_job,num_op)
sizepop=size(chroms,1);
pvals=cell(1,sizepop);
Z1=zeros(1,sizepop);
Z2=Z1;
total_op_num=sum(num_op);  % 总工序数
for k=1:sizepop
    chrom=chroms(k,:);
    machine=zeros(1,num_machine);  % 记录各机器变化时间
    job=zeros(1,num_job);  % 记录各工件变化时间
    machine_time=zeros(1,num_machine);  % 计算各机器的实际加工时间
    pval=zeros(2,total_op_num);  % 记录各工序开始和结束时间
    for i=1:total_op_num
        % 机器时间大于工件时间
        if machine(chrom(total_op_num+i))>=job(chrom(i))
            pval(1,i)=machine(chrom(total_op_num+i));  % 记录工件开始时间
            machine(chrom(total_op_num+i))=machine(chrom(total_op_num+i))+chrom(total_op_num*2+i);
            job(chrom(i))=machine(chrom(total_op_num+i));
            pval(2,i)=machine(chrom(total_op_num+i));  % 记录工件结束时间
            % 机器时间小于工件时间
        else
            pval(1,i)=job(chrom(i));
            job(chrom(i))=job(chrom(i))+chrom(total_op_num*2+i);
            machine(chrom(total_op_num+i))=job(chrom(i));
            pval(2,i)=job(chrom(i));
        end
        machine_time(chrom(total_op_num+i))=machine_time(chrom(total_op_num+i))+chrom(total_op_num*2+i);
    end
    Z1(k)=max(machine);  % 最大机器时间值,对应makespan
    % machine_weight=machine_time/sum(machine_time);  % 计算各机器的负荷
    machine_weight=machine_time;
    Z2(k)=max(machine_weight)-min(machine_weight);
    pvals{k}=pval;
end
% min_makespan=min(Z1);%所有染色体的makespan最优值
% max_makespan=max(Z1);
% min_weight=min(Z2);%负载最优值
% max_weight=max(Z2);
% Z=e*((Z1-min_makespan)./(max_makespan-min_makespan))+(1-e)*((Z2-min_weight)./(max_weight-min_weight));%计算适应度
Z=e*Z1+(1-e)*Z2;

 4 运行结果

5 参考文献 

部分理论引用网络文献,如有侵权请联系删除。

[1]黄学文,陈绍芬,周阗玉,孙宇婷.求解柔性作业车间调度的遗传算法综述[J].计算机集成制造系统,2022,28(2):536-551

6 Matlab代码实现

猜你喜欢

转载自blog.csdn.net/weixin_46039719/article/details/128097325