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 遗传优化算法
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代码实现
回复:基于遗传算法的柔性车间调度