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


     💥💥💞💞欢迎来到本博客❤️❤️💥💥

    🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

    ⛳️座右铭:行百里者,半于九十。

    目录

    💥1 概述

    📚2 运行结果

    🎉3 参考文献

    🌈4 Matlab代码实现

    💥1 概述

       车间生产调度作为关键技术和核心内容在离散柔性制造生产计划中起主要作用1,因为每个企业车间的生产资源是有限的,并且工件的加工也会受到设备工艺的限制,如何合理安排每个工件的每个生产步骤在哪台设备上加工,以确保所选定的目标的最佳性能,这就是调度的目的。该问题的特征在于显著的离散性、复杂性、多重约束和不确定性。传统作业车间生产调度很难达到最佳的排产效果,这样就会造成生产效率低下,浪费生产资源,增加企业生产成本。因此,用来实现柔性车间调度的智能算法亟需设计,进而可以提高生产效率,提高企业的市场竞争力。
       柔性车间生产排产调度问题(flexible job shop scheduling problem,FJSP)是传统作业车间生产调度问题(job shop scheduling problem,JSP)的扩展。FJSP这个问题在1990年由Bruker等[2l提出
    ,在JSP中,每道工序是预先确定的,并且其生产设备和生产时间也是
    预先确定的。而在FJSP中,每道工序的生产设备是不确定的。每道工序都有加工设备集,可在其中挑选任一设备进行加工;并且不同生产设备生产同道工序所花费时间不同,这增加了该类调度问题的灵活性,且在实际生产中为常见情况.所以解决该问题势在必行。
     

    文献来源:

    📚2 运行结果

     

     部分代码:

    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;

    🎉3 参考文献

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

    [2]张仕坤,朱卫勇,谢钧.基于遗传算法的柔性车间作业调度研究[J].机电信息,2013(18):170-171.DOI:10.19514/j.cnki.cn32-1628/tm.2013.18.110.

    🌈4 Matlab代码实现

  • 相关阅读:
    openai sora 只能根据文本生成视频?不,TA 是通用物理世界模拟器
    shell脚本编程基础(上)
    如何提高同行评审的有效性
    Vite依赖预构建
    读博后才知道的真道理
    mysql的增删改查
    【论文笔记】SVDM: Single-View Diffusion Model for Pseudo-Stereo 3D Object Detection
    CSDN竞赛-第六期
    SpringBoot--在Entity(DAO)中使用枚举类型
    【附源码】计算机毕业设计SSM税务综合信息平台
  • 原文地址:https://blog.csdn.net/weixin_46039719/article/details/127803190