写在前面:
第十九届数模研赛在22年10月6-10日开展,我和我的两名队友肝了5天,整出来一篇论文。因为不确定自己做的好不好,所以一直没写博客。前两天结果出来了,我们队拿了国二,在C题里排名88/1134,感觉结果还不错。
以后应该也不会再有机会参加数学建模了,在此简单记录一下最后一次数模的解题思路。
代码就不分享了,也没有分享的必要,准备数学建模竞赛还是重在看懂解题思路,想获奖写好论文比较重要。各位读者有问题可以评论/私聊我~
系列文章链接汇总如下:
(一)C题题目
(二)问题重述
(三)问题一模型建立
(四)问题二模型建立
(五)算例分析
文章目录
- 1.决策变量
- 2.一阶段模型:自适应并行遗传算法模型
- 2.1解码规则
- 2.2一阶段遗传算法的贪心策略与随机抽样方法
- 2.2.1右侧送车横移机的装载位置与卸载位置
- 2.2.2左侧接车横移机的装载位置与卸载位置
- 2.2.3超参数 γ \gamma γ
根据题意,本文建立了一个两阶段优化模型。第一阶段为自适应并行遗传算法模型,该模型对每辆车身在从涂装车间接出后应送往的目标车道进行编码。 由于模型中送车横移机的卸载位置决策较为复杂(与时序运行结果有关) ,在此我们采用在一阶段遗传算法中嵌套贪心策略进行处理, 算法由该车在贪心算法下的决策以及该车的后一辆车辆的决策,来共同决定是否需要将该车送回返回车道。 第二阶段为贪心寻优模型, 其将以一阶段找到的最优染色体为基础执行贪心算法,寻找对当前解的更优改进。
问题二的模型是在问题一模型的基础上做了一些改进,在此仅将修改的部分列出。
1.决策变量
参照(二)问题重述,问题二需要进行决策优化的变量有4个:
- 接车横移机(左)的接车位置:涂装车间送车口,返回车道的车位10,共2个选择
- 接车横移机(左)的送车位置:进车道1、2、3、4、5、6的车位10,共6个选择
- 送车横移机(右)的接车位置:进车道1、2、3、4、5、6的车位1,共6个选择
- 送车横移机(右)的送车位置:总装车间的入车口,返回车道的车位1,共2个选择
在问题二中我们同样采用基于自适应并行遗传算法和贪心寻优算法的两阶段模型。
一阶段的遗传算法:
- 仍然对决策变量1中车身的目标车道进行编码;
- 对于送车横移机(右)的装载位置与卸载位置,我们采用在遗传算法中嵌套一步贪心策略进行决策;
- 对于接车横移机的装载位置,我们根据返回道的拥挤度,在遗传算法中嵌套随机抽样进行决策。
二阶段的贪心寻优模型与问题一相同, 其将以一阶段找到的最优染色体为基础执行贪心算法,寻找对当前解的更优改进。
2.一阶段模型:自适应并行遗传算法模型
问题二中的遗传算法与问题一中的遗传算法的思路相同,两者的编码原则和适应度函数相同。
只不过问题二中的解码过程中有所变化:
- 右侧接车横移机选择装载车身的条件发生了改变,由原来是“返回道车身优先”原则变为了根据拥挤度随机抽样结果确定;
- 左侧送车横移机选择装载车身的条件也发生了改变,由原来的“先到达先处理”变为了由贪心算法与随机抽样的结果决定。
2.1解码规则
由于编码过程仅对各个车身对应的送入车道进行了编码,解码过程需要根据这一基因型来推演/模拟出整个车间的运作流程。
这里用三张流程图,分别表示车间中运动的三个物体(在车道内的车、接车横移机、送车横移机)的运动情况。
车道内车身运动过程的流程图与问题一相同。下面仅给出左侧接车横移机和右侧送车横移机的运动流程图。
因为我懒,解码这里就不写公式了。反正这一步就是能够通过进车车道模拟出整个运行过程即可。
2.2一阶段遗传算法的贪心策略与随机抽样方法
2.2.1右侧送车横移机的装载位置与卸载位置
对于送车横移机来说,若是所有进车道的 1 停车位上共有 N w a i t N^{wait} Nwait 辆车身正在等待装载,对于每一辆等待装载的车身,均有送入总装车间与送回返回道两种策略。
两种策略下的扣分值可以通过问题一中的一阶段贪心策略来确定,计算式如下:
送入总装车间的扣分值计算式为:
S c o r e L o s s i z = 0.4 × b i 1 + 0.3 × b i 2 ScoreLoss_i^z=0.4\times b_i^1+0.3\times b_i^2 ScoreLossiz=0.4×bi1+0.3×bi2
式中, S c o r e L o s s i z ScoreLoss_i^z ScoreLossiz 为将第 i i i 辆车送入总装车间的扣分值, b i 1 b_i^1 bi1 为是否会破坏优化目标1的二元变量(是否对出车排序造成破坏),破坏为1,即扣0.4分,未破坏为0; b i 2 b_i^2 bi2 为是否会破坏优化目标2的二元变量(是否对出车比例造成破坏),破坏为1,即扣0.3分,未破坏为0;
送入返回车间的扣分值计算式为:
S c o r e L o s s i f = 0.2 + 0.1 × ( 9 + T i d + 6 ) ScoreLoss_i^f=0.2+0.1\times (9+T_i^d+6) ScoreLossif=0.2+0.1×(9+Tid+6)
式中, S c o r e L o s s i f ScoreLoss_i^f ScoreLossif 为将第 i i i 辆车送入返回车道的扣分值,送车横移机将车卸载在返回车道,造成的目标函数的损失来源于返回车道的惩罚与多花费时间的惩罚,而多花费的时间来自于该车送回插队对总装车间的进车过程将造成 9 秒的时间消耗、整个送车横移机将车送回返回车道比送到总装车间多花费 T i d T_i^d Tid秒的时间、以及接车横移机装卸载该车身需多花费 6 秒时间。
因此送车横移机共有 2 × N w a i t 2\times N^{wait} 2×Nwait 种装载与卸载策略,并可以得到每个策略下对目标函数的扣分值。
由于可能存在两种策略的扣分值相同的情况,因此我们将每种策略下的扣分值转化为概率进行随机抽样,从而来选择送车横移机的装载车身和该车身卸载位置的最终决策,最终确定送车横移机的装载位置与卸载位置两个决策变量。
将第 s s s 个策略的扣分值转化为概率表达的计算式如下:
P ( s ) = 1 − S c o r e L o s s s ∑ j 2 × N w a i t S c o r e L o s s j P(s)=1-\frac{ScoreLoss_s}{\sum_j^{2\times N^{wait}}ScoreLoss_j} P(s)=1−∑j2×NwaitScoreLossjScoreLosss
即第 s s s 个策略的扣分值越少,选择它的概率越接近1。抽样时先将所有的概率归一化,再进行随机抽样即可。
通过贪心的思想确定每种策略的概率,并根据概率进行随机抽样的执行流程如下:
2.2.2左侧接车横移机的装载位置与卸载位置
对于左侧接车横移机来说,若是涂装车间出口处与返回道 10 车位均有车身在等待装载,则接车横移机需要决策装载涂装车间出口处车身还是返回车道上的车身。
我们将返回车道上的拥挤度(返回车道上车的数量)转化为概率,同样进行随机抽样决定装载位置。
假设装载涂装车间出口处车身为策略 1,装载返回道 10 车位车身为策略 2,则两种策略的概率表达式如下所示:
P ( 2 ) = ∑ w = 1 10 M f , w , t 10 P ( 1 ) = 1 − P ( 2 ) P(2)=\frac{\sum_{w=1}^{10}M_{f,w,t}}{10}\\ P(1)=1-P(2) P(2)=10∑w=110Mf,w,tP(1)=1−P(2)
式中, w w w 为车位位置,取值1-10代表车位1-10; M f , w , t M_{f,w,t} Mf,w,t 为 t t t 时刻返回车道 f f f 的车位 w w w 上是否有车的状态变量,有车为1,没车为0。
因此,当返回车道上的车辆数越多,说明返回车道越拥挤,左侧接车横移机前往返回车道装载的概率越高。
2.2.3超参数 γ \gamma γ
同样需要注意的是,在右侧送车横移机需要判断对当前车辆送到哪里时,每次都执行本贪心策略进行随机抽样的模型不是最优的。
因为在某些情况下,将车辆送入返回车道是更坏的选择, 应该不论惩罚值对比情况如何,都直接送至总装车间。这一点已在问题一中解释说明过。
因此也需要引入超参数 γ \gamma γ ,它被用来表示当右侧送车横移机需要判断当前车辆要送往返回车道还是送往总装车间时,有 γ \gamma γ 的概率直接送往总装车间,有 ( 1 − γ ) (1-\gamma) (1−γ) 的概率需执行本步贪心策略随机抽样算法来确定是否返回。
关于超参数 γ \gamma γ 的选择方法与在问题一的模型中选定,即为0.99。