基于调度算法的柔性车间问题的研究

摘要

生产(重)调度是生产车间管理的重要内容。本文研究了含RGV柔性车间调度问题的影响,构建了包含轮盘赌、模型推广、图论、模拟退火等以提高工厂效率、缩短工件完工时间为目标的数学优化模型。

针对问题一,该问题共设定四个模型分别是:无故障单工序物料加工模型,存在故障率的单工序物料加工模型,无故障多工序物料加工模型,存在故障率的多工序物料加工模型。对于单工序模型来说,运用模拟退火算法来找到RGV在8台CNC中的最优路径,缩短工件的完成时间;运用轮盘赌算法随机挑取CNC来体现机器故障率,当这台CNC损坏后(两台或两台以上CNC同时损坏为小概率事件,因此可忽略不计),寻找最优的损坏时间,以求生产的成料数量达到最多。剩余7台CNC则依然运用模拟退火算法来寻找最优路径。

对于多工序模型来说,首先根据上下料、第一道工序和第二道工序的加工时间比来确定两种不同类型机器的数量比。通过模拟退火算法优化确定所有CNC的分布位置,然后运用贪心算法推测出RGV的最优路径。关于故障率的处理则与单工序模型相同。

针对问题二,验证模型的实用性则是根据模型的稳定性和产生的经济效益来判断,而稳定性的判断则是轻微改变某个参数来判断模型结果的波动大小,并和原结果进行作比,结果越接近1越稳定。而根据表1中系统作业参数得出模型的稳定性参数为0.9896,系统稳定,且该模型下产生的熟料数量多,利润空间大,因此,模型的实用性较高。而有效性的判断则是通过预计结果与实际结果的比较进行判断,结果越接近1,有效性越高,而三组数据中算法有效性系数均在0.91以上,因此模型中的算法是有效的。而剩余的调度策略、系统的作业效率以及生成的表格在将下文中给出。

在最后,给出了模型的优缺点和评价方向,并提出了相应的改进方案。

关键词:柔性车间调度;模拟退火算法;重调度;多目标规划

 

 

 

 

 

  1. 问题重述

1.1问题背景

软件和硬件的共同发展,促进了中国工业化和信息化的深度合作。

近些年来,中国的互联网的快速成长,涌现出一大批以互联网为基础的智能工厂;在不断完善产业链的过程中,工厂正在经历从“制造”到“智造”的转变,很多企业智能产品线的引进大幅提高了产品效率,降低了失误率;同时,也是未来制造业的发展趋势。

1.2问题叙述

问题一:对题目中给出的问题进行分析,给出两种情况下的动态调度模型和相应的求解算法。

问题二:在已知表1参数的条件下,分别检验模型的实用性和算法的有效性,且给出第一问中模型的调度策略和该任务系统的作业效率,并将结果分别填入附件2中提供的表中。

  1. 问题假设

为了使问题得到简化容易求解,在考虑实际情况的条件下,做出以下合理假设:

假设一:人工维修后,CNC后续故障的发生概率不受先前维修的影响,在整个班次(8小时里)始终约为1%多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci

假设二:CNC加工完成一个两道工序物料的第一道工序和第二道工序的时间间距不能过大。

假设三:本题目中所给出的数据真实可靠,且具有分析价值。

  1. 符号说明

符号

说明

tij多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_02

表示第i多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_03 台CNC与第j多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_04 台CNC之间移动所需时间

tx多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_05

表示距下料传送带最近的CNC上下料作业时间

ts多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_06

表示距上料传送带最近的CNC上下料作业时间

tj多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_07

工件加工所需时间

Ci多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_08

表示第i台CNC   (1≤i≤8)

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_09

tCNCis

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_10

表示第i台CNC

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_11

开始时间

p多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_12

表示RGV开始运作前准备的时间

t1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_13

表示加工过程第一道工序所需时间

t2多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_14

表示加工过程第二道工序所需时间

length

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_15

表示数组的长度

tle多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_16

表示最后一个CNC

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_17

加工结束时刻

tls多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_18

表示最后一个CNC

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_19

加工开始时刻

tij多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_20

表示第i多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_21 台CNC与第j多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_22 台CNC之间移动所需时间

注:其他符号将在下文中给出具体说明。

  1. 模型建立与求解

5.1问题一的分析

问题一要求我们对单工序和多工序作业以及可能存在的机器故障的情况下对问题进行分析、研究,从而得出相应的RGV动态调度模型。考虑到问题中提到的多种情况,我们将RGV调度模型分为以下四种:无故障正常运行的单工序物料加工模型,存在故障情况下的单工序物料加工模型,无故障正常运行的多工序物料加工模型,存在故障情况下的多工序物料加工模型。且对于每个部分都存在特殊情况(在模型的建立中会详细给出)。

5.1.1无故障单工序物料加工动态调度模型

5.1.1.1模型的分析

对于正常运行的单工序物料加工模型,每台CNC所安装的刀具使相同的,则8台CNC的作用功能是相同的;RGV引导车运行1个单位,运行2个单位与运行3个单位所需时间的关系、物料加工所需时间与7台(下文5.1.1.2.2关系2中给出解释)CNC上下料时间和运行时间之和的关系,是调度问题的核心。

RGV引导车移动不同单位所需的时间之间是否存在关系,则影响着CNC的开始次序,而物料加工时间则会对后续的上下料请求是否存在排队产生重要的影响。具体流程图如图5.1.1.1.1所示:

 

 

 

 

 

 

 

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_23

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_24

 

 

 

 

 

 

图5.1.1.1.1 流程图

5.1.1.2模型的建立

5.1.1.2.1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_25

RVG在等距CNC间的移动时间

对于RGV在等距CNC之间的移动时间存在以下三种情况:三段路段RGV移动时间相同,三段距离中存在两段RGV移动时间相同,三段路段中每段RGV移动时间都不同。所表示的间距均以上料传送带旁的CNC进行表示,下面将对上述三种情况进行研究。

