目录
1 概述
2 遗传优化算法
3 车间调度
4 运行结果
5 参考文献
6 Matlab代码实现
调度通过合理安排生产资源,以缩短生产时间和提高资源利用率为目的,在生产系统中扮演着重要的角色。作业车间调度问题(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较好的染色体编码方法,其染色体结构简单,并可选用较多类型的交叉和变异算子。
智能优化算法——遗传算法(Python&Matlab实现) |
智能优化算法——遗传算法 |
定每道工.序的加工机器(路径子问题),开确定所有工序在机器上的加工顺序(调度子问题),以实现对一个或多个调度目标的优化,如最大完工时间、总机器负荷、总延迟时间、最大松弛时间等。
求解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;
部分理论引用网络文献,如有侵权请联系删除。
[1]黄学文,陈绍芬,周阗玉,孙宇婷.求解柔性作业车间调度的遗传算法综述[J].计算机集成制造系统,2022,28(2):536-551