0

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

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

我为每个航班设置了持续时间并成功关联了 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:00 开始 12/01/13 并于 13/01/13 于 14h 到达 Flight2 于 13/01/13 于 18:00 开始并到达2013 年 13 月 1 日 20 点

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

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

谢谢你回答家伙;)!

4

1 回答 1

0

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

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

于 2013-03-05T21:50:02.583 回答