草帽路飞UU 发表于 2022-9-29 17:16:51

记一次大厂的调度算法评测与仿真系统(中)

本帖最后由 草帽路飞UU 于 2022-9-29 17:17 编辑

 仿真模型


仿真模型是对物理世界行为或规则的模拟,主要会涉及到两部分。一是自然流转,指车辆在物理世界自然流动的情况,我们需要把它模拟出来。二是模型输入,指仿真世界里的一些实时数据,我们需要提供给


调度算法去作为输入数据,如供需上需要预测的数据或运力的模拟数据。




接下来介绍车辆自然流转的仿真实现,车辆自然流转指在某一时刻某一有限空间下,车辆在不同站点之间流动的情况。如图是某一时刻,车辆在不同站点之间流动的轨迹。我们进行公式提炼,假设某个站点Sa


在某一时刻流出的车辆总数是O,流向各个站点的概率为(Si,Pi)。我们就可以知道站点Sa流向站点Sb的车辆情况,或者是站点Sa流向站点Sc的车辆情况,通过这个计算公式就可以得出来。


  
第一步我们要计算某一时刻站点流出的车辆数,会用到三个维度的特征数据,一是站点数据,包括站点基础信息、站点实时车辆数、站点历史需求和站点间车辆骑行时长。二是车辆数据,包括车辆实时电量和


车辆实时标签。三是外部数据,包括节假日数据和天气特征。我们的筛选条件有两个,一是可用日期的筛选,我们取历史一个月内相同日期特征的数据,如是否节假日、天气因素相似。二是站点内可用车辆的


数据,这里需要剔除异常车辆,如故障车和低电车。举个例子,我们要计算2月28日0点10分的站点车辆流出数据,会获取历史一个月内同样是0点10分的所有站点数据,根据可用日期作为筛选条件,把相同日


期特征的站点数据筛选出来,汇总取平均值。有了平均站点车辆数后,我们还要去看站点内的可用车的情况。如果可用车辆数大于计算出来站点的出站数,就取出站数;如果可用车辆数小于出站数,就取站内


可用车辆数。




第二步我们要计算某一时刻站点间转移概率,会用到两个维度的特征数据。一是站点数据,包括站点间流转订单、站点间车辆骑行时长。二是外部数据,包括节假日数据和天气特征。它是一个统计问题,又因


为物理世界中会存在某种意外概率的事件,为了能够模拟这些意外概率的事件,我们加入轮盘赌选择法,来使我们仿真的结果更贴近于物理世界。统计方式有些类似,都是取一个月内相同日期特征,计算不同


站点之间流转概率的平均汇总。




第三步是结合流出车辆数据和站点间流转概率,模拟特定时刻站点间车辆流转情况。如图所示,0点10分站点A流出10辆车,结合流转概率,我们可以得出站点A会往B流出5辆车,站点A会往C流出3辆车,站点


A会往D流出2辆车,同样其他站点用类似的计算方式会得出流转方式。

  仿真会带来一些优势,一是能够修正错误,特定日期可能会有异常,如某个站点当日流出5辆车,并不代表它的真实需求是5辆车,可能是因为这个站点内只有5辆车,所以只能最多流出5辆车。我们有历史


数据作为依据,可以修正异常值。二是降低偶然性,如某些站点某一时刻会由于热点事件,如台风天气或演唱会举办等事件带来需求的波动,并不代表普遍的效果。


 
介绍完车辆自然流转模拟,这里有个问题,什么结果是好的仿真结果?于是就有了逼真度的概念。逼真度是用来量化仿真系统的一种途径,在一定程度上能够体现出仿真系统的正确性和可信度。而只有保证仿


真系统的正确性和可信度,仿真结果才具有实际应用价值。




第一个维度是数据源和建模,我们假设数据源选取某城市、某日期,计算每个站点在每个时刻的真实流出,计算每个站点在每个时刻的仿真流出。我们会做两个维度的建模,站点维度和时间维度。站点维度建


模是指我们按照真实流出和仿真流出两个指标,汇总出每一个站点在所有时刻的总流出并排序,会得到站点维度的真实排序和站点维度的仿真排序。时间维度建模是汇总每个小时在这个城市所有站点的总流出


并按时间排序,得出时间维度的真实排序和时间维度的仿真排序。




这里我们评估逼真度,借鉴了伪时间排序分数POS算法,设计仿真流转排序相似性算法。举个例子,如图是时间维度的排序,我们看到按照相似性算法,真实流出在0-1时是递减的,所以我们用“-”,0-2时是递


增的,所以我们用“+”。仿真流出数据也按照这个逻辑。我们会发现0-2时真实流出和仿真流出不一致,因此我们得出排序相似性是83%。




依据这样的计算方式,我们对某个城市某一时刻的数据做逼真度的分析,会得出两个结果。时间维度上站点每小时的真实流出与仿真流出,在24小时的排序相似度达到93%;站点维度上排序相似度达到85%。


因此我们得出,真实流出跟仿真流出的数据具有高度的相似性。





页: [1]
查看完整版本: 记一次大厂的调度算法评测与仿真系统(中)