JUNG:Custom DijkstraShortestPath

时间:2013-03-02 23:14:10

标签: jung

本周我发现了这个lib,我的第一个项目有效,我模拟了简单的航班预订。

作为边缘,我创建了一个飞行班 作为顶点,我创建了一个机场类

我为每个航班投入了持续时间并成功关联了dijsktra算法(DijkstraShortestPath)

class Airport {
    String name;
}

class Flight {
    String flight;        
    int duration;
}

g = new DirectedSparseMultigraph<Airport, Flight>();
Flight AXXX = new Flight("A57",3);
Flight AYYY = new Flight("A53",1);

ORY = new Airport("ORY");
LYS = new Airport("LYS");

g.addEdge(AXXX, ORY, LYS);
g.addEdge(AYYY, LYS, ORY); 

Transformer<Flight, Integer> wtTransformer = new Transformer<Flight, Integer>() {
        @Override
        public Integer transform(Flight link) {
                return link.duration;                
        }            
    };

DijkstraShortestPath<Airport, Flight> alg = new DijkstraShortestPath(g, wtTransformer);        
Number dist = alg.getDistance(ORY, LYS);

这个简单的案例运作良好,但现在我要计算持续时间为: Flight1从12月1日开始于12:00,并于13/01/13到达14h Flight2于2013年1月13日18:00开始,于2013年1月13日20:00抵达

在这种情况下,我想计算航班的持续时间和航班之间。因为从一个航班到另一个航班的最短路径,我们需要注意在航班之间等待的时间,而不仅仅是飞行时间。 但DiskstraShortestPath仅允许Transformer为:Transformer,因此我无法参考以前的航班计算总持续时间(等待+航班)。

所以我的问题是:对我来说最好的方法是什么? 创建新算法(继承DijsktraShortestPath ...) 创建新的GraphType(继承DirectedSparseMultigraph ...)

谢谢你回答家伙;)!

1 个答案:

答案 0 :(得分:0)

如果您试图最小化总行程时间,那么这确实不是最短路径问题,而是一种不同类型的离散优化问题。 JUNG没有提供离散优化问题的一般求解器。

即使你试图最小化飞行时间(也就是在空中花费的时间),你需要能够在每一步过滤图形(更准确地说,是外向边缘),因为只有那些飞行在前一航班到达后离开是相关的,即本地拓扑是时间的函数。