情况1:<三段路段RGV移动时间相同>t13=t35=t57=t

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_26

(其中t13多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_27 是RGV从1号CNC移动到2号CNC移动的时间,同理t35多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_28t57多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_29  也是如此)如图5.1.1.2.1所示:

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_30

 

 

 

 

 

 

 

图5.1.1.2.1 t多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_31 时间对应关系图

同侧的CNC相邻两台的RGV运行时间是相同的,则RGV在给第一个CNC上料的位置决定着RGV的准备时间P多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_32

约束条件:

1'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_33 :上料前准备时间

ci=1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_34

时,RGV处于CNC1号机位置,P=0

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_35

ci=3

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_36

时RGV处于CNC3号机位置,P=t3

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_37

ci=5

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_38

时,RGV处于CNC5号机位置,P=2t5

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_39

ci=7

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_40

时,RGV处于CNC7号机位置,P=3t7

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_41

;即:0,ci=1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_42

         t3多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_43ci=3

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_44

P=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_45

          2t5多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_46ci=5

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_47

         3t7多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_48ci=7

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_49

2'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_50 :最后一台CNC加工的结束时间

若使得最后一台CNC较早的结束,则应使最后一台CNC较早的开始;那么从初始时刻到最后一台CNC上料时间最短,为此我们引进图论加以证明。对于智能加工系统中的8台CNC,将其中每一台CNC看作一个点,即V=v1,v2,v3,⋯,v8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_51

,那么tij多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_52 则是vi多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_53vj多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_54 所构成边eij多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_55 的权值,即E=eij|1≤i,j≤8∪i≠j

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_56

;在此基础上,由G=V,E

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_57

可构成含权无向图,T多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_58 为图G多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_59 的权值矩阵,存在:T=t11t12t21t22t18t28t81t82t88

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_60

其中,tii=1≤i≤8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_61

表示从CNCi多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_62 号机到CNCi多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_63 号机是不花费时间的,tij=tji1≤ij≤8i≠j

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_64

表示图为含权无向图,由CNCi多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_65 号机到CNCj多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_66 号机的时间是相同的,tii+1=0(1≤i≤7i≡1(mod2))

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_67

表示序号相邻的两台CNC且初始CNC序号为奇数时的到达所需时间间隔为0,即不需要时间,其余的tij多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_68 则由条件t13=t35=t57=t

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_69

进行相应的变换得到。情况2:<三段距离中存在两段RGV移动时间相同>t13t35=t57=β

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_70

t13t35t57

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_71

的定义与上文中相同)。

对于RGV的运动而言,其中所需要经过相邻两台CNC之间的距离时相同的,若RGV的运动速度不同,则每段等距所需的时间时不同的。由于RGV运动的开始阶段是一个加速过程(模型中设定的猜测),若RGV持续运动,则接下来将保持匀速运动。与情况1相比,上料前的准备时间以及含权矩阵需要调整。

约束条件:

1'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_72 :上料前时间

ci=1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_73

时,RGV处于CNC1号机位置,P=0

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_74

ci=3

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_75

时RGV处于CNC3号机位置,P=α3

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_76

ci=5

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_77

时,RGV处于CNC5号机位置,P=α+β5

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_78

ci=7

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_79

时,RGV处于CNC7号机位置,P=α+2β7

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_80

;即:           0多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_81 , ci=1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_82

           α3多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_83ci=3

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_84

P=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_85

           α+β5多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_86ci=5

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_87

          α+2β7

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_88

ci=7

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_89

2'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_90 :含权矩阵的调整

对于含权矩阵T多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_91 其中tii=1≤i≤8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_92

tij=tji1≤ij≤8i≠j

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_93

tii+1=0(1≤i≤7i≡1(mod2))

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_94

这三组符号所对应的元素是不会随RGV移动等距的时间变化而变化,只会由CNC的位置确定,其余元素则由t13t35=t57=β

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_95

进行调整。情况3:<三段路段中每段RGV移动时间都不同>t13t35t57=γ

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_96

t13t35t57

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_97

的定义与上文中相同)。

对于RGV的运动而言,经过相邻的等距路段速度可能是不同的,其中在每一段路段中都会存在一定的差异,会导致移动同距离所用时间是不同的,那么在情况2上进行一定的调整。

约束条件:

1'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_98 :上料前时间

ci=1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_99

时,RGV处于CNC1号机位置,P=0

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_100

ci=3

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_101

时RGV处于CNC3号机位置,P=α3

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_102

ci=5

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_103

时,RGV处于CNC5号机位置,P=α+β5

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_104

ci=7

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_105

时,RGV处于CNC7号机位置,P=α+β+γ7

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_106

;即:           0多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_107 , ci=1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_108

           α3多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_109ci=3

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_110

P=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_111

           α+β5多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_112ci=5

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_113

          α+β+γ7

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_114

ci=7

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_115

2'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_116 :含权矩阵的调整

只对tii=1≤i≤8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_117

tij=tji1≤ij≤8i≠j

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_118

tii+1=0(1≤i≤7i≡1(mod2))

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_119

之外的元素进行调整,且依据于t13t35=t57=β

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_120


 

5.1.1.2.2物料加工用时与其他总用时

对于该系统除物料加工外总用时还包括以下三部分:RGV准备时间,CNC总的上下料时间,RGV移动时间。设定总耗时为tz多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_121 ,那么:

tz=P+n-i1%2ts+m-i1%2tx+ti1i2⋯i8+ti1i8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_122

其中P多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_123 为准备时间,n多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_124 为上料传送带旁CNC在物料加工过程中上下料个数,m多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_125 为下料传送带旁CNC在物料加工过程中上下料个数,ti1i2⋯i8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_126

为经过8个CNC最优时间,ti1i8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_127

为从终结点到开始结点所需时间。因为物料加工用时和其他总用时之间存在一种比较关系,tj>tz

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_128

tj<tz

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_129

