JGraphT具有数百万动态节点/边缘的良好性能/存储



我试图在一个有一百万个节点的图中找到最短路径。平均而言,每个节点可能有20条有向边,因此它相当可观。

除此之外,是否有方法实时(动态(调整边缘权重?

我的意思是,我希望能够通过时间参数来路由图。根据该时间参数,它会将边权重乘以一定的量。

您可能有以下数据:

  • 节点A
  • 节点B
  • 重量为5的边缘1(A至B(
  • 具有重量3的边缘2(也从A到B(

我可以调用一个函数:

graph.getShortestPath(A, B, 8) // From node A to B at 8am
graph.getShortestPath(A, B, 16) // From node A to B at 4pm

时间参数会影响边权重。当一条边被遍历时,我想确定那条边的位置,并将它的权重乘以一个取决于时间参数的因子。

Java中是否有一个简单的JGraphT示例(或者更好的Kotlin(可以说明这一点?

在如此大的图上进行依赖时间的路由并不是一件容易的事,尤其是当您正在寻找动态更新时。这将需要高度复杂的算法和存储方法。毫不奇怪,关于这个话题的学术文献琳琅满目。

对于jgrapht,首先阅读用户指南。接下来,看看目前包含在jgrapht中的各种最短路径算法。有关如何使用它们的示例,请参阅测试类。您可能想要使用"收缩层次"算法之一。执行算法的初始化需要支付初始成本,但随后在大型图上进行的最短路径查询确实很快。为了更快地存储图形,您可能需要在jgrapht-opt包中尝试优化的稀疏图形表示。

目前,没有一种算法提供一些增量机制来处理动态权重变化。此外,与时间相关的算法目前还不包括在内。你可以做的是为你的图表创建几个时间快照,例如每15分钟一次的行驶速度快照。当计算从9.05开始的路线的最短路径时,您将使用9.15快照来近似旅行时间。对于快照,请使用AsWeightedGraph视图,通过该视图可以提供同一基础图的不同加权视图。

最新更新