本周我发现了这个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 ...)
谢谢你回答家伙;)!
答案 0 :(得分:0)
如果您试图最小化总行程时间,那么这确实不是最短路径问题,而是一种不同类型的离散优化问题。 JUNG没有提供离散优化问题的一般求解器。
即使你试图最小化飞行时间(也就是在空中花费的时间),你需要能够在每一步过滤图形(更准确地说,是外向边缘),因为只有那些飞行在前一航班到达后离开是相关的,即本地拓扑是时间的函数。