假设您想从A点到达B点。您使用Google Transit Directions,它会告诉您:
Route 1:
1. Wait 5 minutes
2. Walk from point A to Bus stop 1 for 8 minutes
3. Take bus 69 till stop 2 (15 minues)
4. Wait 2 minutes
5. Take bus 6969 till stop 3(12 minutes)
6. Walk 7 minutes from stop 3 till point B for 3 minutes.
总时间=5等待+40分钟。
Route 2:
1. Wait 10 minutes
2. Walk from point A to Bus stop I for 13 minutes
3. Take bus 96 till stop II (10 minues)
4. Wait 17 minutes
5. Take bus 9696 till stop 3(12 minutes)
6. Walk 7 minutes from stop 3 till point B for 8 minutes.
总时间=10等待+50分钟。
总之,1号公路看起来好多了。然而,实际情况是,69路车因为交通堵塞而晚点了3分钟,结果我错过了6969路车。下一班车6969至少30分钟后到达,这相当于5个等待+70分钟(包括在寒冷或炎热的天气下等待30米)。如果谷歌真的公布了这种可能性,这不是很好吗?我现在的问题是:考虑到时间表的不确定性,显示前三条路线的更好算法是什么?
谢谢!
最佳答案
如果考虑到不确定性,那么就不再有“最佳路线”,而是可以有一个“最佳策略”,将运输总时间最小化;但是,它不能表示为一个线性指令序列,而更像是一个总体计划的形式,即“去X公交车站,等到10:00乘Y公交,如果它没有到达,那就步行到Z站……”这将是出了名的难以呈现给用户的(除了计算成本高之外)。
对于一个固定的指令序列,可以计算出它实际运行的概率;但是用户希望接受的确定性级别是多少呢?你对80%的成功率满意吗?当你错过其中一个连接时,最坏的情况是“纸牌屋”(house of cards)倒下,例如,如果你错过了每两小时一班的火车。
我写了很多年的一个go-a类似的程序来计算芬兰的长途巴士行程,我只是报告了假设每辆巴士都准时的换乘时间。基本上,每一个换乘时间不到15分钟左右的计划都被忽略了,因为它们太冒险了(有时一条路线上每天只有一两辆长途巴士)。