zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

MATLAB代码 实现 基于 优化 调度 遗传算法 柔性
2023-09-14 09:14:29 时间

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

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

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

目录

💥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代码实现