在 MATSim 中计算最安全的路线
Calculating safest route in MATSim
我对使用 MATSim API 基于 links 的权重计算路线进行交通模拟很感兴趣。每个 link 都有一个安全指数属性,计算出的路线应该代表最安全的路径。 Dijkstra 路由算法计算最短路径。使用它是完美的,只要我能指定算法应该考虑安全指数而不是长度。我不知道是否可以在 MATSim 中进行以及如何进行。或者在 MATSim 中实现的其他路由算法可能更适合。
谢谢!
这应该可以实现您自己的 TravelDisutility-Class。看看界面 org.matsim.core.router.util.TravelDisutility
。可以在 org.matsim.core.router.costcalculators.FreespeedTravelTimeAndDisutility
中找到仅查看自由速度的实现。您可以从这个开始并对其进行调整,以便 getLinkTravelDisutility()
将 return 不是基于速度的值,而是基于您的保存指数。请注意,值必须大于 0
,较小的值(即接近 0)优于较大的值。
我不知道你是如何计算你的安全指数的,但你应该以某种方式通过 link 的长度对其进行归一化。否则,一个长 link 可能比一系列短 link 更受欢迎,即使它们可能都具有相同的安全值。
实现后,您可以使用 Guice 绑定它。在 class org.matsim.run.InitRoutes
中可以找到这方面的示例。然后它应该用于MATSim中的路由。
我对使用 MATSim API 基于 links 的权重计算路线进行交通模拟很感兴趣。每个 link 都有一个安全指数属性,计算出的路线应该代表最安全的路径。 Dijkstra 路由算法计算最短路径。使用它是完美的,只要我能指定算法应该考虑安全指数而不是长度。我不知道是否可以在 MATSim 中进行以及如何进行。或者在 MATSim 中实现的其他路由算法可能更适合。
谢谢!
这应该可以实现您自己的 TravelDisutility-Class。看看界面 org.matsim.core.router.util.TravelDisutility
。可以在 org.matsim.core.router.costcalculators.FreespeedTravelTimeAndDisutility
中找到仅查看自由速度的实现。您可以从这个开始并对其进行调整,以便 getLinkTravelDisutility()
将 return 不是基于速度的值,而是基于您的保存指数。请注意,值必须大于 0
,较小的值(即接近 0)优于较大的值。
我不知道你是如何计算你的安全指数的,但你应该以某种方式通过 link 的长度对其进行归一化。否则,一个长 link 可能比一系列短 link 更受欢迎,即使它们可能都具有相同的安全值。
实现后,您可以使用 Guice 绑定它。在 class org.matsim.run.InitRoutes
中可以找到这方面的示例。然后它应该用于MATSim中的路由。