,下面将对这两种特殊关系进行分析。关系1 tj>tz

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_130

由于初始时开始进行的位置无法确定,因此无法判断第一次操作是如何进行的,蛋壳通过初始结点进行确定:

         0,初始进行上下料操作的是CNC偶数号机,i≡0(mod2)

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_131

i1%2=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_132

 

  1. 初始进行上下料操作的是CNC奇数号机,i≡1(mod2)

若在第一轮运转中未发生请求信号冲突,那么在以后的运转过程中不会发生。

关系2 tj<tz

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_133

一台CNC加工物料所需时间不足以支持剩余所有CNC所消耗的其他时间,则会出现多个CNC请求RGV操作,设定需求信号序列为h1h1,⋯,hk

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_134

(k<8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_135

),再根据图论求出耗时序列为vi1,vi2,⋯,vi8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_136

;设定下次的运行结点为d多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_137 ,且d=hi(hiV'hi=vpi)

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_138

此时RGV所在CNC为vl多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_139 ,则vl多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_140 后序列V'=vp1,vp2,⋯,vp8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_141

, V'∈V

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_142

。[1]目标函数为:minti1ti2ti8+ti1ti8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_143

约束条件:

       i1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_144 , i2多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_145 ,⋯,i8∈V

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_146

       tijtik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_147

,j,k∈V, tijtik∈E

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_148

       ti1ti2ti8=ti1ti2+ti2ti3+⋯+ti7ti8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_149

S.T.

       tCNCie<tCNCje

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_150

其中 tCNCis>tCNCjs

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_151

, 1≤i,j≤8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_152

,且i≠j

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_153

       replacei,j,k,

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_154

其中1≤i,j,k≤8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_155

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_156

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_157

                        tik多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_158 , tij+tjk>tik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_159

5.1.1.3模型求解的算法过程

根据上文中提出的调度模型,我们运用相应的算法,并将算法过程步骤记录下来,那么将存在以下5步。

Step1:对于8个CNC在初始运行时都会发出需求信号,则存在若干种相应方程式,对此选取所需耗时最小的序列进行,则从开始的vi1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_160 所构成的边集E=vi1vi∝,vi1vi∝+1,⋯

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_161

,选取minE

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_162

并将边的终结点作为初结点依次进行。Step2:初始化数组,为每个CNC开两个数组用以存取每个CNC上加工物料的开始时间和结束时间,length=t-pcits+tx+2tj×2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_163

,以及每个CNC上物料剩余时间。

Step3:以第k多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_164 个物料为例,根据Step1中的序列调整CNC上第k多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_165 个物料的开始时间和其余CNC上物料的剩余时间。

Step4:物料剩余时间的计算。若第k多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_166 个物料剩余时间为0,则将此时刻初始为本CNC上第k+1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_167

个物料的开始时刻以及本CBC上第k多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_168 个物料结束时刻,并使物料甚于时刻为tj多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_169

Step5:运行时长的计算。若运行时长达到t多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_170 则终止,不到则重复进行Step4操作,直至满足要求。

5.1.2故障情况下的单工序物料加工动态调度模型

5.1.2.1模型的分析

对于存在故障率的单工序物料加工模型中,在车间作业过程中存在1%的故障概率,且机器修复需要10~多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_171 20分钟。为了更加接近实际情况,我们将随机分配某个时间段内某台CNC发生故障,相应确定本CNC的修复时间。

在CNC未发生故障时,情况与正常工作的单工序物料加工工程相同。若某台CNC发生故障,那么这台CNC将在一定时间内时无法使用的,则需确定相应的物料加工流程如图5.1.2.1所示:

 

 

 

 

 

 

 

 

 

 

 

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_172

 

 

 

 

 

 

 

 

 

 

 

 

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_173

 

5.1.2.2模型的建立

5.1.2.2.1多台CNC发生故障概率计算

因为故障率的存在,第i多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_174 台CNC都可能会在某个时刻发生故障,记发生故障的事件为Ai多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_175 ,而发生故障的概率为1%,则PAi=1%

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_176

。其中i=1,2,⋯,8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_177

。记事件B多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_178 为两台及以上CNC在同一时间段内同时发生故障的概率为PB

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_179

,即:PB=1-PA1PA2∙⋯∙PA8-C81PA1PA2∙⋯∙PA8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_180

PA1=PA2=⋯=PA8=0.99

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_181

, PA1=PA2=⋯=PA8=0.01,

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_182

得PB=0.0027<0.05

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_183

故多台CNC发生故障时小概率事件,则在同一时间段内只能由一台发生故障。

5.1.2.2.2某时刻某CNC故障发生事件的计算

对于整个智能车间系统,其在一段时间内CNC产生k多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_184 个成聊,并将其标记为n1,n2,n3,⋯,nk

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_185

。因为已知的故障的发生率约为1%,将其预划分为nk100+1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_186

组,并将初始的选取的n1,n2,n3,⋯,n10

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_187

。选用轮盘赌选择方法进行目标的选取。处于轮盘中的CNC序号被选择的概率与其适应度函数值大小成正比,设群体大小为N,个体n多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_188 的适应度为fni

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_189

,则个体xi多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_190 的选择概率为:Pni=fnik=1Nfnk

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_191

选择的过程为:1'D

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_192

0,1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_193

内产生一个均匀分布的随机整数α多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_1942'

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_195

若α≤q1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_196

,则n1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_197 被选中;3'

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_198

qk-1<α≤qk2≤k≤N,

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_199

nk多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_200 被选中。其中的qi多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_201 称为ni(i=1,2,N)

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_202

的积累概率。

对于智能加工体系,在未发生故障(正常运转)的情况下一轮所需时间为t多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_203 ,故障修复时间l多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_204 ,一轮中CNC生产成料P多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_205 ,则在故障时间内生产的成料数为nc多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_206 ,则存在关系式:

nc=lc∙P=lPt

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_207

由多台CNC同时发生故障为小概率事件,其发生概率可以忽略为0,通过轮盘赌算法找到的成料标记为nl多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_208 ,即生产序号在(nlnl+lPt)

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_209

内不会发生故障,则需在nl+lPtnl+lPt+100内按照上

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_210

述模型进行选取,直至nk多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_211

5.1.2.2.3故障发生后剩余CNC工作次序的确定

智能加工系统的8台CNC简化成8个点,若第i多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_212 台CNC发生故障,则V2=v1,v2,v3,⋯,vi-1,vi,vi+1(i≤8)

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_213

,则tij多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_214vi多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_215vj多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_216 所构成的边eij多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_217 的权值,即E2=eij|1≤i,j≤8∪i≠j∪i,j≠vi

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_218

,则由G=V2,E2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_219

可构成含权无向图,T多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_220 为图G多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_221 的权值矩阵,那么T多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_222 :T=t11t13ti-11ti-12t1it1lt2lt3lti1ti1⋯⋯⋯⋯tl1tl1t4ltll

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_223

其中,tii=∞1≤i≤l

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_224

tij=tji1≤i,j≤l

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_225

tii+1=0(1≤i≤l)

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_226

,其余元素则可根据P多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_227 进行调整。

5.1.2.2.4 CNC器械修理事件的确定

[2]某个CNC在某时刻发生故障,则在未来10~20

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_228

分钟内无法工作,那么我们需要考虑除了此CNC外剩余7台CNC的工作情况,故在y多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_229 事件内可以存在含故障操作和无故障操作两种工作方式,故此情况下该问题可优化为:max  7∙yt1+8∙600-yt2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_230

        0≤y≤600

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_231

S.T.=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_232

         t1,t2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_233

为常数其中t1=min vi1vi2vi7t2=min vi1vi2vi8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_234


若想在有限时间内加工尽可能多的成料,则应使每次通过轮盘赌算法后得到能够使用的CNC在一定时间内产生的最多的成料,因为成料的生成包括无故障情况下CNC加工以及出故障后完整的CNC加工的成料,因此存在两个目标函数。

1'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_235 正常生产成料的目标函数为:minti1ti2ti8+ti1ti8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_236

       i1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_237 , i2多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_238 ,⋯,i8∈V

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_239

       tijtik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_240

,j,k∈V, tijtik∈E

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_241

       ti1ti2ti8=ti1ti2+ti2ti3+⋯+ti7ti8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_242

 

S.T.   tCNCie<tCNCje

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_243

其中 tCNCis>tCNCjs

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_244

, 1≤i,j≤8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_245

,且i≠j

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_246

       replacei,j,k,

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_247

其中1≤i,j,k≤8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_248

                        tik多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_249 , tij+tjk>tik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_250

     replacei,j,k=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_251

                        tij+tjk

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_252

, tij+tjk<tik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_253

2'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_254 含故障生产成料的目标函数为:min tvi1vi2vi(i-1)vi(i-1)vil+ti1til

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_255

       i1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_256 , i2多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_257 ,⋯,ii-1,ii+1,⋯,ilV2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_258

       tijtik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_259

,j,k∈V2, tijtikE2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_260

       ti1ti2ti(i-1)ti(i+1)til=ti1ti2+ti2ti3+⋯+ti(i-1)ti(i+1)+⋯+ti(l-1)til

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_261

 

S.T.   tCNCie<tCNCje

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_262

其中 tCNCis>tCNCjs

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_263

,i,j∈V2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_264

,且i≠j

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_265

       replacei,j,k,

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_266

其中i,j,k∈V2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_267

                        tik多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_268 , tij+tjk>tik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_269

     replacei,j,k=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_270

                        tij+tjk

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_271

, tij+tjk<tik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_272

5.1.2.3模型求解的算法过程

在故障情况下的单工序物料加工动态调度模型中,我们根据模型的具体算法应用,给出以下算法的解决过程,该过程总共分为7步解决。

Step1:对于8个CNC在初始运行时都会发出需求信号,则存在若干种相应方程式,对此选取所需耗时最小的序列进行,则从开始的vi1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_273 所构成的边集E=vi1vi∝,vi1vi∝+1,⋯

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_274

,选取minE

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_275

并将边的终结点作为初结点依次进行。Step2:初始化数组,为每个CNC开两个数组用以存取每个CNC上加工物料的开始时间和结束时间,length=t-pcits+tx+2tj×2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_276

,以及每个CNC上物料剩余时间。

Step3:以第k多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_277 个物料为例,根据Step1中的序列调整CNC上第k多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_278 个物料的开始时间和其余CNC上物料的剩余时间。

Step4:若存在故障,则在0~600s

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_279

对生料进行加工,存在需求同时响应时以产生新的序列。Step5:若在加工过程中CNC出现故障,则通过寻找在0~600s

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_280

内合理的正常生料加工以及有故障生料的分配序列。Step6:物料剩余时间的计算。若第k多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_281 个物料剩余时间为0,则将此时刻初始为本CNC上第k+1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_282

个物料的开始时刻以及本CBC上第k多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_283 个物料结束时刻,并使物料甚于时刻为tj多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_284

Step7:运行时长的计算。若运行时长达到t多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_285 则终止,不到则重复进行Step4操作,直至满足要求。

5.1.3无故障多工序物料加工动态调度模型

5.1.3.1模型分析

对于两道工序加工过程中的第一道和第二道工序,因为生料需要在完成第一道工序后才能进行第二道工序。因此,我们需要确定两种不同类型CNC机器的数量分配,并通过对其位置的调整以得到更优的加工时间从而在每次作业时间内完成尽可能多的生料。

在完成第一道工序和第二道工序CNC机器的数量和位置分配后,结合相应的数学模型(下文模型建立中将会给出说明),通过对生料工序在不同类型CNC上的时间限制,生料先后在CNC上出现时刻,以及每台CNC每次加工生料数量限制等约束条件加以控制。其模型的流程图如5.1.3.1.1所示:

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_286

 

 

 

 

 

 

 

 

 

 

 

图5.1.3.1.1模型流程图

5.1.3.2模型建立

5.1.3.2.1不同类型CNC数量的确定

在同一作业时间内,若想生产尽可能多的成料,那么则需要每台CNC尽可能缩短空闲时间,因此,只有做第一道工序的CNC的运行时间之和与做第二道工序的CNC的运行时间之和相同时,机器的空闲时间才会最短。现设定做第一道工序的CNC的数量为m1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_287 ,做第二道工序的CNC的数量为m2多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_288 ,CNC总台数为N多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_289 。那么存在以下方程式:

m1m2=2t1+ts+tx2t2+ts+tx

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_290

m1+m2=N

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_291

5.1.3.2.2 CNC的位置确定

CNC初始位置对后续的时间优化产生一定的影响,因为有两种类型的CNC,且两种机器数量存在m1m2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_292

m1>m2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_293

这两种情况,下面我们将对这两种情况进行讨论。

 

情况1:m1m2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_294

此情况下进行第一道工序的CNC的数量多于进行第二道工序的CNC数量,则可根据初始等距CNC移动时间来调整含权矩阵T多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_295 ,对于上料传送带旁的CNC进行描述RGV运行的耗时:t13t35t57=γ

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_296

。对权值矩阵T多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_297 进行一定的调整,tii=∞1≤i≤8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_298

表示RGV无法在第i多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_299 台CNC到第i多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_299 台CNC之间移动是不存在的,tij=tji(1≤i,j≤8,i≠j)

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_301

表示图为含权无向图,由第i多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_302 台CNC到第j多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_303 台CNC与从第j多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_304 台CNC到第i多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_305 台CNC的时间是相同的,tii+1=0(1≤i≤7,i≡1(mod2))

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_306

表示序号相邻的两台CNC,并以上料传送带旁的CNC序号开始间距所需的时间为0,其余元素根据t13t35t57=γ

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_307

调整。因为存在m1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_308 个做第一道工序的CNC和m2多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_309 个做第二道工序的CNC,且如果想要m1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_310 个做第一道工序的CNC以及第一道工序产生的半成品放到做第二道工序的CNC上的时间最短,那么我们需要从图中选取m1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_311 个点代表做第一道工序的CNC和m2多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_312 个点代表做第二道工序的CNC。[3]那么存在m1=vi1vi2vil

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_313

m2=vk1vk2vkj

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_314

,则目标函数为:m1⊆V

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_315

, m2⊆Vmin ti1ti2tj1+tk1tk2+⋯+tjk

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_316

       i1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_317 , i2多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_318 ,⋯,ij,k1,k2,⋯,kjijkjm2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_319

       tijtik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_320

,j,k∈V, tijtikE

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_321

       ti1ti2tij=ti1ti2+ti2ti3+⋯+ti(j-1)tij

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_322

       tk1tk2tkj=tk1tk2+tk2tk3+⋯+tk(j-1)tkj

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_323

   tCNCie<tCNCje

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_324

其中 tCNCis>tCNCjs

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_325

,i,jm1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_326

,或i,jm2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_327

S.T.   replace1i,j,k,

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_328

其中i,j,km1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_329

       replace2i,j,k,

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_330

其中i,j,km2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_331

                         tik多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_332 , tij+tjk>tik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_333

     replace1i,j,k=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_334

                         tij+tjk

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_335

, tij+tjk<tik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_336

                         tik多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_337 , tjl+tlk>tik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_338

     replace2i,j,k=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_339

                         tjl+tlk

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_340

, tjl+tlk<tik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_341

情况2:m1>m2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_342

此情况表明做第一道工序的CNC数量少于做第二道工序的CNC数量,则第一道工序消耗的时间要小于第二道工序消耗的时间,含权矩阵T多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_343情况1

对于做第一道工序的m1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_344 台CNC简化为图中的m1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_345 个点,并存于集合m2多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_346 中,即m2=vk1vk2vkl

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_347

,由于m1>m2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_348

,则m2多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_349 中的点是可以动态变化的。用m2/vk1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_350

表示除去vk1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_351 的集合,m2\vk1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_352

表示除去vk1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_353 的集合,m1⊆V

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_354

, m2⊆V

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_355

,则目标函数为:minti1ti2tim1+tti1+tiα+1ti2+⋯+tiα+m1tim1-m2+tiltim1-m2+1+⋯+tiltim2=ti1ti2tim1+j=1m1tijtα'

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_356

       i1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_357 , i2多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_358 ,⋯,im1m1α,α+1,⋯,l∈m2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_359

       tijtik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_360

,j,k∈V, tijtikE

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_361

       ti1ti2tim1=ti1ti2+ti2ti3+⋯+ti(m1-1)tim1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_362

       α+i∈m2/vα+i-1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_363

,且0≤i≤m1-m2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_364

S.T.     α∈m2vαvα+1vα+m-1\

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_365

,且满足m1-m2≤i<m1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_366

   tCNCie<tCNCje

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_367

其中 tCNCis>tCNCjs

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_368

,i,jm1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_369

,或i,jm2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_370

   replacei,j,k,

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_371

其中i,j,km1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_372

                         tik多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_373 , tij+tjk>tik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_374

     replace1i,j,k=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_375

                         tij+tjk

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_376

, tik+tjk<tik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_377

5.1.3.2.3 物料加工顺序的确定

1'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_378:RGV在等距路段上移动的时间

对于RGV在等距路段上的运动,RGV的速度是存在发生变化的可能性,并且该变化是无法预测的。那么,每段路段上RGV运行的时间也可能不相同。所以我们将从上料传送带旁的CNC进行讨论,由图5.1.1.2.1可知,ci=1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_379

时,RGV处于CNC1号机位置,P=0

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_380

ci=3

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_381

时RGV处于CNC3号机位置,P=α3

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_382

ci=5

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_383

时,RGV处于CNC5号机位置,P=α+β5

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_384

ci=7

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_385

时,RGV处于CNC7号机位置,P=α+β+γ7

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_386

;即:           0多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_387 , ci=1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_388

           α3多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_389ci=3

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_390

P=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_391

           α+β5多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_392ci=5

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_393

          α+β+γ7

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_394

ci=7

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_395

 

2'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_396:物料对于加工位置的选取

初始化含权矩阵T多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_397 ,其中tii=∞(1≤i≤8)

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_398

tij=tji

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_399

, tii+1=δ(δ>0,1≤i≤7)

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_400

表示相邻两个被标记的CNC且初始上料传送带的CNC与其相对应的CNC存在一定的距离,矩阵T多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_401 的其余元素则根据t13t35t57=γ

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_402

进行调整。对于每个CNC是否空闲以及其所能完成二道工序之一的需要加标注,分别为B=B1,B2,⋯,B8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_403

,G=G1,G2,⋯,G8

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_404

,存在关系如下:

      0,表明第i多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_405 个CNC空闲              1,表明第i多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_406 个CNC做第一道工序

Bi=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_407

                             Gi=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_408

  1. 表明第i 个CNC忙碌              2,表明第i 个CNC做第二道工序

若此刻处于vj多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_409 且第j多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_410 个CNC的操作完成,Gi多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_411 的值则决定下次索要寻找CNC所属的类型,并加以选取,从而求出当前耗时的最小值。所以存在三种情况,如下所示:

1'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_412: Gi=1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_413

当前的CNC为做第一道工序的CNC,则物料的第一道工序完成后,需要进行第二道工序的加工。将vj多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_414 做为坐标原点,并分别以vjvl

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_415

为半径做圆,若Bl=1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_416

Gi=G

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_417

分别表示第l多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_418 台CNC处于忙碌状态,第l多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_419 台CNC与第j多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_420 台CNC的工序是相同的,存在min=tl=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_421

,则:        tl多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_422l≡1(mod2)

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_423

min=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_424

         多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_425,α≡1(mod2)

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_426

2'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_427: Gi=2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_428

表明当前的CNC为加工第二道工序的CNC,因物料的第二道工序做完,需要重修加入新的生料。将vj多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_429 做为坐标原点,并分别以vjvl

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_430

为半径做圆,寻找min d

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_431

,若Bl=1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_432

Gi=G

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_433

分别表示第l多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_434 台CNC处于忙碌状态,第l多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_435 台CNC与第j多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_436 台CNC的工序是相同的,存在min=tl=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_437

,则:        tl多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_438l≡1(mod2)

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_439

min=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_440

         多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_441,α≡1(mod2)

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_442

3'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_443:∃ Gi=1∪Bi=0∪Gi=Gj

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_444

表明智能加工系统中存在做第一道工序的CNC处于空闲状态,那么将通过上述方法找到与之相邻的做第一道工序的CNC。对于n个CNC加工成料的结束时刻为c=c1,c2,⋯,cn

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_445

,所以生产同样多的成料,想要消耗的时间更短,设定目标函数为:min maxc1,c2,⋯,cn=cn

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_446

 

 

       i1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_447 , i2多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_448 ,⋯,in∈V

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_449

       tijtik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_450

,j,k∈V, tijtik∈E

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_451

       cn=ti1ti2+ti2ti3+⋯+tin-1tin

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_452

 

S.T.   ti1ti2=min ti1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_453

α∈Vα≠i1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_454

       replacei,j,k,

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_455

其中i,j,kV

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_456

                        tik多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_457 , tij<tik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_458

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_459

     replacei,j,k=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_460

                      

 

5.1.3.3模型求解的算法过程

在无故障情况下的多工序物料加工动态调度模型中,给出以下算法的解决过程,该过程总共分为4步解决。

Step1:因为CNC机器分为两类,根据相应的目标函数,从而确定CNC的位置以及生料加工第一道工序的位置参数。

Step2:设置开始时间的保留、结束时间的保留状态、加工工序类型,剩余时间数组等,分别进行初始化,用以相关的信息保存。

Step3:根据Step1中确定的位置l多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_461 ,由Gl多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_462 确定CNC的加工工序的种类,并选取由l多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_463 所构成边elj多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_464 长度较小且Bj=0

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_465

,若存在Gi=1∪Bi=0∪Gi=Gj

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_466

时,则Gl=Gj

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_467

;否则GlGj

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_468

,其他相关值发生变化。

Step4:若运行时长,若运行时长达到t多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_469 终止,否则进行Step3直至满足需求。

5.1.4含故障率多工序物料加工动态调度模型

5.1.4.1模型分析

对含有故障率的两道工序的物料加工作业过程中,加工两道工序的CNC都又可能在加工过程中发生故障,某台CNC发生故障后,在一段时间内该设备无法工作,因此会对后面的CNC加工物料的次序产生一定的影响。

在CNC未发生故障的情况下,CNC的加工次序固定。若CNC发生故障,则可将其简化为与正常情况下相同的结构。具体流程图如5.1.4.1.1所示:

 

 

 

 

 

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_470

 

 

 

 

 

 

 

 

 

 

 

图5.1.4.1.1流程图

5.1.4.2模型的建立

对于CNC的工作分类和CNC的位置确定在上文中作了说明(5.1.3无故障多工序加工动态调度模型),因此在本段落不给出更多解释。

5.1.4.2.1多台CNC发生故障概率

i多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_471 台CNC进行第一道工序的CNC会在某个时刻发生故障,记发生故障的事件为Ai多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_472 (1≤i≤α

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_473

);第j多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_474 台CNC进行第二道工序的CNC会在某个时刻发生故障,记发生故障的事件为Bj多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_475 (1≤j≤β

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_476

);根据题目中给出的信息,发生故障的概率为1%,因此PAi=1%PBj=1%

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_477

,记事件C多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_478 为两台及两台以上CNC在同一时间段内发生故障的概率为PC

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_479

,即:PC=1-PA1PA2PAα PB1PB2PBβ-PA1⋯-PA1PA2⋯

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_480

由:

   PA1= PA2=⋯= PAα=PB1=⋯=PBβ=0.99

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_481

,PA1=⋯=PAα=PB1=⋯=PBβ=0.01

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_482

得:PB=0.0025<0.05

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_483

因此多台CNC发生故障是小概率事件,则在同一时间段内只能最多有一台CNC发生故障。

对于n个CNC加工成料的结束时刻为c=c1,c2,⋯,cn

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_484

,则需要生产同样多的CNC成料所消耗的时间尽可能短,则目标函数为:

5.1.4.2.2某时刻某台CNC的故障事件

对于整个智能加工系统,进行第一道工序的CNC在一段事件内加工生产成料,并将对应的CNC标记为n1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_485 , n2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_486

,⋯多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_487 ,nk多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_488 ;进行第二道工序的CNC在一段事件内加工生产l多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_489 个成料,并将对应的CNC标记为nk+1,nk+2,⋯,nk+l

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_490

。由于第一道工序与第二道工序在加工时间上存在差异,则在相同时间内生成两种不同零件数之比为t2:t1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_491

,即在t2多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_492 个一道工序半成料后有t1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_493 个二道工序成料,一次循环。由于机器故障的概率为1%多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_494 ,将其预划分为k+l100+1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_495

组,并将其从排序队列中选取n1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_496 , n2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_497

,⋯多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_498 ,nk多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_499 ,通过轮盘赌算法来进行随机选取。对于处于轮盘中被选中号码的CNC序号,其概率与其适应度函数值大小成正比。设群体大小为N,个体ni多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_500 的适应度为fni

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_501

,则个体xi多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_502 的选择概率为:Pni=fnik=1Nfnk

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_503

选择的过程为:

1'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_50401

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_505

内产生一个均有分布的随机数α多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_5062'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_507若α<q

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_508

,则n1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_509 被选中;3'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_510qk-1<α≤qk2≤k≤N

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_511

,则nk多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_512 被选中(其中qi多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_513 称为nii=1,2,⋯,N

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_514

的积累概率)。在智能加工体系中,未发生故障的时间l多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_515 ,产生的成料数为nc多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_516 。因为多台CNC同时发生故障的事件为小概率事件,所以不予计算。通过轮盘度算法找到的nl多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_517 ,即在nlnl+nc

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_518

内不会发生故障,则需在nl+ncnl+nc+100

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_519

内按照上述建立的模型进行选取,直至nk+l

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_520


5.1.4.2.3故障发生后CNC工作路径以及修理时间的确定

CNC在某个时刻发生故障,则在以后的y多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_521 时间内无法运作,那么我们需要考虑剩余CNC的运作情况。因此,在y多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_522 时刻内可以存在含故障操作和无故障操作2种操作方式,进行优化后,存在目标函数为:

max c1+c2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_523

 

 

 

       0<ti1ti2t<yi1,i2,⋯,ix∈V

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_524

       0<tj1tj2t<600-yj1,j2,⋯,jβ∈V2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_525

       c1=ti1ti2tiα

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_526

S.T.   c2=tj1tj2tjβ

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_527

   ti1ti2t=ti1ti2+ti2ti3+⋯+ti(α-1)tiα

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_528

   tj1tj2t=tj1tj2+tj2tj3+⋯+tj(β-1)tiβ

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_529

若想要在某段时间内加工的成料数量最多,则应使在无故障以及含故障生辰过程中第一二道工序产生尽可能多的成料或或半成料。即存在两个目标函数,即存在两种情况。

1'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_530:无故障情况下成料的目标函数为:min maxc1,c2,⋯,cn=cn

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_531

       i1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_532 , i2多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_533 ,⋯,in∈V

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_534

       tijtik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_535

,j,k∈V, tijtik∈E

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_536

       cn=ti1ti2+ti2ti3+⋯+tin-1tin

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_537

 

S.T.   ti1ti2=min ti1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_538

α∈Vα≠i1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_539

       replacei,j,k,

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_540

其中i,j,kV

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_541

                        tik多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_542 , tij<tik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_543

     replacei,j,k=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_544

                        tjk多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_545 , tij>tik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_546

2'多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_547:含故障率情况下目标函数为:min maxc1,c2,⋯,cn=cn

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_548

       i1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_549 , i2多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_550 ,⋯,inV2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_551

       tijtik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_552

,j,k∈V2, tijtik∈E

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_553

       cn=ti1ti2+ti2ti3+⋯+tin-1tin

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_554

 

S.T.   ti1ti2=min ti1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_555

α∈Vα≠i1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_556

       replacei,j,k,

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_557

其中i,j,k∈V2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_558

                        tik多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_559 , tij<tik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_560

     replacei,j,k=

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_561

                        tjk多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_562 , tij>tik

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_563

 

 

5.1.4.4模型求解的算法过程

在含故障率情况下的多工序物料加工动态调度模型中,给出以下算法的解决过程,该过程总共分为6步解决。

Step1:因为CNC机器分为两类,根据相应的目标函数,从而确定CNC的位置以及生料加工第一道工序的位置参数。

Step2:设置开始时间的保留、结束时间的保留状态、加工工序类型,剩余时间数组等,分别进行初始化,用以相关的信息保存。

Step3:存在故障的情况下,则在0~600s

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_564

内按存在故障的情况进行第一道第二道工序的操作模型,即含故障率多工序物料加工动态调度模型。Step4:在另一个0~600s

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_565

内找到合理的间隔y多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_566 ,使得在y多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_567 时间段内使得含故障率情况下生成的成料与无故障情况下生成成料数量达到最优。Step5:根据Step1中确定的位置l多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_568 ,由Gl多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_569 确定CNC的加工工序的种类,并选取由l多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_570 所构成边elj多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_571 长度较小且Bj=0

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_572

,若存在Gi=1∪Bi=0∪Gi=Gj

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_573

时,则Gl=Gj

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_574

;否则GlGj

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_575

,其他相关值发生变化。

Step6:若运行时长,若运行时长达到t多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_576 终止,否则进行Step5直至满足需求。

5.2问题二的分析

在问题一中我们给出了四个问题的具体模型,因此,问题二则是利用问题一中设立的模型对问题二进行解答。而问题二主要分为三点:

1.检验模型的实用性。一个模型是否稳定是实用性的一个评判标准,因此,建立此模型判断模型;在表一所给出多条变量中挑出一条或多条变量,改变其数值,观察模型结果是否出现大的波动,若波动大,则稳定性差,实用性低;若波动小,则稳定性好,实用性高。  

2.检验算法的有效性。算法有效性通过比较预定结果与实际结果之间的差距来检验,上文中给出的模型为无故障情况下和故障率情况下两种情况,前者更倾向于预定的结果,而后者更倾向于实际结果,将这两个结果进行比较,来检验算法的有效性。

3根据问题1中所建模型,给出RGV的调度策略,作业效率则根据单位时间内该模型条件下车间生产成料数量来说明。

5.2.1模型实用性模型

在一段时间内,生产的成料数量与RGV运行不同的时间、上料传送带及下料传送带旁的CNC的上下料所需时间以及RGV的移动时间有关,设定单工序的成料数量为num

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_577

,工件加工时间为:num=fts,tx,tj,p

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_578

tx=tx+α

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_579

对于下料传送带的上下料时间给予一个微小波动α多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_580 ,则调整后成料数量为num'

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_581

num'=fts,tx+α,tj,p

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_582

numnum'=fts,tx,tj,pfts,tx+α,tj,p

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_583

即为tx多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_584 下料传送带上下料产生微小波动时,CNC产生成料的数量也会对作业过程产生一定的影响,numnum'

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_585

越接近1,则月说明模型越稳定。令x=0.5

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_ci_586

,从而得到numnum'=0.9896

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_587

,故模型时稳定的,且预测出的熟料数量较多,产生的经济效益良好,具有很好的实用性。[4]

5.2.2算法有效性模型

在一定时间内让CNC加工生料,不发生故障为理想状态,也就是我们的预定生成数量,暂设定生成成料数量为m1多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_588 ;发生故障的情况下为实际状态,设定生成成料数量为m2多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_589 ,则有效性的值h多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_590

h=m2m1

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_591

其中,m1m2

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_结点_592

经上述问题一模型计算得出。三组参数带入单工序和两工序物料加工模型计算得出有效率和作业效率图,分别如图5.2.2.1和图5.2.2.2所示:

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_593

 

 

 

 

 

 

 

图5.2.2.1单工序有效率和作业效率曲线图

 

 

 

 

 

 

 

 

多目标柔性车间调度 nsga2 python代码 柔性车间调度问题_无故障_594

 

 

 

 

 

 

 

 

 

 

 

图5.2.2.2双工序有效率和作业效率曲线图

5.2.3 RGV的调度策略

该任务的调度策略主要分为两个方案,且为了更加接近真实情况,我们选中了在有故障情况下的加工模型。一是一道工序的物料加工作业,二是两道工序的物料加工作业,因此,针对不同的加工方案我们给出不同的调度策略。

一道工序的RGV调度策略:运用轮盘调度算法,首先确定各个CNC机器的使用顺序,若在此过程中机器发生故障,则CNC的加工顺序重新变化,依然根据算法对CNC机器进行重新排序,以得到最优队列,进而提高产品的生产量。

两道工序的RGV调度策略:现根据表中给出的时间参数确定两种类型CNC的数目大小,接下来,运用模拟退火算法寻找所有CNC的最佳位置。然后运用贪心算法以缩短移动时间为目的寻找RGV移动的最优解。若机器在工作中发生故障,则CNC的加工顺序发生变化,那么我们将重复上述文中寻找位置等步骤,直至找到RGV移动的最优解。

5.2.4 系统作业效率

根据表中给出的参数并将其带入上文建立的模型中,得到的工作效率为每小时车间生产的熟料数,且工作效率分别为分为一道工序调度模型的工作效率和两道工序调度模型的工作效率, 分别如表5.2.4.1和表5.2.4.2所示:

 

 

 

 

 

任务

RGV第一组系统参数

RGV第二组系统参数

RGV第三组系统参数

含故障的作业效率(件/小时)

48.25

       45.25

      47.625

表5.2.4.1单工序作业效率曲线图

任务

RGV第一组系统参数

RGV第二组系统参数

RGV第三组系统参数

含故障的作业效率(件/小时)

26.75

       29.25

      23.125

表5.2.4.2双工序作业效率曲线图

 

  1. 模型的评价和推广

6.1模型的评价

6.1.1模型的优点

(1)本文建立的单工序和多工序动态优化调度模型从需求信号和消耗时间的多少以及发生故障后的实际情况出发,研究了影响工件成料产量的因素是以CNC数量关系、位置关系为切入点并综合考虑生产实际情况。该模型与车间生产效率存在着紧密联系。

(2)在分析同一时间段CNC发生故障台数的可能性,结合实际情况并利用实际推断原理,排除了在某一CNC出现故障且在维修期间时,另外CNC继续出现故障的时间为小概率事件,在短时间内和有限次加工过程中是不可能发生的。模型不脱离实际。

6.1.2模型的缺点

(1)工件产量的影响变量时,可能忽略了某些重要因素的变量,使得不够大众化、一般化。

(2)在建立模型过程中,我们对加工过程出现的故障率理想化,忽视了人为因素对CNC造成的不可逆影响。

6.2模型的改进方向

(1)可以通过多组工件的参数值进行模拟仿真分析,以获得训练集,对于后续工件的参数进行训练得到CNC最佳位置关系和数量关系。

(2)在进行优化建模中,可以尝试用遗传算法、模拟退火算法、蚁群算法进行后续优化研究。