● 引言:因为最近要参加研究生数学建模竞赛了(第二十一届),学习和分析一下优秀的数模论文的:思路、写作。
虽然我说是 “优秀论文分析”,但其实更多是 “搬运” 哈哈哈…
✅ NLP 研 1 选手的学习笔记
笔者简介:Wang Linyong,NPU,简称🍉大,2023级,计算机技术
研究方向:文本生成、大语言模型
本文的赛题来自 2022 年 C 题的《汽车制造涂装-总装缓存调序区调度优化问题》
本文的论文来自当年的 “数模之星”——来自中国计量大学的 参赛队号为 22103560098 的一支队伍
文章目录
- 零、摘要
- 一、问题重述
- 1.1 问题的背景
- 1.2 问题的提出
- 二、模型假设
- 三、符号说明
- 四、问题一
- 4.1 考虑横移机调度优先级的 PBS 优化问题分析
- 4.2 考虑横移机调度优先级的 PBS 优化模型的建立
- 4.3 考虑横移机调度优先级的 PBS 优化问题算法设计
- 4.4 考虑横移机调度优先级的 PBS 优化问题求解结果
- 五、问题二
- 5.1 不考虑横移机调度优先级的 PBS 优化问题的分析
- 5.2 不考虑横移机调度优先级的 PBS 优化模型建立
- 5.3 不考虑横移机调度优先级的 PBS 优化问题算法设计
- 5.4 不考虑横移机调度优先级的 PBS 优化模型求解结果
- 六、模型评价与推广
- 6.1 模型的优点
- 6.2 模型的缺点
- 6.3 模型的推广
- 七、参考文献
- 写在最后——个人的经验总结
零、摘要
工业领域中,利用缓存区调序是优化工业流程,节省工业成本的重要手段。随着新能源技术的发展,汽车工业在生产中的地位逐渐提高,而汽车制造涂装-总装缓存调序作为汽车制造流程中极为重要的一部分,其调序区调度优化问题有着重要的研究意义,本文通过分析车辆调度工作流程建立了基于动态规划的多目标优化调度模型。
● 笔者:简述了研究问题和研究意义
针对问题一,通过分析车辆的调度流程以及相关约束条件,以每辆车被接车横移机将要运往的目标车道以及该车是否要通过返回道作为决策变量,建立每一时刻进车道与返回道上车位车辆的时间状态矩阵,以第一辆车被接车横移机处理为初始时刻,利用接车横移机和送车横移机工作时间矩阵,模拟出每一辆车在随时间变化的位置以及状态。由于接车横移机优先处理返回道 10
号位上的车辆,送车横移机优先处理先到 1
号位的车辆,则可通过返回道使用次数对车辆的序列进行迭代改变。对优化目标一(𝒛𝟏),利用卷积的思想处理,即设置一个卷积核,将其公式化;对优化目标二(𝒛𝟐),建立𝑧2 = 𝐹(𝐿),其主要通过既定的算法计算得分;对优化目标三(𝒛𝟑),将每辆车是否使用返回道统计即可得到;对优化目标四(𝒛𝟒),通过进车道与返车道上每个车位的时间矩阵,利用时间变量,对整个车道调度过程进行递推模拟,将车辆的输出序列进行迭代,最终求得整个调度流程所消耗的时间,以此建立基于动态规划的多目标优化调度模型。
● 笔者:针对问题一进行了分析,着重针对 优化目标 来切入问题。模板:“通过xxxx,以xxxx,建立xxxx,再以xxxx,利用xxxx,模拟出xxxx。” 模板:“由于xxxx,则xxxx“。
考虑到接车横移机与送车横移机工作时选择不同车道所消耗的时间差,利用灰狼算法设置迭代次数对模型进行求解,得到附件 1
最高得分为 18.916
分,其调度流程总用时 3056
秒,返回道总共使用 6
次,附件 2
最高得分为 44.469
分,其调度流程总用时 2996s
,返回道总共使用 6
次。
● 笔者:将具体结论数据列出来,很好。
针对问题二,取消约束 6
后,接车横移机不再优先处理返车道 10
号位上的车,引入新的决策变量,即返回道上每辆车到达 10
号位后的等待时间,接车横移机每次工作时,首先判断返回道 10
号位上有无车辆,当返回道上 10
号位有车时,接车横移机到达返回道上的时刻需大于返回道上 10
号位上车的等待时间,才会处理返回道上的车,否则处理涂装-PBS 出车口处的车辆。取消约束 7
后,送车横移机将不再优先处理先到达 1
号位的车辆,即在处理完上一辆车后需对当前时刻所有车道 1
号位进行判断,如果 1
号位上的车辆大于 1
,则需进行选择,此时将位于 1
号位的每一辆汽车分别模拟当其送出或送往返回道以后输出序列𝐿,然后求得当前情况每一辆车的得分,对得分进行排序,重新规定他们的输出顺序。以问题一所建立的模型为基础,添加上述新的决策变量和约束条件建立基于动态规划的多目标优化调度模型。
● 笔者:针对问题二进行了分析,分别根据题目要求,一 一 去掉约束条件,并阐述了去掉后的情况变化,以及应对措施。
利用灰狼算法设置迭代次数对模型进行求解,得到附件 1
最高得分为 19.459
分,其调度流程总用时 3056
秒,返回道总共使用 8
次;附件 2
最高得分为 45.78
分,其调度流程总用时 3014
秒,返回道总共使用 4
次。与模型一求解结果进行比较,其收敛速度更快,
关键词: 动态规划;PBS 时间调度;多目标优化模型;灰狼算法
● 笔者的整体评价: 整体来说蛮好的,背景、问题、解决方法 和 结论都写清楚了。如果真要说,字体加重的选取可以优化一下。
一、问题重述
1.1 问题的背景
一辆汽车在正式上线之前需要经过多道工序,主要由汽车制造厂的焊装车间、涂装车间、总装车间完成。但是,由于每个车间有不同的生产约束,以致生产调度无法按照同一序列连续生产,通常在相邻两个车间之间和车间内部必要的地方设置缓存区,这大大提高了工厂的生产效率。本文着重考虑在涂装车间与总装车间之间建立一个具有调序功能的缓存区,用来存放涂装车间的已完成喷涂的车身,将该缓存区称为 PBS(Painted Body Store),在该缓存区内调整涂装车间的出车序列以满足总装车间约束的进车序列。
● 笔者:“看来背景也可以不用写很多,我看有些论文动辄就是一页。用自己话讲一遍就行,千万别负责赛题的问题,不然查重率很高。”
1.2 问题的提出
已知涂装车间的出车序列,要求严格按照 PBS 的约束说明和相关时间数据说明,建立 PBS 优化调度模型,调整总装车间的进车序列,使其尽可能满足生产需求。
针对问题一,需要考虑的优化目标如下,以权重系数从高到低排列:
1) 每两辆混动车身之间间隔两辆燃油车身;
2) 对出车序列进行分块,每一分块中的四驱车型与两驱车型之比为 1:1;
3) 尽可能不使用返回车道;
4) 总调度时间尽可能短。
需要考虑的约束条件如下:
1)送车横移机不能运送返回车道上的车身;
2)车身在 PBS 中的移动方向固定不变;
3)接车、送车横移机单次只能运送一个车身;
4)接车、送车横移机完成任意动作后,必须返回中间的起始位置,才可进行下一步动作;
5)接车、送车横移机在执行任何动作的过程中,不可以被打断;
6)当返回道的 10 停车位有车且接车横移机空闲时,接车横移机必须处理 10 停车位上的车身;
7)当若干进车道的 1 停车位有车身且送车横移机空闲时,优先处理最先到达进车道1 停车位的车身;
8)只要进车道的 1 停车位有车身时,送车横移机就必须为工作状态;
9)进车道和返回道各 10 个停车位,且每个停车位只能容纳 1 个车身;
10)同一车道内,多个车身在不同停车位上的移动可以不同步进行;
11)当某车身所在停车位的下一停车位出现空位时,车身必须立即开始向下一个停车
位移动;
12)车身在进车道和返回道不同停车位之间移动的过程中,不能被调度。
针对问题二,在问题一的基础上,去除第 6、7 条约束,建立 PBS 优化调度模型。
● 笔者:“也就是把(下面)题目中的 ‘PBS 约束说明’ 用自己的话讲了一遍。”【上面那张图是我自己插的,便于对着图看】
二、模型假设
假设 1:假设汽车车型对总装车间的进车序列没有影响;
假设 2:假设接车、送车横移机在装载车身到进车道 10 停车位或返回道 1 停车位的时间忽略不计;
假设 3:假设车身从涂装-PBS 出车口处装载到接车横移机上,以及在 4 车道出口中间位置处,车身由送车横移机上卸载到 PBS-总装接车口,时间均忽略不计;
假设 4:横移机运动时的速度保持一致;
假设 5:假设在整个 PBS 过程中,接车、送车横移机等装置不会出现故障;
假设 6:车辆在车道上从前一车位移动到后一车位的 9s 内始终处于前一车位,到第 9s 时处于后一车位;
● 笔者:“假设 2、3和4 是赛题本身自带的,作者将它们列了进来。假设 6 挺关键的。”
三、符号说明
符号 | 解释说明 |
---|---|
t s 1 ts_1 ts1 | 接车横移机从初始位置把车辆运送到进车道 10 停车位上所消耗的时间矩阵 |
t s 2 ts_2 ts2 | 接车横移机从进车道返回中间初始位置所消耗的时间矩阵 |
t s 1 ′ ts_1' ts1′ | 送车横移机从初始位置到进车道 1 停车位所消耗的时间矩阵 |
t s 2 ′ ts_2' ts2′ | 送车横移机将车辆从进车道 1 停车口运送至总装-PBS 口消耗的时间矩阵 |
t f d tfd tfd | 接车横移机从涂装-PBS 口出发将车身装载运送到进车道后返回初始位置所消耗的时间矩阵 |
t f d 1 tfd_1 tfd1 | 接车横移机从涂装-PBS 口出发将返回道 10 停车位上的车身运到各进车道 10 停车位所消耗的时间矩阵 |
t f tf tf | 送车横移机从总装-PBS 口出发至进车道 1 停车位将车辆运载至返回道 1 停车位后返回初始位置所消耗的时间矩阵 |
t f 1 tf_1 tf1 | 送车横移机从总装-PBS 出发至进车道 1 停车位将车辆运载至返回道 1 停车位所消耗的时间矩阵 |
t f 2 tf_2 tf2 | 送车横移机从返回道回到初始位置所消耗的时间矩阵 |
v v v | 车辆使用返回道的次数 |
i ( v ) i(v) i(v) | 接车横移机从返回道取出 v 次后第 i 辆车 |
T i ( v ) T_i(v) Ti(v) | 第𝑖(𝑣)辆车从涂装-PBS 口的出发时刻 |
J i ( v ) J_i(v) Ji(v) | 第𝑖(𝑣)辆车属性的矩阵 |
H i ( v ) H_i(v) Hi(v) | 为 0-1 变量,第𝑖(𝑣)辆车进入目标车道的矩阵 |
h v , k h_{v,k} hv,k | 为 0-1 变量,表示返回道 10 停车位上的车辆被送至目标车道的矩阵 |
T d i ( v ) Td_{i(v)} Tdi(v) | 车辆从涂装-PBS 口被送入进车道 10 停车位上所消耗的时间 |
… | … |
● 笔者:“太多了,懒得腾上去了,直接截图,剩余的如下。”
四、问题一
4.1 考虑横移机调度优先级的 PBS 优化问题分析
首先,对车辆在 PBS 流程中的运动轨迹进行分析,车辆运作流程如图 4.1
所示。
● 笔者:“感觉他们 竖着的省略号少打了两个。”
其次,根据 PBS 相关时间数据分析,可得接车横移机从涂装-PBS 口出发,将车运送到不同进车道上消耗的时间差最大为 9s
。所以,只要当车辆被运送到任意进车道后,在不使用返回道的情况下,其送车顺序将与接车顺序一致,而每使用返回道一次,就会改变一次出车顺序,即当某一辆车被送车横移机决定送到返回道上时,整个车辆的出车顺序将会被改变,接车横移机从返回道中取车总共取了 v
次,则整个出车顺序 𝐼(𝑣) ={1,2,3, … 𝑖(𝑣), … , 𝑛}
就改变了 v
次,而这种改变并非瞬间改变,而是当汽车决定被送车横移机移动到返回道上开始改变,汽车移动到返回道上的 10
号位后,被接车横移机插入队列完成改变。
● 笔者:“这个 9s
很关键,它刚好是题目中的 “PBS相关时间数据说明” 的第 7
点所耗时间相同 → 然后就他们的假设 6
对应起来了。”
最后,从优化目标出发,对附件中的生产数据进行分析,考虑满足单目标条件下的扣分情况,以此得到一个参考得分。以附件 1
为例,混动车身与燃油车身的数量之比为 2:1
,四驱与两驱车型的数量之比近似 10:1
。从第一个目标出发,即 n
个混动车身需要 (n-1)*2
个燃油车身,则有 54
个混动车身可以满足要求,剩余 158
个不满足要求,依据量化逻辑进行扣分,需要扣 158 × 1 × 0.4 = 63.2
分,在完全满足其他目标时,可得 36.8
分。从第二个目标出发,即四驱与两驱车型的出车序列为 1:1
,则有 29
个两驱车型满足要求,剩余 260
个不满足要求,依据量化逻辑进行扣分,需要扣 260 × 1 × 0.3 = 78
分,在完全满足其他目标时,可得 22
分。
● 笔者:“这一段分析得很好,这一点(即先对分数的上限给估算出来)其实不难想到,但是就看那个队伍先想到这一步,提前找到切入点。”
4.2 考虑横移机调度优先级的 PBS 优化模型的建立
决策变量:
通过对车辆 PBS 调度流程的分析,可知该问题的优化核心在于车辆的出车序列,它主要受接车横移机在涂装-PBS 进车口选择的车道
H
i
(
v
)
,
k
H_{i(v),k}
Hi(v),k、是否使用返回道
r
i
(
v
)
r_{i(v)}
ri(v) 的影响,因此,将它们设为该问题的决策变量。
其中,
H i ( v ) , k = { 0 , 第 i 辆车不进入 k 车道 1 , 第 i 辆车进入 k 车道 , k = 1 , 2 , 3 , 4 , 5 , 6 ( 1 ) H_{i(v),k}=\begin{cases}0, \quad 第 i 辆车不进入 k 车道\\ 1,\quad 第 i 辆车进入 k 车道\\ \end{cases} \quad ,k=1,2,3,4,5,6 \quad\quad\quad\quad\quad(1) Hi(v),k={0,第i辆车不进入k车道1,第i辆车进入k车道,k=1,2,3,4,5,6(1)
r i ( v ) = { 0 , 第 i 辆车返回 1 , 第 i 辆车不返回 ( 2 ) r_{i(v)}=\begin{cases}0, \quad 第 i 辆车返回\\ 1,\quad 第 i 辆车不返回\\ \end{cases} \quad\quad\quad\quad\quad(2) ri(v)={0,第i辆车返回1,第i辆车不返回(2)
对 PBS 相关时间数据进行处理:
首先,由于接车横移机在运作过程中的速度保持一致,且忽略将车身从接车横移机装载和卸载的时间,那么就可以通过接车横移机将车身从涂装-PBS 口运到各进车道 10
停车位后返回初始位置消耗的时间,得到接车横移机将车放入各进车道所消耗的时间(用列矩阵
t
s
1
ts_1
ts1 表示)和接车横移机从进车道 10
停车位返回涂装-PBS 所消耗的时间(用列矩阵
t
s
2
ts_2
ts2 表示),即
t
s
1
=
t
s
2
=
[
9
,
6
,
3
,
0
,
6
,
9
]
T
(
3
)
ts_1=ts_2=[9,6,3,0,6,9]^T \quad\quad\quad\quad\quad(3)
ts1=ts2=[9,6,3,0,6,9]T(3)
同理可得,送车横移机从总装-PBS 口出发到各进车道 1
停车位消耗的时间
t
s
1
′
ts_1'
ts1′ 以及从该位置返回到总装-PBS 口消耗的时间
t
s
2
′
ts_2'
ts2′。
接车横移机从涂装-PBS 口出发到返回道 10
停车位将车身装载运送到进车道后返回初始位置的运作流程,如图 4.2
所示。
● 笔者:“这个图画得有点欠缺,感觉缺一条线,我添一下,如下图”
已知:接车横移机从涂装-PBS 口出发到返回道 10
停车位将车身装载运送到进车道后返回初始位置所消耗的时间,用列矩阵
t
f
d
tfd
tfd 表示,即
t
f
d
=
[
24
,
18
,
12
,
6
,
12
,
18
]
T
(
4
)
tfd=[24,18,12,6,12,18]^T\quad\quad\quad\quad\quad(4)
tfd=[24,18,12,6,12,18]T(4) 可以求得:接车横移机从涂装-PBS 出发将返回道 10
停车位上的车身运到各进车道 10
停车位所消耗的时间,用矩阵
t
f
d
1
tfd_1
tfd1 表示,即
t
f
d
1
=
t
f
d
−
t
s
2
=
[
15
,
12
,
9
,
6
,
6
,
9
]
T
(
5
)
tfd_1=tfd-ts_2=[15,12,9,6,6,9]^T\quad\quad\quad\quad\quad(5)
tfd1=tfd−ts2=[15,12,9,6,6,9]T(5) 由于送车横移机从总装-PBS 口到 4
进车道 1
停车位的时间忽略不计,所以可以通过送车横移机在返回道、4
进车道、总装-PBS 口的运作流程,得到送车横移机从返回道 1
停车位至总装-PBS 口消耗的时间,该运作流程如图 4.3
所示。
已知:
t
f
1
,
4
+
t
f
2
,
4
=
6
(
6
)
t
f
1
,
4
=
t
f
2
,
4
(
7
)
tf_{1,4}+tf_{2,4}=6 \quad\quad\quad\quad\quad(6)\\tf_{1,4}=tf_{2,4} \quad\quad\quad\quad\quad\quad\quad(7)
tf1,4+tf2,4=6(6)tf1,4=tf2,4(7)
可以求得:
t
f
3
=
[
3
,
3
,
3
,
3
,
3
,
3
]
T
(
8
)
tf_3=[3,3,3,3,3,3]^T \quad\quad\quad\quad\quad\quad\quad(8)
tf3=[3,3,3,3,3,3]T(8)
同理可得,接车横移机至返回道所消耗的时间
t
f
2
′
tf_2'
tf2′。
接车横移机从涂装-PBS 口出发到返回道 10
停车位将车身装载运送到进车道后返回初始位置的运动流程,如图 4.4
所示。
● 笔者:“一样的,这个图画得也有点欠缺,感觉缺一条线,我添一下,如下图。另外,他们上一段,打错字了,应该是笔误,‘接车横移机’ 应该是 ‘送车横移机’ ”
已知:送车横移机从总装-PBS 口出发至进车道 1
停车位将车辆运载至返回道 1
停车后返回初始位置所消耗的时间,用列矩阵
t
f
tf
tf 表示,即停车位将车辆运载至返回道 1
停车,即
t f = [ 24 , 18 , 12 , 6 , 12 , 18 ] T ( 9 ) tf=[24,18,12,6,12,18]^T \quad\quad\quad\quad\quad\quad\quad(9) tf=[24,18,12,6,12,18]T(9)
可以求得:送车横移机从总装-PBS 出发至进车道 1
停车位将车辆运载至返回道 1
停车位所消耗的时间,用矩阵
t
f
1
tf_1
tf1 表示,即
t
f
1
=
t
f
−
t
f
2
=
[
21
,
15
,
9
,
3
,
9
,
15
]
T
(
10
)
tf_1=tf-tf_2=[21,15,9,3,9,15]^T \quad\quad\quad\quad\quad\quad\quad(10)
tf1=tf−tf2=[21,15,9,3,9,15]T(10)
车辆经 PBS 调度的流程:
根据约束条件 3,每辆车只会被接车横移机运往其中某一进车道,即
∑
k
6
=
H
i
(
v
)
,
k
=
1
(
11
)
\sum_k^6=H_{i(v),k}=1\quad\quad\quad\quad\quad\quad\quad(11)
k∑6=Hi(v),k=1(11)
(1)汽车出发时刻处理:
考虑到所有汽车需按照顺序从涂装-PBS 出车口开始准备出发,这里从第一辆汽车出发时开始计时,此时返回道并未被使用,因此,第一辆汽车的在涂装-PBS 出车口时刻准备出发时刻可表示为:
T
1
(
0
)
=
0
(
12
)
T_{1(0)}=0\quad\quad\quad\quad\quad\quad\quad(12)
T1(0)=0(12) 在接车横移机运送第一辆车至进车道后返回中间初始位置,准备运送第二辆车时,第一辆车不会到达进车道 1
停车位,即返回道仍不会被使用,所以,第二辆汽车的出发时刻应当为:
T
2
(
0
)
=
T
1
(
0
)
+
H
1
(
0
)
,
k
⋅
(
t
s
1
+
t
s
2
)
(
13
)
T_{2(0)}=T_{1(0) }+ H_{1(0),k} \cdot (ts_1+ts_2) \quad\quad\quad\quad\quad\quad\quad(13)
T2(0)=T1(0)+H1(0),k⋅(ts1+ts2)(13) 以此类推,当扩展到第 𝑖(𝑣) 辆车时,有两种情况:
a)返回道 10
停车位没有车,则
T
i
(
v
)
=
T
1
−
1
(
v
)
+
H
i
−
1
(
v
)
,
k
⋅
(
t
s
1
+
t
s
2
)
(
14
)
T_{i(v)}=T_{1-1(v) }+ H_{i-1(v),k} \cdot (ts_1+ts_2) \quad\quad\quad\quad\quad\quad\quad(14)
Ti(v)=T1−1(v)+Hi−1(v),k⋅(ts1+ts2)(14) 其中,
H
i
−
1
(
v
)
,
k
H_{i-1(v),k}
Hi−1(v),k 表示将前一辆车需要运送到哪一进车道。
b)返回道 10
停车位上有车,则接车横移机在处理完上一辆车后,需要立刻处理返回道上的车,当返回道上的车全部处理完后,再运送涂装-PBS 口处的车。那么,在计算此时涂装-PBS 口出处第 z
辆车的出发时刻时,则需加上处理返回道上车的时间。
即:
T
i
(
v
)
=
T
1
−
1
(
v
)
+
H
i
−
1
(
v
)
,
k
⋅
(
t
s
1
+
t
s
2
)
+
h
v
,
k
⋅
(
t
f
d
1
+
t
f
d
2
)
(
15
)
T_{i(v)}=T_{1-1(v) }+ H_{i-1(v),k} \cdot (ts_1+ts_2) + h_{v,k} \cdot (tfd_1+tfd_2) \quad\quad\quad\quad\quad\quad\quad(15)
Ti(v)=T1−1(v)+Hi−1(v),k⋅(ts1+ts2)+hv,k⋅(tfd1+tfd2)(15) 其中,
h
v
h_v
hv 表示接车横移机将返回道 10
停车位的车运送至哪一进车道,
t
f
d
1
tfd_1
tfd1 表示接车横移机把车辆从返回道运送至对应车道所消耗时间的矩阵。表示从进车道返回中间初始位置所消耗的时间矩阵。
当
i
(
v
)
i(v)
i(v) 辆车经过返回道第
v
v
v 次动作后,已经彻底完成迭代,重新插入队列中。此时,该车变为第
i
(
v
+
1
)
i(v+1)
i(v+1) 辆车,即
J
i
(
v
+
1
)
=
J
i
(
v
)
(
16
)
J_{i(v+1)}=J_{i(v)} \quad\quad\quad\quad\quad\quad\quad(16)
Ji(v+1)=Ji(v)(16)而该车的等待时间为:
T
i
(
v
+
1
)
=
T
i
−
1
(
v
)
+
H
i
−
1
(
v
)
,
k
⋅
(
t
s
1
+
t
s
2
)
+
h
v
⋅
t
f
2
′
(
17
)
T_{i(v+1)}=T_{i-1(v)}+H_{i-1(v),k}\cdot (ts_1+ts_2)+h_v\cdot tf_2' \quad\quad\quad\quad\quad\quad\quad(17)
Ti(v+1)=Ti−1(v)+Hi−1(v),k⋅(ts1+ts2)+hv⋅tf2′(17)与此同时,涂装-PBS 口的第
i
(
v
)
i(v)
i(v) 辆车变为第
i
+
1
(
v
+
1
)
i+1(v+1)
i+1(v+1) 辆车,则
T
i
+
1
(
v
+
1
)
=
T
i
(
v
)
=
T
i
−
1
(
v
)
+
H
i
−
1
(
v
)
,
k
⋅
(
t
s
1
+
t
s
2
)
+
h
v
⋅
(
t
f
d
1
+
t
f
d
2
)
(
18
)
J
i
+
1
(
v
+
1
)
=
J
i
(
v
)
(
19
)
T_{i+1(v+1)}=T_{i(v)}=T_{i-1(v)}+H_{i-1(v),k}\cdot (ts_1+ts_2)+h_v\cdot (tfd_1+tfd_2) \quad\quad\quad\quad\quad\quad\quad(18)\\ J_{i+1(v+1)}=J_{i(v)} \quad\quad\quad\quad\quad\quad\quad(19)
Ti+1(v+1)=Ti(v)=Ti−1(v)+Hi−1(v),k⋅(ts1+ts2)+hv⋅(tfd1+tfd2)(18)Ji+1(v+1)=Ji(v)(19)
● 笔者:“这样一步一步地推导出最终的公式,蛮不错的,这就是数模,由简入繁,先易后难,逐个击破!”
其中,
J
i
(
v
)
J_{i(v)}
Ji(v) 表示第
i
i
i 辆车的属性。
J
i
(
v
)
=
[
j
d
,
d
q
]
(
20
)
J_{i(v)}=[j_d,d_q] \quad\quad\quad\quad\quad\quad\quad(20)
Ji(v)=[jd,dq](20)
J
d
=
{
0
,
该车为混动车型
1
,
该车为燃油车型
(
21
)
J_d=\begin{cases}0, \quad 该车为混动车型\\ 1,\quad 该车为燃油车型\\ \end{cases} \quad\quad\quad\quad\quad(21)
Jd={0,该车为混动车型1,该车为燃油车型(21)
J
q
=
{
0
,
该车为四驱车型
1
,
该车为两驱车型
(
22
)
J_q=\begin{cases}0, \quad 该车为四驱车型\\ 1,\quad 该车为两驱车型\\ \end{cases} \quad\quad\quad\quad\quad(22)
Jq={0,该车为四驱车型1,该车为两驱车型(22)
(2)车辆从开始时刻到进车道上的处理:
当汽车在涂装-PBS 出车口开始准备出发后,由于接车横移机可以选择等待也可以选择直接开始工作,因此处理时间由两部分组成,分别是接车横移机等待时间和接车横移机将车辆从出车口运送到进车道 10
号位的时间。即:
T
z
i
(
v
)
=
T
D
i
(
v
)
+
T
D
s
i
(
v
)
+
T
d
i
(
v
)
(
23
)
Tz_{i(v)}=TD_{i(v)}+TDs_{i(v)}+Td_{i(v)}\quad\quad\quad\quad\quad(23)
Tzi(v)=TDi(v)+TDsi(v)+Tdi(v)(23) 用
T
D
i
(
v
)
TD_{i(v)}
TDi(v)表示第
i
i
i 辆车在接车横移机从返回道接车第
v
v
v 次后,第
i
i
i 辆车出发前的等待时间,当其为 0
时表示接车横移机直接开始工作接车,
T
D
s
i
(
v
)
TDs_{i(v)}
TDsi(v) 表示的是第
i
(
v
)
i(v)
i(v) 辆车目标车道有车,接车横移机为了将第
i
(
v
)
i(v)
i(v) 辆车送往目标车道需等待的时间,
T
d
i
(
v
)
Td_{i(v)}
Tdi(v) 指的是第
i
(
v
)
i(v)
i(v) 辆车被运往进车道的时间。
接车过程中,考虑到接车横移机对车道的选择问题,将
t
i
−
1
(
v
)
t_{i-1}(v)
ti−1(v) 表示接车横移机将第
i
−
1
i-1
i−1 辆汽车送入进车道上的时间,其可表示为:
t
i
−
1
(
v
)
=
T
i
−
1
(
v
)
+
T
D
i
−
1
(
v
)
+
T
c
i
(
v
)
(
24
)
t_{i-1}(v)=T_{i-1(v)}+TD_{i-1(v)}+Tc_{i(v)}\quad\quad\quad\quad\quad(24)
ti−1(v)=Ti−1(v)+TDi−1(v)+Tci(v)(24)
此时,第
i
(
v
)
i(v)
i(v) 辆汽车将要被接车横移机接车的时刻为
t
c
i
(
v
)
=
t
i
−
1
(
v
)
+
T
D
i
(
v
)
(
25
)
tc_{i(v)}=t_{i-1}(v)+TD_{i(v)}\quad\quad\quad\quad\quad(25)
tci(v)=ti−1(v)+TDi(v)(25)
第
i
(
v
)
i(v)
i(v) 辆车将要进入的车道 10
号位是否有车可表示为
x i , k = ⌊ D k , 10 , t c i ( v ) D k , 10 , t c i ( v ) + 1 ⌋ = { 1 , 目标进车道 10 停车位有车 0 , 目标进车道 10 停车位没有车 ( 26 ) x_{i,k}=\left\lfloor\dfrac{D_{k,10,tc_{i(v)}}}{D_{k,10,tc_{i(v)}}+1}\right\rfloor = \begin{cases}1, \quad 目标进车道10停车位有车\\ 0,\quad 目标进车道10停车位没有车\\ \end{cases} \quad\quad\quad\quad\quad(26) xi,k=⌊Dk,10,tci(v)+1Dk,10,tci(v)⌋={1,目标进车道10停车位有车0,目标进车道10停车位没有车(26)
则如果要选择有车的那个车道,需等待的时间矩阵为
T
D
s
i
(
v
)
=
9
−
H
i
(
v
)
,
k
⋅
⌊
D
k
,
10
,
t
c
i
(
v
)
D
k
,
10
,
t
c
i
(
v
)
+
1
⌋
⋅
t
s
1
(
27
)
TDs_{i(v)}=9-H_{i(v),k}\cdot \left\lfloor\dfrac{D_{k,10,tc_{i(v)}}}{D_{k,10,tc_{i(v)}}+1}\right\rfloor \cdot ts_1 \quad\quad\quad\quad\quad(27)
TDsi(v)=9−Hi(v),k⋅⌊Dk,10,tci(v)+1Dk,10,tci(v)⌋⋅ts1(27) 而横移机将车辆运送到进车道上的时间为
T
d
i
(
v
)
=
H
i
(
v
)
,
k
⋅
t
s
1
(
28
)
Td_{i(v)}=H_{i(v),k}\cdot ts_1 \quad\quad\quad\quad\quad(28)
Tdi(v)=Hi(v),k⋅ts1(28)
(3)车辆在进车道上的处理:
当汽车放入进车道时,此时的时刻为
t
d
i
=
T
i
(
v
)
+
T
z
i
(
v
)
(
29
)
td_i=T_{i(v)}+Tz_{i(v)} \quad\quad\quad\quad\quad(29)
tdi=Ti(v)+Tzi(v)(29) 则
H
i
(
v
)
,
k
⋅
D
k
,
10
,
t
d
i
=
i
(
v
)
(
30
)
H_{i(v),k}\cdot D_{k,10,td_i}=i(v)\quad\quad\quad\quad\quad(30)
Hi(v),k⋅Dk,10,tdi=i(v)(30)
考虑到当车辆进入进车道后,其到达 1
停车位的序列已经固定,因此,不考虑后续补充车辆,直接利用车道行进规则,对
D
k
,
10
,
t
d
i
D_{k,10,td_i}
Dk,10,tdi 进行迭代,得到第
i
(
v
)
i(v)
i(v) 辆车在每个车位上的时间矩阵
T
c
t
i
(
v
)
,
j
Tct_{i(v),j}
Tcti(v),j。
(4)车辆由送车横移机处理:
首先,考虑返回道是否会堵车,即无法将进车道 1
停车位上的车运至返回道的情形。由于接车横移机会优先处理返回道上的车辆,且将车辆从进车道 1
停车位运送至返回道消耗时间最短的进车道为 4
进车道,所以只有在送车横移机连续将 4
进车道的两辆车送至返回道时,返回道 1
停车位上才可能会有车。该过程的运作流程,如图 4.5
所示。
如图所示,在接车横移机处理完第一辆车后返回初始位置的时刻与 4
进车道 2
停车位上的车到达 1
停车位的时刻,有 3
秒的时间间隔。所以,送车横移机不会连续将 4
进车道的两辆车送至返回道,即返回道 1
停车位上不会一直有车,不存在无法将进车道 1
停车位上的车运至返回道的情形。
● 笔者:“这种小小的推论是加分项,特别是带图,浅显易懂。”
其次,考虑是否要将到达进车道 1
停车位的车送回返回道,可分为两种情形。
1)第
i
(
v
)
i(v)
i(v) 辆汽车直接送出,则送出时间
T
e
i
(
v
)
=
H
i
(
v
)
,
k
⋅
t
s
1
(
31
)
Te_{i(v)}=H_{i(v),k}\cdot ts_1\quad\quad\quad\quad\quad(31)
Tei(v)=Hi(v),k⋅ts1(31) 此时,第
i
(
v
)
i(v)
i(v) 辆汽车退出程序,其结束时间为:
T
e
n
d
i
(
v
)
=
T
i
(
v
)
+
T
z
i
(
v
)
+
∑
j
10
T
c
t
i
(
v
)
,
j
+
T
e
i
(
v
)
(
32
)
Tend_{i(v)}=T_{i(v)}+Tz_{i(v)}+\sum_j^{10}Tct_{i(v),j}+Te_{i(v)}\quad\quad\quad\quad\quad(32)
Tendi(v)=Ti(v)+Tzi(v)+j∑10Tcti(v),j+Tei(v)(32) 输出序列属性
L
i
=
J
i
(
v
)
(
33
)
L_i=J_{i(v)}\quad\quad\quad\quad\quad(33)
Li=Ji(v)(33)2)第
i
(
v
)
i(v)
i(v) 辆汽车送往返回道,则送出时间
T
e
i
(
v
)
=
H
i
(
v
)
,
k
⋅
t
f
1
(
34
)
Te_{i(v)}=H_{i(v),k}\cdot tf_1 \quad\quad\quad\quad\quad(34)
Tei(v)=Hi(v),k⋅tf1(34) 此时,第
i
(
v
)
i(v)
i(v) 辆汽车进入返回道,整个流程结束时间为:
T
e
n
d
i
(
v
)
=
T
i
(
v
)
+
T
z
i
(
v
)
+
∑
j
10
T
c
t
i
(
v
)
,
j
+
T
e
i
(
v
)
(
35
)
Tend_{i(v)}=T_{i(v)}+Tz_{i(v)}+\sum_j^{10}Tct_{i(v),j}+Te_{i(v)}\quad\quad\quad\quad\quad(35)
Tendi(v)=Ti(v)+Tzi(v)+j∑10Tcti(v),j+Tei(v)(35)
● 笔者:“公式(31)和(34)命名重复了,需要优化一下。”
同时,令返回序列
J
v
+
1
=
J
i
(
v
)
(
36
)
J_{v+1}=J_{i(v)}\quad\quad\quad\quad\quad(36)
Jv+1=Ji(v)(36)则此时
v
+
1
v+1
v+1 辆在返回道 1
车位上的开始时间为
t
j
s
v
+
1
=
T
e
n
d
i
(
v
)
(
37
)
tjs_{v+1}=Tend_{i(v)}\quad\quad\quad\quad\quad(37)
tjsv+1=Tendi(v)(37)
(5)车道行进规则:
建立矩阵
D
k
,
j
,
t
D_{k,j,t}
Dk,j,t 表示在
t
t
t 时刻第
k
k
k 车道的第
j
j
j 个位置是第多少辆车,如
D
1
,
6
,
5
=
5
D_{1,6,5} = 5
D1,6,5=5 表示的是在第 5s
时,第 1
车道的第 6
车位是第 5
辆车,该矩阵随着车辆进入进车道的时间进行改变迭代。
在初始时刻,接车横移机还没有开始工作,即任意 k
车道的 j
停车位都没有车,则
D
k
,
j
,
0
=
[
0
⋯
0
⋮
⋱
⋮
0
⋯
0
]
(
38
)
D_{k,j,0}=\begin{bmatrix}0 &\cdots&0 \\\vdots&\ddots&\vdots\\ 0 &\cdots& 0 \end{bmatrix}\quad\quad\quad\quad\quad(38)
Dk,j,0=
0⋮0⋯⋱⋯0⋮0
(38)
考虑到当汽车被送入进车道后,其目前在进车道上的所有车由于送车横移机优先处理先到 1
号位的汽车,且所有车道移动速度均为 9s
,即接入顺序将与送出顺序一致,同时第
i
+
1
(
v
)
i+1(v)
i+1(v) 辆车将不会影响第
i
(
v
)
i(v)
i(v) 辆车的在每个车位上的时间。
● 笔者:“这条结论也重要。”
因此,第
i
(
v
)
i(v)
i(v) 辆车在
t
t
t 时刻进入车道后,所有的运动都是由目前在进车道上的车辆决定的,
假设第
i
(
v
)
i(v)
i(v) 辆车在
t
t
t 时刻进入车道,那么令
H
i
(
v
)
,
k
⋅
D
k
,
j
,
t
=
i
(
v
)
(
39
)
H_{i(v),k}\cdot D_{k,j,t}=i(v)\quad\quad\quad\quad\quad(39)
Hi(v),k⋅Dk,j,t=i(v)(39)
则目前进车道上总共有
y
t
=
∑
k
6
∑
j
10
d
k
,
j
,
t
(
40
)
y_t=\sum_k^6\sum_j^{10}d_{k,j,t} \quad\quad\quad\quad\quad(40)
yt=k∑6j∑10dk,j,t(40)
除掉第 i ( v ) i(v) i(v) 辆车本身还有 y t − 1 y_t-1 yt−1 辆车,即目前正在被送车横移机处理的车为 J i − y t ( v ) J_{i-y_t(v)} Ji−yt(v),则根据其是否被送往返回道,其处理完的时刻为
t e n d i ( v ) = { T e n d i − y t ( v ) + 3 , r i ( v ) = 1 T e n d i − y t ( v ) + H i ( v ) , k ⋅ t s 2 , r i ( v ) = 0 ( 41 ) tend_{i(v)}=\begin{cases}Tend_{i-y_t(v)}+3, \quad r_{i(v)}=1\\ Tend_{i-y_t(v)}+H_{i(v),k}\cdot ts_2 , \quad r_{i(v)}=0 \\ \end{cases} \quad\quad\quad\quad\quad(41) tendi(v)={Tendi−yt(v)+3,ri(v)=1Tendi−yt(v)+Hi(v),k⋅ts2,ri(v)=0(41)
此时,在车道上即将被处理的车辆为 J i − y t + i ( v ) J_{i-y_{t+i}(v)} Ji−yt+i(v),首先考虑 J i − y t + i ( v ) J_{i-y_{t+i}(v)} Ji−yt+i(v) 的位置,可表示为
w
i
−
y
t
+
i
(
v
)
,
j
=
⌈
H
i
(
v
)
,
k
⋅
D
k
,
j
,
t
i
−
y
t
(
v
)
+
1
⌉
(
42
)
w_{i-y_t+i(v),j}=\left\lceil H_{i(v),k} \cdot \frac{D_{k,j,t}}{i} - y_t(v)+1\right\rceil \quad\quad\quad\quad\quad(42)
wi−yt+i(v),j=⌈Hi(v),k⋅iDk,j,t−yt(v)+1⌉(42) 考虑到接车横移机移动的最小间隔为 3s
,因此每过 3s
更新一次状态。更新状态时首先要考虑当前时刻所有车的位置
当前时刻所有车的位置,可表示为
d
k
,
j
,
t
=
⌈
D
k
,
j
,
t
D
k
,
j
,
t
+
1
⌉
(
43
)
d_{k,j,t}=\left\lceil\dfrac{D_{k,j,t}}{D_{k,j,t+1}}\right\rceil \quad\quad\quad\quad\quad(43)
dk,j,t=⌈Dk,j,t+1Dk,j,t⌉(43) 要改变状态需要判断两种情况,第一种当车位于 1
号车位时,需等待多久,送车机来送车,第二种情况是当车位于其他车位时,需判断前面是否有车:
第一种情况下,即位于 1
号位其等待时间应当为
t
s
w
i
−
y
t
(
v
)
+
1
=
t
e
n
d
i
−
y
t
(
v
)
−
t
(
44
)
tsw_{i-y_t(v)+1}=tend_{i-y_t(v)}-t \quad\quad\quad\quad\quad(44)
tswi−yt(v)+1=tendi−yt(v)−t(44) 而第 t+3
时刻时,如果
t
s
w
i
−
y
t
(
v
)
+
1
≤
3
tsw_{i-y_t(v)+1} \leq3
tswi−yt(v)+1≤3,则其将被运往送车机,退出车道矩阵
d
k
,
j
,
t
+
3
d_{k,j,t+3}
dk,j,t+3,该位置被置 0,
t
s
w
i
−
y
t
(
v
)
+
1
>
3
tsw_{i-y_t(v)+1} > 3
tswi−yt(v)+1>3 则位置保持不变,即
{
d
k
,
1
,
t
+
3
=
d
k
,
1
,
t
,
t
s
w
i
−
y
t
(
v
)
+
1
≤
3
D
k
,
1
,
t
+
3
=
D
k
,
1
,
t
,
t
s
w
i
−
y
t
(
v
)
+
1
>
3
(
45
)
\begin{cases}d_{k,1,t+3}=d_{k,1,t}, \quad tsw_{i-y_t(v)+1} \leq3\\ D_{k,1,t+3}=D_{k,1,t} , \quad tsw_{i-y_t(v)+1} > 3 \\ \end{cases} \quad\quad\quad\quad\quad(45)
{dk,1,t+3=dk,1,t,tswi−yt(v)+1≤3Dk,1,t+3=Dk,1,t,tswi−yt(v)+1>3(45) 第二种情况下,位于其他车位的车需考虑前一位置的状态,即
j
>
1
j>1
j>1 时
d
k
k
,
j
>
1
,
t
=
d
k
k
,
j
,
t
−
d
k
k
,
j
−
1
,
t
(
46
)
dk_{k,j>1,t}=dk_{k,j,t}-dk_{k,j-1,t} \quad\quad\quad\quad\quad(46)
dkk,j>1,t=dkk,j,t−dkk,j−1,t(46)
● 笔者:“好多公式… 我已经记忆错乱了…”
如果
d
k
k
,
j
,
t
dk_{k,j,t}
dkk,j,t 则表示第
k
k
k 车道,第
j
j
j 个车道其前一个车道是空的,可移动致下一位置,由于目前只过了 3s
,而移动车道需要 9s
,因此此时车道状态还未改变,需要连续 3
次更新状态后,即 9s
后才会发生改变,此时
D
k
,
j
,
t
+
9
=
D
k
,
j
,
t
−
D
k
,
j
,
t
⋅
d
k
k
,
j
,
t
+
D
k
,
j
−
1
,
t
⋅
d
k
k
,
j
−
1
,
t
(
47
)
D_{k,j,t+9}=D_{k,j,t}-D_{k,j,t}\cdot dk_{k,j,t}+D_{k,j-1,t}\cdot dk_{k,j-1,t}\quad\quad\quad\quad\quad(47)
Dk,j,t+9=Dk,j,t−Dk,j,t⋅dkk,j,t+Dk,j−1,t⋅dkk,j−1,t(47) 以此类推,假设第
i
(
v
)
i(v)
i(v) 辆车经过 3n
秒后被送车横移机送出,那么第
i
(
v
)
i(v)
i(v) 辆汽车被送车横移机送出的时刻
t
e
n
d
i
(
v
)
=
t
+
3
n
(
48
)
tend_{i(v)}=t+3n\quad\quad\quad\quad\quad(48)
tendi(v)=t+3n(48)
以及第
i
(
v
)
i(v)
i(v) 辆车在每个车位上的时间等待矩阵
d
w
i
(
v
)
=
∑
t
i
t
e
n
d
i
(
v
)
⌈
H
i
(
v
)
⋅
D
k
,
j
,
t
−
i
(
v
)
⌉
(
49
)
dw_{i(v)}=\sum_{t_i}^{tend_{i(v)}}\left\lceil H_{i(v)} \cdot D_{k,j,t} -i(v) \right\rceil \quad\quad\quad\quad\quad(49)
dwi(v)=ti∑tendi(v)⌈Hi(v)⋅Dk,j,t−i(v)⌉(49)以第一辆车为例,其进入第四车道时,则矩阵
D
k
,
j
,
0
=
[
0
,
0
,
⋯
,
0
0
,
0
,
⋯
,
0
1
,
0
,
⋯
,
0
0
,
0
,
⋯
,
0
0
,
0
,
⋯
,
0
0
,
0
,
⋯
,
0
]
(
50
)
D_{k,j,0}=\begin{bmatrix}0,0,\cdots, 0 \\ 0,0,\cdots, 0 \\ 1,0,\cdots, 0 \\ 0,0,\cdots, 0 \\ 0,0,\cdots, 0 \\ 0,0,\cdots, 0 \\ \end{bmatrix}\quad\quad\quad\quad\quad(50)
Dk,j,0=
0,0,⋯,00,0,⋯,01,0,⋯,00,0,⋯,00,0,⋯,00,0,⋯,0
(50) 此时,计算所有车道上车辆的总数目,即
y 0 = ∑ k 6 ∑ j 10 d k , j , 0 = 1 ( 51 ) y_0=\sum_k^6\sum_j^{10}d_{k,j,0}=1\quad\quad\quad\quad\quad(51) y0=k∑6j∑10dk,j,0=1(51) 即除去第一辆车外,整个进车道无车辆,因此无需考虑前车,
D
k
,
j
,
0
+
3
=
D
k
,
j
,
0
+
6
=
[
0
,
0
,
⋯
,
0
0
,
0
,
⋯
,
0
1
,
0
,
⋯
,
0
0
,
0
,
⋯
,
0
0
,
0
,
⋯
,
0
0
,
0
,
⋯
,
0
]
(
52
)
D_{k,j,0+3}=D_{k,j,0+6}=\begin{bmatrix}0,0,\cdots, 0 \\ 0,0,\cdots, 0 \\ 1,0,\cdots, 0 \\ 0,0,\cdots, 0 \\ 0,0,\cdots, 0 \\ 0,0,\cdots, 0 \\ \end{bmatrix}\quad\quad\quad\quad\quad(52)
Dk,j,0+3=Dk,j,0+6=
0,0,⋯,00,0,⋯,01,0,⋯,00,0,⋯,00,0,⋯,00,0,⋯,0
(52)
以此类推,由于只有 4
车道有车,因此,当 9s
后需要判断,并更新状态
D k , j , 0 + 9 = [ 0 , 0 , ⋯ , 0 0 , 0 , ⋯ , 0 0 , 1 , ⋯ , 0 0 , 0 , ⋯ , 0 0 , 0 , ⋯ , 0 0 , 0 , ⋯ , 0 ] ( 53 ) D_{k,j,0+9}=\begin{bmatrix}0,0,\cdots, 0 \\ 0,0,\cdots, 0 \\ 0,1,\cdots, 0 \\ 0,0,\cdots, 0 \\ 0,0,\cdots, 0 \\ 0,0,\cdots, 0 \\ \end{bmatrix}\quad\quad\quad\quad\quad(53) Dk,j,0+9= 0,0,⋯,00,0,⋯,00,1,⋯,00,0,⋯,00,0,⋯,00,0,⋯,0 (53)
直到 81s
后,第一辆车到达 1
号位,即
D k , j , 81 = [ 0 , 0 , ⋯ , 0 0 , 0 , ⋯ , 0 0 , 0 , ⋯ , 1 0 , 0 , ⋯ , 0 0 , 0 , ⋯ , 0 0 , 0 , ⋯ , 0 ] ( 54 ) D_{k,j,81}=\begin{bmatrix}0,0,\cdots, 0 \\ 0,0,\cdots, 0 \\ 0,0,\cdots, 1 \\ 0,0,\cdots, 0 \\ 0,0,\cdots, 0 \\ 0,0,\cdots, 0 \\ \end{bmatrix}\quad\quad\quad\quad\quad(54) Dk,j,81= 0,0,⋯,00,0,⋯,00,0,⋯,10,0,⋯,00,0,⋯,00,0,⋯,0 (54)
此时送车横移机没有处理车辆,则第一辆车直接被送往送车横移机,其在 1
号位的等待时间为 0
,记录移出时间
t
e
n
d
1
tend_1
tend1 最后移出车道,即第一辆车在各个车位的时间矩阵为
d w 1 = ∑ t 1 t e n d 1 H 1 ( 0 ) ⋅ D k , j , t ( 55 ) dw_1=\sum_{t_1}^{tend_1}H_{1(0)} \cdot D_{k,j,t}\quad\quad\quad\quad\quad(55) dw1=t1∑tend1H1(0)⋅Dk,j,t(55)
(6)返回道行进规则:
返回道行进规则与进车道行进规则类似,建立矩阵 S j , t S_{j,t} Sj,t,表示在第 t t t 时刻,返回道上的每一车位是否有车及如果有车,该车的序号。
则在 0
时刻,其应该为:
S j , 0 = [ 0 , 0 , 0 , ⋯ , 0 ] ( 56 ) S_{j,0}=[0,0,0,\cdots,0]\quad\quad\quad\quad\quad(56) Sj,0=[0,0,0,⋯,0](56)
假设此时第 v
辆车刚好进入返车道,则此时时刻为
t
j
s
v
tjs_v
tjsv,而此时的 1
号位置为 v
S
1
,
t
j
s
v
=
v
(
57
)
S_{1,tjs_v}=v\quad\quad\quad\quad\quad(57)
S1,tjsv=v(57)
同样每隔 3s
更新一次状态,当
t
j
s
v
+
3
tjs_v+3
tjsv+3时刻时,首先判断前一时刻整个返回道上哪一个车位有车
即
S
j
,
t
j
s
v
=
⌈
s
j
,
t
j
s
v
s
j
,
t
j
s
v
+
1
⌉
(
58
)
S_{j,tjs_v}=\left\lceil\dfrac{s_{j,tjs_v}}{s_{j,tjs_v}+1}\right\rceil \quad\quad\quad\quad\quad(58)
Sj,tjsv=⌈sj,tjsv+1sj,tjsv⌉(58) 此时返车道上总共有
n
t
j
s
v
n_{tjs_v}
ntjsv 辆车,则
n
t
j
s
v
=
∑
j
10
s
j
,
t
j
s
v
(
59
)
n_{tjs_v}=\sum_j^{10}s_{j,tjs_v} \quad\quad\quad\quad\quad(59)
ntjsv=j∑10sj,tjsv(59)
由于返车道只有一条道,则此时返回道上即将被处理的车为第
v
−
n
t
j
s
v
v-n_{tjs_v}
v−ntjsv 辆车,有两种情况,第一种情况,当返回道上的车位于 10
号位时,等待被接车横移机处理,此时,接车横移机正在处理第
i
−
1
(
v
−
n
t
j
s
v
)
i-1(v-n_{tjs_v})
i−1(v−ntjsv) 辆车,则返回道上第
v
−
n
t
j
s
v
v-n_{tjs_v}
v−ntjsv 辆车需在 10
号位等待
t f d v − n t j s v = T z i − 1 ( v − n t j s v ) + H i − 1 ( v − n t j s v ) ⋅ t s 2 ( 60 ) tfd_{v-n_{tjs_v}}=Tz_{i-1(v-n_{tjs_v})}+H_{i-1(v-n_{tjs_v})}\cdot ts_2 \quad\quad\quad\quad\quad(60) tfdv−ntjsv=Tzi−1(v−ntjsv)+Hi−1(v−ntjsv)⋅ts2(60)
如果
t
f
d
v
−
n
t
j
s
v
>
3
tfd_{v-n_{tjs_v}}>3
tfdv−ntjsv>3,则
t
j
s
+
3
v
tjs+3_v
tjs+3v 时刻时,
v
−
n
t
j
s
v
v-n_{tjs_v}
v−ntjsv 仍在 10
号位,
S
10
,
t
j
s
v
+
3
=
S
10
,
t
j
s
v
(
61
)
S_{10,tjs_{v}+3}=S_{10,tjs_v}\quad\quad\quad\quad\quad(61)
S10,tjsv+3=S10,tjsv(61)
如果
t
f
d
v
−
n
t
j
s
v
<
3
tfd_{v-n_{tjs_v}}<3
tfdv−ntjsv<3,则
t
j
s
+
3
v
tjs+3_v
tjs+3v 时刻时,
v
−
n
t
j
s
v
v-n_{tjs_v}
v−ntjsv退出返车道
S
10
,
t
j
s
v
+
3
=
0
(
62
)
S_{10,tjs_{v}+3}=0\quad\quad\quad\quad\quad(62)
S10,tjsv+3=0(62)
当位于其他车道时,需要 9s
更新一次状态,首先判断前一车道是否有位置让该车前进
s
y
t
j
s
v
=
s
j
,
t
j
s
v
−
s
j
+
1
,
t
j
s
v
(
63
)
sy_{tjs_v}=s_{j,tjs_v}-s_{j+1,tjs_v}\quad\quad\quad\quad\quad(63)
sytjsv=sj,tjsv−sj+1,tjsv(63)
如果
s
y
t
j
s
v
=
1
sy_{tjs_v}=1
sytjsv=1 则表示前一车位空缺,后一位置需在 9s
后移动到前车位置。
即
S
j
<
10
,
t
j
s
v
+
9
=
S
j
<
10
,
t
j
s
v
−
s
y
t
j
s
v
⋅
S
j
<
10
,
t
j
s
v
+
s
y
t
j
s
v
⋅
S
j
+
1
,
t
j
s
v
(
j
<
10
)
(
64
)
S_{j<10,tjs_v+9}=S_{j<10,tjs_v}-sy_{tjs_v}\cdot S_{j<10,tjs_v}+sy_{tjs_v}\cdot S_{j+1,tjs_v} \quad (j<10) \quad\quad\quad\quad\quad(64)
Sj<10,tjsv+9=Sj<10,tjsv−sytjsv⋅Sj<10,tjsv+sytjsv⋅Sj+1,tjsv(j<10)(64)
以此类推,假设第 v
辆车经过 3n
秒后被接车横移机送出,那么第 i
辆汽车被接车横移机送出的时刻
s
t
e
n
d
v
=
t
j
s
v
+
3
n
(
65
)
stend_v=tjs_v+3n\quad\quad\quad\quad\quad(65)
stendv=tjsv+3n(65)
以及第 v
辆车在每个车位上的时间等待矩阵
s
w
v
=
∑
t
j
s
v
s
t
e
n
d
v
⌊
s
j
,
t
j
s
v
−
v
⌋
(
66
)
sw_v=\sum_{tjs_v}^{stend_v}\left\lfloor s_{j,tjs_v}-v\right\rfloor \quad\quad\quad\quad\quad(66)
swv=tjsv∑stendv⌊sj,tjsv−v⌋(66)
优化目标:
(1)混动车型间隔 2 台非混动车型为优
输出序列
L
d
,
i
L_{d,i}
Ld,i 表示的是整个序列里面所有的动力类型将其用 0-1
变量表示,则
L
d
,
i
=
{
0
,
该车为燃油
1
,
该车为混动
(
67
)
L_{d,i}=\begin{cases}0, \quad 该车为燃油\\ 1,\quad 该车为混动\\ \end{cases} \quad\quad\quad\quad\quad(67)
Ld,i={0,该车为燃油1,该车为混动(67) 即优化目标所需要的排列顺序为:
1
,
0
,
0
,
1
,
0
,
0
,
1
,
…
1,0,0,1,0,0,1,…
1,0,0,1,0,0,1,…
利用卷积的思想,设置一个核函数
k
e
r
=
[
1
,
9
,
4
,
2
]
(
68
)
ker = [1,9,4,2] \quad\quad\quad\quad\quad(68)
ker=[1,9,4,2](68)
让输出序列
L
1
,
i
L_{1,i}
L1,i 中的连续四个数与核函数相乘再相加,即
z
l
i
=
L
1
,
i
k
e
r
1
+
L
1
,
i
+
1
k
e
r
2
+
L
1
,
i
+
2
k
e
r
3
+
L
1
,
i
+
3
k
e
r
4
(
69
)
zl_i=L_{1,i}ker_1+L_{1,i+1}ker_2+L_{1,i+2}ker_3+L_{1,i+3}ker_4\quad\quad\quad\quad\quad(69)
zli=L1,iker1+L1,i+1ker2+L1,i+2ker3+L1,i+3ker4(69)
则如果
z
l
i
=
3
zl_i=3
zli=3,则第
i
i
i 辆开始连续 4
辆满足混动车型间隔 2
台非混动车型,若
z
l
i
zl_i
zli 为其他值,则不满足,考虑到如果第
i
i
i 辆开始连续 4
辆满足混动车型间隔 2
台非混动车型,那么第
i
+
1
i+1
i+1,
i
+
2
i+2
i+2 辆车,不用计算是否满足优化目标 1
,为了将
i
+
1
i+1
i+1,
i
+
2
i+2
i+2,
i
−
1
i-1
i−1,
i
−
2
i-2
i−2 移出
z
l
i
zl_i
zli,假设如果
z
l
i
=
3
zl_i=3
zli=3,则
z
l
i
+
1
=
z
l
i
+
2
=
8
zl_{i+1}=zl_{i+2}=8
zli+1=zli+2=8,即只要找出序列
z
l
i
zl_i
zli 中除去 8
和 3
以外的所有数,即可得到最后到底有多少辆车没有满足混动车型间隔 2
台非混动车型:
z
=
{
z
l
i
≠
3
,
z
l
i
≠
8
∣
z
l
i
}
(
70
)
z=\{zl_i \ne 3,zl_i\ne 8 | zl_i \}\quad\quad\quad\quad\quad(70)
z={zli=3,zli=8∣zli}(70)● 笔者:“这个核函数的运用是一个创新点。”
即最后需要扣
∣
z
∣
|z|
∣z∣ 分,那么目标函数
z
1
z1
z1 可表示为
z
1
=
100
−
∣
z
∣
(
71
)
z1=100-|z|\quad\quad\quad\quad\quad(71)
z1=100−∣z∣(71)
(2)四驱车型与两驱车型倾向 1:1
出车序列,
输出序列
l
q
,
i
l_{q,i}
lq,i 表示的是整个序列里面所有车辆的驱动类型,其用 0-1
变量表示,则
L q , i = { 1 , 该车辆为两驱 1 , 该车辆为四驱 ( 72 ) L_{q,i}=\begin{cases}1, \quad 该车辆为两驱\\ 1,\quad 该车辆为四驱\\ \end{cases} \quad\quad\quad\quad\quad(72) Lq,i={1,该车辆为两驱1,该车辆为四驱(72)
设得分函数为
z
2
=
100
−
F
(
L
2
,
i
)
(
73
)
z2=100-F(L_{2,i})\quad\quad\quad\quad\quad(73)
z2=100−F(L2,i)(73)
由于是需要分块计算比例,当只有第一辆车的时候无法计算比例,因此从第二辆车开始则 F ( L 2 , i ) F(L_{2,i}) F(L2,i) 的算法流程如下:
Step1:输入整个序列
Step2:初始化处理流程,令 n=2
,p=1
,q=0
,F=0
Step3:判断
L
2
,
n
L_{2,n}
L2,n 是否等于
L
2
,
n
−
1
L_{2,n-1}
L2,n−1,是则进行下一步,否则进行 Step5
Step4:记录 p=p+1
,
Step5:记录 q=q+1
Step6:判断是否 p>q
,是则 n=n+1
,进行 Step8,否则进行下一步
Step7:F=F+1
,n=n+1
,p=q
,q=0
Step8:判断 n
是否大于总数据量,大于执行下一步,否返回 Step3
Step9:输出 F
具体算法流程,如图 4.6
所示。
● 笔者:“他们这张图左下角没画完,可能应该是下面这样。”
(3)返回道使用次数倾向于 0
,权重系数 0.2
z 3 = 100 − v ( 74 ) z3=100-v\quad\quad\quad\quad\quad(74) z3=100−v(74)
(4)总调度时间越短越好
假设出车队列长度为 C
,第一辆车身进入涂装-PBS 出车口时刻记为零,以最后一个车身进入 PBS-总装接车口的时刻 T
为总完成时间,其理论最快完成时间为 9C+72
(全部走进车道 4
,出车序列与入车序列相同),其时间惩罚值设置为 0.01×(T–9C-72)
,最后目标得分为 100–时间惩罚值
。计算理论完成最快时间为 2934s
,目标函数可表示为
z
4
=
100
−
0.01
×
(
T
e
n
d
n
(
v
)
−
2934
)
(
75
)
z4=100-0.01\times(Tend_{n(v)}-2934)\quad\quad\quad\quad\quad(75)
z4=100−0.01×(Tendn(v)−2934)(75)
其中
T
e
n
d
n
(
v
)
Tend_{n(v)}
Tendn(v) 表示序列的最后一辆车
n
n
n 结束送车的时刻。即整个控制过程完成的时刻。
模型确立:
综上所述,将式(11)、(13)-(36)、(39)-(49)、(57)-(66)联立,可得生产线 PBS 优化调度模型为:
Z
=
max
(
0.4
×
z
1
+
0.3
×
z
2
+
0.2
×
z
3
+
0.1
×
z
4
)
(
76
)
Z=\text{max}(0.4\times z1+0.3\times z2+0.2\times z3+0.1 \times z4)\quad\quad\quad\quad\quad(76)
Z=max(0.4×z1+0.3×z2+0.2×z3+0.1×z4)(76)
● 笔者:“约束条件太多了,我就不敲了,直接贴图如下。”
4.3 考虑横移机调度优先级的 PBS 优化问题算法设计
采用灰狼算法对问题一所建立的动态规划模型进行求解,即通过模拟狼群捕猎对模型进行优化来解决动态调度问题。
灰狼算法,即通过构建适应度函数来模拟狼群中的等级制度,将适应度最高的个体定义为狼王,记为
α
α
α,其次记为
β
1
β_1
β1,再次记为
β
2
β_2
β2,其他群狼定义为最低等级的狼,记为
δ
δ
δ。狼群在适应度最高的狼
α
α
α,
β
1
β_1
β1,
β
2
β_2
β2 带领下调整自己的位置,使种群不断逼近最优解,从而获得一个近似最优解。
● 笔者:“启发式算法,和粒子群算法、遗传算法一样都属于启发式算法。”
通过对车辆调度过程分析,可以发现该模型主要通过接车横移机调整所进入的车道序号,是否进入返回道来控制车身运动,因此以每辆车所进入的车道序号,是否进入返回道作为控制方案,然后对时间进行模拟获得得分。本文通过先随机生成控制方案,然后模拟流程计算结果,随着迭代次数的增加,每次迭代狼群均会往头狼的方向移动,使得解决方案逐渐优化,从而获得最优解。
实际上,考虑到在对 PBS 相关时间数据进行处理过程中,接车横移机与送车横移机将车辆从在运往返回道时,虽然他们的来回时间都是 [24, 18, 12, 6, 12, 18],但实际上车辆到达车位的时间并不相同,如图 4.7
所示。
为在车辆运输过程中运用 1
次返回道时的情形,即接车横移机从涂装-PBS 口出发将车辆运到进车道 10
停车位,而后车辆通过进车道停车位不断后移,到达进车道 1
停车位时,送车横移机从总装 PBS 口出发,将车辆从进车道 1
停车位运送到返回道 1
停车位,而后经过返回道停车位不断前移,到达返回道 10
停车位时,接车横移机从涂装-PBS 口出发,将车辆从返回道 10
停车位运至进车道 10
停车位。
通过上述对 PBS 相关时间数据的分析,可以得到车辆经过返回道 1
次,横移机在调度过程中消耗的时间,即
t
s
1
+
t
f
2
=
[
30
,
21
,
12
,
3
,
15
,
24
]
T
ts_1+tf_2=[30,21,12,3,15,24]^T
ts1+tf2=[30,21,12,3,15,24]T 由此,可以根据上述过程消耗的总时间最短为优,设定车道
C
i
C_i
Ci 的选择优先级,为
C
4
>
C
3
>
C
5
>
C
2
>
C
6
>
C
1
C_4>C_3>C_5>C_2>C_6>C_1
C4>C3>C5>C2>C6>C1
通过对各优化目标的权重分析,应优先满足权重较高的目标,即每两辆混动车之间要间隔两辆燃油车,四驱与两驱趋向 1:1
的出车序列。通过对附件所给车辆的数据分析,得分比重较大的燃油和四驱的车型数量较少,应当依据车道的选择优先级较高的处理,因此通过上述策略启发最先开始的随机生产方案,使得更容易得到最优解。
● 笔者:“关键点 → 优先考虑权重较高的目标。”
设计算法步骤如下:
Step1:设置迭代次数
Step2:通过启发策略随机生成 40
个狼群位置即控制方案
Step3:初始化最开始的时间 t=0
,输入车辆,车道时间矩阵,
Step4:判断 t
时刻的输入车辆是否为最后一辆车,否,则进行下一步;是,则进行 step6
Step5:t=t+3
,通过控制方案,更新当前输入车辆,车道时间矩阵,返回 step4
Step6:t=t+3
,通过控制方案,更新当前输入车辆,车道时间矩阵
Step7:判断 t
时刻车道已经处理完成,是,则计算适应度函数;否,则进行 step6
Step8:通过适应度函数,更新 α
,β1
,β2
的位置
Step9:δ
灰狼依据 α
,β1
,β2
更新位置
Step10:更新系数矩阵 A
,C
,以及收敛因子 a
,
Step11:迭代次数加 1
Step12:是否满足小于最大迭代次数,是,进行下一步,否,返回 Step3
Step13:计算得分,输出所有车辆的时间矩阵
算法具体流程图如下:
4.4 考虑横移机调度优先级的 PBS 优化问题求解结果
根据上述算法,运用 Python 对模型进行求解,求解结果如下表所示:
附件 1:
优化后总调度时间:3056s
,优化后返回道使用次数:6
次
附件 2:
优化后总调度时间:2996s
,优化后返回道使用次数:6
次
第 1250 秒车道上所有车辆所处的位置(以附件 1 为例):
车辆以进车序列经过 PBS 调度后到达总装-PBS 口的时刻(第 1-9 辆车),如下图所示(横坐标:表当前时刻,纵坐标:表进车序列):
该问题的迭代优化图,如下:
通过对上图观察可以发现,附件 1
和附件 2
的求解结果在经过 300
次左右迭代后,其变化趋势趋于平稳。为了防止模型陷入局部最优解,对模型进行多次迭代。通过综合考量,可以确定此结果为当前最优解。
五、问题二
5.1 不考虑横移机调度优先级的 PBS 优化问题的分析
在问题一的基础上,减少两条约束,即返回道 10
停车位和进车道 1
停车位上的车辆不需要立刻处理。针对约束条件 6
,取消该约束时,将会出现在接车横移机空闲时,返回道 10
停车位和涂装-PBS 出车口都有车等待处理。针对约束条件 7
,取消该约束时,汽车被送车横移机处理的控制流程就会发生改变,即不止一个车道的 1
停车位上有待处理的车,则送车横移机需要判断优先处理顺序。
5.2 不考虑横移机调度优先级的 PBS 优化模型建立
决策变量:
与问题一相比,在本问题中,不考虑横移机调度的优先级,即返回道 10
车辆就可以停留。因此,增加决策变量
t
h
v
th_v
thv 表示处于返回道 10
停车位上车辆的等待时间停车位上的等待时间。
● 笔者:“与问题一承接对比起来,挺好的”
约束条件:
对比问题一,以下约束发生改变:
(1)车辆出发时刻的约束:
当返回道上 10
号位没有车时,且在接送上一辆车后还未返回初始位置,与问题一 一样,这里不予赘述;当返回道上 10
号位有车时,即不再是优先处理返回道,那么返回道上 10
号位的车将增加新的变量,即等待时间
当
S
10
,
T
i
−
1
(
v
)
+
H
i
−
1
(
v
)
,
k
⋅
t
s
1
=
v
S_{10,T_{i-1(v)}+H_{i-1(v),k}\cdot ts_1}=v
S10,Ti−1(v)+Hi−1(v),k⋅ts1=v 时,此时,增加一新变量
t
h
v
th_v
thv 表示返回道上的第
i
(
v
)
i(v)
i(v) 辆车在 10
停车位的等待时间,如果等待时间大于接车横移机处理第
i
−
1
(
v
)
i-1(v)
i−1(v) 辆车的时间,即
s
t
e
n
d
v
+
t
h
v
>
T
i
−
1
(
v
)
+
H
i
−
1
(
v
)
,
k
⋅
t
s
1
(
78
)
stend_v+th_v>T_{i-1(v)}+H_{i-1(v),k}\cdot ts_1 \quad\quad\quad\quad\quad(78)
stendv+thv>Ti−1(v)+Hi−1(v),k⋅ts1(78) 则处理涂装-PBS 出车口上的汽车,其出发时刻为
T
i
(
v
)
=
T
i
−
1
(
v
)
+
H
i
−
1
(
v
)
,
k
⋅
t
s
1
(
79
)
T_{i(v)}=T_{i-1(v)}+H_{i-1(v),k}\cdot ts_1\quad\quad\quad\quad\quad(79)
Ti(v)=Ti−1(v)+Hi−1(v),k⋅ts1(79) 如果等待时间大于接车横移机处理第
i
−
1
i-1
i−1 车的时间,即
s
t
e
n
d
v
+
t
h
v
<
T
i
−
1
(
v
)
+
H
i
−
1
(
v
)
,
k
⋅
t
s
2
(
80
)
stend_v+th_v< T_{i-1}(v)+H_{i-1(v),k}\cdot ts_2 \quad\quad\quad\quad\quad(80)
stendv+thv<Ti−1(v)+Hi−1(v),k⋅ts2(80) 需处理完上一辆车后,处理返回道的车,全部处理完后,再处理该车。
此时由于返回道上有车,在接车横移机从返回道接车第
v
v
v 次时,第
i
(
v
)
i(v)
i(v) 辆车的等待时间需加上优先处理返回道上的时间,即:
T
i
(
v
)
=
T
i
−
1
(
v
)
+
H
i
−
1
(
v
)
,
k
⋅
t
s
1
+
(
t
f
d
1
+
t
f
d
2
)
⋅
h
v
+
t
h
v
(
81
)
T_{i(v)}=T_{i-1(v)}+H_{i-1(v),k}\cdot ts_1 + (tfd_1+tfd_2)\cdot h_v + th_v \quad\quad\quad\quad\quad(81)
Ti(v)=Ti−1(v)+Hi−1(v),k⋅ts1+(tfd1+tfd2)⋅hv+thv(81)
其中 h v h_v hv 表示接车横移机第 v v v 次接车是否到某一车道,考虑到这里要优先处理返回道上的车,第 v v v 次辆车已经彻底迭代完成,重新插入队列中,变为第 i ( v + 1 ) i(v+1) i(v+1) 辆车,即
J i ( v + 1 ) = J v ( 82 ) J_{i(v+1)}=J_{v}\quad\quad\quad\quad\quad(82) Ji(v+1)=Jv(82) 该车的等待时间应该为
T i ( v + 1 ) = T i − 1 ( v ) + H i − 1 ( v ) , k ⋅ t s 1 + t f d 1 ⋅ h v + t h v ( 83 ) T_{i(v+1)}=T_{i-1(v)}+H_{i-1(v),k}\cdot ts_1 + tfd_1\cdot h_v + th_v \quad\quad\quad\quad\quad(83) Ti(v+1)=Ti−1(v)+Hi−1(v),k⋅ts1+tfd1⋅hv+thv(83)
与此同时,原来的第 i ( v ) i(v) i(v) 辆车变为第 i + 1 ( v + 1 ) i+1(v+1) i+1(v+1) 辆车,即
J i + 1 ( v + 1 ) = J v ( 84 ) J_{i+1(v+1)}=J_{v}\quad\quad\quad\quad\quad(84) Ji+1(v+1)=Jv(84)
其出发时刻可表示
T i + 1 ( v + 1 ) = T i ( v ) = T i − 1 ( v ) + H i − 1 ( v ) , k ⋅ t s 1 + ( t f d 1 + t f d 2 ) ⋅ h v + t h v ( 85 ) T_{i+1(v+1)}= T_{i(v)}= T_{i-1(v)} +H_{i-1(v),k}\cdot ts_1 + (tfd_1 + tfd_2)\cdot h_v + th_v \quad\quad\quad\quad\quad(85) Ti+1(v+1)=Ti(v)=Ti−1(v)+Hi−1(v),k⋅ts1+(tfd1+tfd2)⋅hv+thv(85)
(2)汽车被送车横移机处理的时间
汽车在被送车横移机处理时有两种状态:
r
i
(
v
)
r_{i(v)}
ri(v) 表示是否被送往返回道,与此同时,还需要判断返回道上的 1
号位是否有车,此时时刻为
t r i ( v ) = T i ( v ) + T z i ( v ) + ∑ j 10 T c t i ( v ) , j ( 86 ) tr_{i(v)}=T_{i(v)}+Tz_{i(v)}+\sum_j^{10} Tct_{i(v),j} \quad\quad\quad\quad\quad(86) tri(v)=Ti(v)+Tzi(v)+j∑10Tcti(v),j(86)
则当
s
1
,
t
r
i
(
v
)
=
0
,
r
i
(
v
)
=
1
s_{1,tr_{i(v)}}=0,r_{i(v)}=1
s1,tri(v)=0,ri(v)=1 时才能将汽车送往返回道
T
e
i
(
v
)
=
H
i
(
v
)
,
k
⋅
t
f
1
(
87
)
Te_{i(v)}=H_{i(v),k}\cdot tf_1 \quad\quad\quad\quad\quad(87)
Tei(v)=Hi(v),k⋅tf1(87)
此时,第 i ( v ) i(v) i(v) 辆汽车进入返回道,整个流程结束时间为:
T e n d i ( v ) = T i ( v ) + T z i ( v ) + ∑ j 10 T c t i ( v ) , j + T e i ( v ) ( 88 ) Tend_{i(v)}=T_{i(v)}+Tz_{i(v)}+\sum_j^{10}Tct_{i(v),j}+Te_{i(v)} \quad\quad\quad\quad\quad(88) Tendi(v)=Ti(v)+Tzi(v)+j∑10Tcti(v),j+Tei(v)(88)
当
s
1
,
t
r
i
(
v
)
≠
0
s_{1,tr_{i(v)}}\ne 0
s1,tri(v)=0 时,还需要加上
v
−
1
v-1
v−1 辆汽车运送到 2
车道的时间
s
w
v
−
1
=
∑
t
j
s
v
−
1
s
t
r
n
d
v
−
1
⌈
s
1
,
t
−
v
⌉
(
89
)
sw_{v-1}=\sum_{tjs_{v-1}}^{strnd_{v-1}} \left\lceil s_{1,t} - v\right\rceil \quad\quad\quad\quad\quad(89)
swv−1=tjsv−1∑strndv−1⌈s1,t−v⌉(89)
结束时间为
T e n d i ( v ) = T i ( v ) + T z i ( v ) + ∑ j 10 T c t i ( v ) , j + T e i ( v ) + s w v − 1 ( 90 ) Tend_{i(v)}=T_{i(v)}+Tz_{i(v)}+\sum_j^{10}Tct_{i(v),j}+Te_{i(v)}+sw_{v-1}\quad\quad\quad\quad\quad(90) Tendi(v)=Ti(v)+Tzi(v)+j∑10Tcti(v),j+Tei(v)+swv−1(90)
最后,令返回序列
J v + 1 = j i ( v ) ( 91 ) J_{v+1}=j_{i(v)} \quad\quad\quad\quad\quad(91) Jv+1=ji(v)(91)
则此时
v
+
1
v+1
v+1 辆在返回道 1
车位上的开始时间为
t j s v + 1 = T e n d i ( v ) ( 92 ) tjs_{v+1}=Tend_{i(v)} \quad\quad\quad\quad\quad(92) tjsv+1=Tendi(v)(92)
如果 r i ( v ) = 0 r_{i(v)}=0 ri(v)=0,则第 i i i 辆汽车直接送出,则送出时间
T e i ( v ) = H i ( v ) , k ⋅ t s 1 ( 93 ) Te_{i(v)}=H_{i(v),k}\cdot ts_1 \quad\quad\quad\quad\quad(93) Tei(v)=Hi(v),k⋅ts1(93)
此时,第 i i i 辆汽车退出程序,其结束时间为:
T e n d i ( v ) = T i ( v ) + T z i ( v ) + ∑ j 10 T c t i ( v ) , j + T e i ( v ) ( 94 ) Tend_{i(v)}=T_{i(v)}+Tz_{i(v)}+\sum_j^{10}Tct_{i(v),j}+Te_{i(v)} \quad\quad\quad\quad\quad(94) Tendi(v)=Ti(v)+Tzi(v)+j∑10Tcti(v),j+Tei(v)(94)
● 笔者:“写到这里,我不由得由衷赞叹这个团队里面建模手的强大”
输出序列属性
L i = J i ( v ) ( 95 ) L_i=J_{i(v)}\quad\quad\quad\quad\quad(95) Li=Ji(v)(95)
考虑约束六,即存在一种情况 1 1 1 号位有不止一辆汽车,需要送车横移机做出选择,此时汽车的车道行进规则改变。
(3)车道行进规则
当前时刻所有车的位置,可表示为
d
k
,
j
,
t
=
⌊
D
k
,
j
,
t
D
k
,
j
,
t
+
1
⌋
(
96
)
d_{k,j,t}=\left\lfloor \frac{D_{k,j,t}}{D_{k,j,t}+1} \right \rfloor \quad\quad\quad\quad\quad(96)
dk,j,t=⌊Dk,j,t+1Dk,j,t⌋(96)
此时,位于 1
号位的车辆总数可表示为:
n u m = ∑ k 6 d k , 1 , t ( 97 ) num=\sum_{k}^6 d_{k,1,t} \quad\quad\quad\quad\quad(97) num=k∑6dk,1,t(97)
当 n u m ≤ 1 num \leq 1 num≤1 时,其等待时间与问题一相同,不改变,当 n u m > 1 num > 1 num>1 时,随着时间的推进考虑送车横移机选择策略,
当
t
+
3
t+3
t+3 时,目前正在被送车横移机处理的车为
J
i
−
y
t
(
v
)
J_{i-y_t(v)}
Ji−yt(v),则当前时刻输出的序列为
L
i
−
y
t
(
v
)
L_{i-y_t(v)}
Li−yt(v) 作为判断依据,对目前正在 1
道的车进行模拟,选择得分最高的序列,然后处理该车。
则需判断的车辆有
i
−
y
t
(
v
)
−
1
,
i
−
y
t
(
v
)
−
2
,
⋯
,
i
−
y
t
(
v
)
−
n
u
m
(
98
)
i-y_t(v)-1,i-y_t(v)-2,\cdots,i-y_t(v)-num \quad\quad\quad\quad\quad(98)
i−yt(v)−1,i−yt(v)−2,⋯,i−yt(v)−num(98)
其得分分别为
Z i − y t ( v ) − 1 , Z i − y t ( v ) − 2 , ⋯ , Z i − y t ( v ) − n u m ( 99 ) Z_{i-y_t(v)-1},Z_{i-y_t(v)-2},\cdots,Z_{i-y_t(v)-num} \quad\quad\quad\quad\quad(99) Zi−yt(v)−1,Zi−yt(v)−2,⋯,Zi−yt(v)−num(99)
需处理的车辆为
s x m = max { Z i − y t ( v ) − 1 , Z i − y t ( v ) − 2 , ⋯ , Z i − y t ( v ) − n u m } ( 100 ) sx_m=\text{max}\{ Z_{i-y_t(v)-1},Z_{i-y_t(v)-2},\cdots,Z_{i-y_t(v)-num} \} \quad\quad\quad\quad\quad(100) sxm=max{Zi−yt(v)−1,Zi−yt(v)−2,⋯,Zi−yt(v)−num}(100)
令目前需要处理的车辆 i − y t ( v ) − 1 = m i-y_t(v)-1=m i−yt(v)−1=m,其他车辆次序依次改变。
模型确立:
综上所述,联立模型一,得到不考虑横移机调度优先级的 PBS 优化模型为:
Z = max ( 0.4 × z 1 + 0.3 × z 2 + 0.2 × z 3 + 0.1 × z 4 ) ( 101 ) Z=\text{max}(0.4\times z1+0.3\times z2+0.2\times z3+0.1 \times z4)\quad\quad\quad\quad\quad(101) Z=max(0.4×z1+0.3×z2+0.2×z3+0.1×z4)(101)
5.3 不考虑横移机调度优先级的 PBS 优化问题算法设计
该题算法与问题一模型的求解过程相同,也是采用灰狼算法对根据问题 2
所建立的动态规划模型进行求解,与问题一不同的是,由于取消了约束 6
和约束 7
,除了问题一涉及到的决策变量:横移机接送每辆车进入的车道序号,每辆车是否进入返回道以外,还有新的决策变量,每辆进入返回道的车辆在 10
号位的等待时间,而送车横移机遇到多辆车在 1
号位等待时,将一号位的每一辆车模拟送出整个序列的得分,得分最高的先行处理。
模型二主要体现在决策变量的增加,以及车道行进规则的改变,其整个的算法流程与问题一的求解相同。
该算法设计步骤如下:
Step1:初始化灰狼算法参数
Step2:通过启发策略随机生成 40
个狼群位置即控制方案
Step3:初始化最开始的时间 t=0
,输入车辆,车道时间矩阵,
Step4:判断 t
时刻车道是否已经处理完成,是,进行 step6,进行下一步,否,进行下一步
Step5:t=t+3
,通过控制方案,更新当前输入车辆,车道时间矩阵
Step6:计算适应度函数
Step6:通过适应度函数,获得每头狼的生存价值。
Step7:更新狼群的位置
Step8:依据适应度函数,α
,β1
,β2
更新位置,
Step9:迭代次数加 1
Step10:是否满足小于最大迭代次数,是,进行下一步,否,返回 Step3
Step11:计算得分,输出所有车辆的时间矩阵
流程图与问题一相似,这里不重复展示。
5.4 不考虑横移机调度优先级的 PBS 优化模型求解结果
通过上述算法分析,利用 Python 进行求解,得到以下结果:
附件 1:
优化后总调度时间:3056s
,优化后返回道使用次数:8
次
附件 2:
优化后总调度时间:3014s
,优化后返回道使用次数:4
次
第 1250 秒车道上所有车辆所处的位置(以附件 1 为例):
车辆以进车序列经过 PBS 调度后到达总装-PBS 口的时刻(第 1-9 辆车),如下图所示(横坐标:表当前时刻,纵坐标:表车辆的进车序列):
该问题的迭代优化图,如下:
通过对上图观察可以发现,附件 1
和附件 2
的求解结果在经过 250-300
次迭代后,其变化趋势趋于平稳。与问题 1
的求解结果相比较,可发现模型二比模型一能够更快的收敛。同时,通过比较模型一和模型二的得分情况,可发现无论是附件 1
还是附件 2
,模型二的得分均高于模型一,即模型二优于模型一。
六、模型评价与推广
6.1 模型的优点
(1)模型采用较为成熟的数学理论来建立,因此所得结果较为可靠。
(2)该模型建立流程清晰,详细易懂,便于今后对模型进行进一步的优化推广。
(3)该模型的建立运用了启发式算法,有效降低了模型求解时的困难。
6.2 模型的缺点
(1)模型虽然综合考虑了很多因素,但由于建模时间的限制,可能忽略了其他实际应用中可能对生产调度产生的影响,在实际应用中具有一定的局限性。
(2)该模型具有启发式算法的局限性,无法得到全局最优解。
6.3 模型的推广
该模型是有关生产线缓存区优化调度问题的一个典型案例,可广泛应用于流水工作车间。此外,也可以该模型为基础,进行简单的修改,推广应用于公交车、人力资源等调度问题。
七、参考文献
[1] 陈广阳. 汽车生产线缓冲区设计及排序问题研究[D]. 华中科技大学,2007.
[2] 陈正茂. 基于排序缓冲区的多车间关联排序研究[D]. 华中科技大学,2008.
写在最后——个人的经验总结
● 问题的结果其实并没有这么重要,重要的是建模过程。
● 这篇相较于另外一篇 “数模之星”(杭州电子科技大学那篇),还是差了点,流程图、可视化、对结果的分析、行文表述、文献利用 还有待提升。
● 画图!画图!思维导图!关系联系图!论文手一定要勤画图!
● 这个赛题最难的是编程,其实建模手按照题目要求,一点一点地分析,把所有的,各种情况分清楚(先罗列,再分类,最后逻辑连接),然后转换成数学表达就行。但是编程就不一样了,很考验编程手 “大模拟” 的能力。
⭐️ ⭐️ 写于 2024年9月18日 19:38