2019数模国赛心得

最后一次数模竞赛心得

今年中秋,我们肝完了最后一次数模竞赛,算上校赛,这是我第五次参加数模类的竞赛,虽然只取得了省一的成绩,没能获得更为理想的成绩,但也算是给三天的通宵一个可以的交代了。

选题

由于我们组都是学软工的,且我之前也算接触了一点机器学习的皮毛,因此我们赛前就想好了非数据挖掘类题不选。当天下午,题目放出来时,我们还在佛系地吃炒菜。看到AB全是物理题,开幕雷击,只能选择C题开放题。C题题目如下:

大多数乘客下飞机后要去市区(或周边)的目的地,出租车是主要的交通工具之一。国内多数机场都是将送客(出发)与接客(到达)通道分开的。送客到机场的出租车司机都将会面临两个选择:
(A) 前往到达区排队等待载客返回市区。出租车必须到指定的“蓄车池”排队等候,依“先来后到”排队进场载客,等待时间长短取决于排队出租车和乘客的数量多少,需要付出一定的时间成本。
(B) 直接放空返回市区拉客。出租车司机会付出空载费用和可能损失潜在的载客收益。
在某时间段抵达的航班数量和“蓄车池”里已有的车辆数是司机可观测到的确定信息。通常司机的决策与其个人的经验判断有关,比如在某个季节与某时间段抵达航班的多少和可能乘客数量的多寡等。如果乘客在下飞机后想“打车”,就要到指定的“乘车区”排队,按先后顺序乘车。机场出租车管理人员负责“分批定量”放行出租车进入“乘车区”,同时安排一定数量的乘客上车。在实际中,还有很多影响出租车司机决策的确定和不确定因素,其关联关系各异,影响效果也不尽相同。
请你们团队结合实际情况,建立数学模型研究下列问题:
(1) 分析研究与出租车司机决策相关因素的影响机理,综合考虑机场乘客数量的变化规律和出租车司机的收益,建立出租车司机选择决策模型,并给出司机的选择策略。
(2) 收集国内某一机场及其所在城市出租车的相关数据,给出该机场出租车司机的选择方案,并分析模型的合理性和对相关因素的依赖性。
(3) 在某些时候,经常会出现出租车排队载客和乘客排队乘车的情况。某机场“乘车区”现有两条并行车道,管理部门应如何设置“上车点”,并合理安排出租车和乘客,在保证车辆和乘客安全的条件下,使得总的乘车效率最高。
(4) 机场的出租车载客收益与载客的行驶里程有关,乘客的目的地有远有近,出租车司机不能选择乘客和拒载,但允许出租车多次往返载客。管理部门拟对某些短途载客再次返回的出租车给予一定的“优先权”,使得这些出租车的收益尽量均衡,试给出一个可行的“优先”安排方案。

第一天进展

由于晚上六点左右才放的题,我们第一天确定好题目后,只简单讨论了一下大体的策略。题目没给任何数据,所以我们当天晚上三个人基本都在各大网站上查找出租车数据记录和机场航班记录,却很难找到理想的数据集。最终我们只找到部分成都双流机场的航班及出租车数据,但是数据量过小,做机器学习几乎是不可能,因此我们基本确定文章采用“模拟”的手段进行分析。数据集有了着落后,我们就早早各自回宿舍摸鱼了。

第二天进展

第二天一大早,我们开始重点讨论第一问。第一问只需要给出影响因素和选择决策模型,不需要用到实际数据模拟,因此我们首先确定了如下的影响因素。

接着便是评价标准。作为一个司机。它留在机场的收益是可能出现的乘客给他带来的长途收益,而损失则是排队带来的时间成本,这一排队时间他完全可以返回城市拉其他短途乘客。时间成本可以简单地用排队时间与司机日均收入的关系来计算。那么现在需要解决的就是排队时间了。因此我们第一问很容易想到用排队论进行处理。

到了下午,我们第一问的思路基本理顺了,我的两名队友开始着手第一问的论文大纲,我开始考虑第二问的代码模拟。由于缺乏数据,我主要采用蒙特卡洛模拟,并假设乘客出现的时间、上车时间等一系列因素满足正态分布。考虑蓄车池内汽车数分别为20,30,40,50,对每种情况模拟10万次,最终得到如下散点图:

经过三次曲线拟合,得到如下结果图:

处于 boundary 直线上方的出租车司机选择留在机场的收益更高,处于 boundary 直线下方的出租车司机选择离开机场的收益更高。

除此之外,我还利用随机森林对影响因素重要度进行计算,得出如下结果:

第三天进展

早晨写完第二问后,我们开始讨论第三问的思路。在为是否可以设置双边上车点的问题,我和另一名队友争论了很久。最后我们决定同时采用两种上车点设置方式来进行比较。


为了能够用程序模拟两种上车点设置的调度过程,我们给出租车和乘客设置了如下规则:

(一)双边设置停车点
 ⚫ 等待原则:位于后方的上车点需要等待前方上车点的车驶出后才可以离开
 ⚫ 有序原则:始终保证两个并行车队长度一致,且不存在插队超车的可能
(二)单边设置停车点
 ⚫ 停车原则:停车区域内出租车只可以在上车点或每个上车点后的次级停车点停车
 ⚫ 时间原则:每向前驶入一个停车点需要 3 秒的时间,而次级停车点驶入上车点不需要时间
 ⚫ 就近原则:出租车司机会优先选择将车停靠在离自己最近的停车点
 ⚫ 智能化原则:停车区域外的每一个出租车根据停车区域内的情况智能地选择对自己最有利的入场方案,如当上车点内有空闲的上车点时,他会选择将车驶入上车点,而不会驶入次级停车点

经过模拟,发现两种停车点设置在时间性能上表现相当,但是采用双边上车的时间方差过大,因此我们最终选择第一种停车点设置策略,并计算出最合理的停车点数量(如下图)

最后冲刺

第三天晚上加最后一天白天,我们组基本没有睡觉(在猝死的边缘疯狂试探……)。我们最后一问长时间没有很好的思路,其实主要原因还是因为根本没有真实的数据。最后我提出可以采用获取“积分”的方式来对在机场等客的司机进行补偿。我们设置一条“优先通道”,每次司机在机场载客,我们根据其载客获得的收益给予一定的“积分”,当“积分”值达到1时,他便可以获得进入“优先通道”免去排队的机会。

这一问我们主要采用贪心法来对“积分”进行分配,流程图如下:

最终我们得出分配方程$y = 0.95e^{-0.26x} - 0.0002496$. 其中$x$为司机将乘客送往市区所获得的收益,$y$为本次行程司机应获得的积分数。我们也在DDL前完成了全部论文的编写并送给指导老师进行了最后的修改。

总结

本次数模竞赛,我们在思路上还是没能有很好的心意,最终还是栽在了C题开放题上。由于缺乏理想的数据集,我们几乎通篇都在使用各种“模拟”的手段,这种单一的做法无形之中给我们论文降低了不少分。

数模竞赛与算法类竞赛给我带来的体验大不相同。算法来竞赛更多是用各种调参机制和神仙trick来与对手拉开差距,最后以分数作为唯一指标。而数模竞赛由于其过大的开放性给比赛带来了许多不确定性,我们组显然没能把握住这一不确定性,最终还是翻了车。

无论如何,我还是很享受这三天的熬夜爆肝,希望今后还能参加更多类似的项目和竞赛。

文章目录
  1. 1. 选题
  2. 2. 第一天进展
  3. 3. 第二天进展
  4. 4. 第三天进展
  5. 5. 最后冲刺
  6. 6. 总结