我正在为我国家的所有公共交通工具(公共汽车/火车/航空)制作旅程计划器(或一般时间表应用程序)。
该项目的状态处于中点,现在我很难完成应用程序中更困难的部分。
描述当前状态:
数据存储在 MySQL 数据库中,建模为 GTFS(通用 (Google) Transit Feed Specification)
我通过简单地查询数据库来获得直接路由(两个临时表的连接,我发现它足够高效)
目前它是用 PHP 完成的,但如果需要,我可以用 Java 重新处理它
因此,当两点之间存在直接连接时,一切都很好。困难的部分是在没有直达线路的情况下完成完整的旅程。
假设用户想要从 to 出行city A
,city D
但由于这些城市之间没有直达线路,他需要经过city B
and city C
。
如何获得针对这种情况的优化路线和换乘方式?
到目前为止,我的想法倾向于使用图表,但在这种情况下,我需要一个Time-Dependant Directed Weighted Multigraph,我目前真的不知道如何实现Time-Dependant部分。
可以通过使用或算法来获得路线Dijkstra
,但是由于在不同的时间有出发,我不确定如何实现,以获得最佳解决方案。我需要考虑一段的持续时间(A 到 B,B 到 C),等待转移的时间,也许还有距离。A*
Floyd–Warshall
只是为了澄清,我不需要一个结果。city A
我想获取所有可以让用户到达的出发点的每日列表,city D
如果需要,可以进行转移。
基本上,我想要得到的是这样的东西(取自保加利亚铁路,或就此而言,任何一个铁路站点),一个选定日期的所有班次列表,如果需要的话,从转机Sofia
到Kystendil
转机:Radomir
关于图形求解部分,我可以使用jGraphT在 Java 中创建应用程序,缓存结果(它们可能每隔几个月更改一次),然后在 PHP 中使用它们(或通过 PHP 调用应用程序)。
如果我不够清楚,请询问。
我知道这样做了很多次(几乎所有火车网站都有解决方案),但我什至不知道要搜索哪些术语。
所以,我的问题是:有人可以指导我如何解决这类问题吗?
或者至少我应该通过哪些术语来寻找想法以及应该如何去做。
也许对 StackExchange 网络中的其他站点有一些建议。
谢谢你。