Search in sources :

Example 26 with GraphBuilder

use of com.graphhopper.storage.GraphBuilder in project graphhopper by graphhopper.

the class EdgeBasedTarjanSCCTest method tree.

@Test
public void tree() {
    GraphHopperStorage g = new GraphBuilder(em).create();
    // 0 - 1 - 2 - 4 - 5
    // |    \- 6 - 7
    // 3        \- 8
    GHUtility.setSpeed(60, true, true, encoder, g.edge(0, 1).setDistance(1));
    GHUtility.setSpeed(60, true, true, encoder, g.edge(1, 2).setDistance(1));
    GHUtility.setSpeed(60, true, true, encoder, g.edge(1, 3).setDistance(1));
    GHUtility.setSpeed(60, true, true, encoder, g.edge(2, 4).setDistance(1));
    GHUtility.setSpeed(60, true, true, encoder, g.edge(2, 6).setDistance(1));
    GHUtility.setSpeed(60, true, true, encoder, g.edge(4, 5).setDistance(1));
    GHUtility.setSpeed(60, true, true, encoder, g.edge(6, 7).setDistance(1));
    GHUtility.setSpeed(60, true, true, encoder, g.edge(6, 8).setDistance(1));
    ConnectedComponents result = EdgeBasedTarjanSCC.findComponentsRecursive(g, fwdAccessFilter, false);
    assertEquals(16, result.getEdgeKeys());
    assertEquals(1, result.getTotalComponents());
    assertEquals(1, result.getComponents().size());
    assertTrue(result.getSingleEdgeComponents().isEmpty());
    assertEquals(result.getComponents().get(0), result.getBiggestComponent());
    assertEquals(IntArrayList.from(1, 3, 7, 11, 10, 6, 9, 13, 12, 15, 14, 8, 2, 5, 4, 0), result.getComponents().get(0));
}
Also used : ConnectedComponents(com.graphhopper.routing.subnetwork.EdgeBasedTarjanSCC.ConnectedComponents) GraphBuilder(com.graphhopper.storage.GraphBuilder) GraphHopperStorage(com.graphhopper.storage.GraphHopperStorage) RepeatedTest(org.junit.jupiter.api.RepeatedTest) Test(org.junit.jupiter.api.Test)

Example 27 with GraphBuilder

use of com.graphhopper.storage.GraphBuilder in project graphhopper by graphhopper.

the class EdgeBasedTarjanSCCTest method withTurnRestriction.

@Test
public void withTurnRestriction() {
    GraphHopperStorage g = new GraphBuilder(em).create();
    // here 0-1-2-3 would be a circle and thus belong to same connected component. but if there is a
    // turn restriction for going 0->2->3 this splits the graph into multiple components
    // 0->1
    // |  |
    // 3<-2->4
    // edge-keys 0,1
    GHUtility.setSpeed(60, true, false, encoder, g.edge(0, 1).setDistance(1));
    // edge-keys 2,3
    GHUtility.setSpeed(60, true, false, encoder, g.edge(1, 2).setDistance(1));
    // edge-keys 4,5
    GHUtility.setSpeed(60, true, false, encoder, g.edge(2, 3).setDistance(1));
    // edge-keys 6,7
    GHUtility.setSpeed(60, true, false, encoder, g.edge(3, 0).setDistance(1));
    // edge-keys 8,9
    GHUtility.setSpeed(60, true, false, encoder, g.edge(2, 4).setDistance(1));
    // first lets check what happens without turn costs
    ConnectedComponents result = EdgeBasedTarjanSCC.findComponentsRecursive(g, fwdAccessFilter, false);
    assertEquals(7, result.getTotalComponents());
    assertEquals(1, result.getComponents().size());
    assertEquals(IntArrayList.from(6, 4, 2, 0), result.getBiggestComponent());
    assertEquals(6, result.getSingleEdgeComponents().cardinality());
    for (IntCursor c : IntArrayList.from(1, 3, 5, 7, 8, 9)) {
        assertTrue(result.getSingleEdgeComponents().get(c.value));
    }
    // now lets try with a restricted turn
    result = EdgeBasedTarjanSCC.findComponentsRecursive(g, (prev, edge) -> fwdAccessFilter.accept(prev, edge) && !(prev == 1 && edge.getBaseNode() == 2 && edge.getEdge() == 2), false);
    // none of the edges are strongly connected anymore!
    assertEquals(10, result.getTotalComponents());
    assertEquals(0, result.getComponents().size());
    assertEquals(IntArrayList.from(), result.getBiggestComponent());
    assertEquals(10, result.getSingleEdgeComponents().cardinality());
    for (IntCursor c : IntArrayList.from(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)) {
        assertTrue(result.getSingleEdgeComponents().get(c.value));
    }
}
Also used : RepeatedTest(org.junit.jupiter.api.RepeatedTest) IntCursor(com.carrotsearch.hppc.cursors.IntCursor) TarjanSCCTest.buildComponentSet(com.graphhopper.routing.subnetwork.TarjanSCCTest.buildComponentSet) ConnectedComponents(com.graphhopper.routing.subnetwork.EdgeBasedTarjanSCC.ConnectedComponents) CarFlagEncoder(com.graphhopper.routing.util.CarFlagEncoder) Set(java.util.Set) Random(java.util.Random) GHUtility(com.graphhopper.util.GHUtility) EncodingManager(com.graphhopper.routing.util.EncodingManager) GraphBuilder(com.graphhopper.storage.GraphBuilder) Test(org.junit.jupiter.api.Test) GraphHopperStorage(com.graphhopper.storage.GraphHopperStorage) IntWithArray(com.graphhopper.routing.subnetwork.TarjanSCCTest.IntWithArray) IntArrayList(com.carrotsearch.hppc.IntArrayList) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) FlagEncoder(com.graphhopper.routing.util.FlagEncoder) com.graphhopper.routing.util(com.graphhopper.routing.util) ConnectedComponents(com.graphhopper.routing.subnetwork.EdgeBasedTarjanSCC.ConnectedComponents) IntCursor(com.carrotsearch.hppc.cursors.IntCursor) GraphBuilder(com.graphhopper.storage.GraphBuilder) GraphHopperStorage(com.graphhopper.storage.GraphHopperStorage) RepeatedTest(org.junit.jupiter.api.RepeatedTest) Test(org.junit.jupiter.api.Test)

Example 28 with GraphBuilder

use of com.graphhopper.storage.GraphBuilder in project graphhopper by graphhopper.

the class EdgeBasedTarjanSCCTest method linearSimple.

@Test
public void linearSimple() {
    GraphHopperStorage g = new GraphBuilder(em).create();
    // 0 - 1 - 2
    GHUtility.setSpeed(60, true, true, encoder, g.edge(0, 1).setDistance(1));
    GHUtility.setSpeed(60, true, true, encoder, g.edge(1, 2).setDistance(1));
    ConnectedComponents result = EdgeBasedTarjanSCC.findComponentsRecursive(g, fwdAccessFilter, false);
    assertEquals(4, result.getEdgeKeys());
    assertEquals(1, result.getTotalComponents());
    assertEquals(1, result.getComponents().size());
    assertTrue(result.getSingleEdgeComponents().isEmpty());
    assertEquals(result.getComponents().get(0), result.getBiggestComponent());
    assertEquals(IntArrayList.from(1, 3, 2, 0), result.getComponents().get(0));
}
Also used : ConnectedComponents(com.graphhopper.routing.subnetwork.EdgeBasedTarjanSCC.ConnectedComponents) GraphBuilder(com.graphhopper.storage.GraphBuilder) GraphHopperStorage(com.graphhopper.storage.GraphHopperStorage) RepeatedTest(org.junit.jupiter.api.RepeatedTest) Test(org.junit.jupiter.api.Test)

Example 29 with GraphBuilder

use of com.graphhopper.storage.GraphBuilder in project graphhopper by graphhopper.

the class EdgeBasedTarjanSCCTest method linearSingle.

@Test
public void linearSingle() {
    GraphHopperStorage g = new GraphBuilder(em).create();
    // 0 - 1
    GHUtility.setSpeed(60, true, true, encoder, g.edge(0, 1).setDistance(1));
    ConnectedComponents result = EdgeBasedTarjanSCC.findComponentsRecursive(g, fwdAccessFilter, false);
    assertEquals(2, result.getEdgeKeys());
    assertEquals(1, result.getTotalComponents());
    assertEquals(1, result.getComponents().size());
    assertTrue(result.getSingleEdgeComponents().isEmpty());
    assertEquals(result.getComponents().get(0), result.getBiggestComponent());
    assertEquals(IntArrayList.from(1, 0), result.getComponents().get(0));
}
Also used : ConnectedComponents(com.graphhopper.routing.subnetwork.EdgeBasedTarjanSCC.ConnectedComponents) GraphBuilder(com.graphhopper.storage.GraphBuilder) GraphHopperStorage(com.graphhopper.storage.GraphHopperStorage) RepeatedTest(org.junit.jupiter.api.RepeatedTest) Test(org.junit.jupiter.api.Test)

Example 30 with GraphBuilder

use of com.graphhopper.storage.GraphBuilder in project graphhopper by graphhopper.

the class EdgeBasedTarjanSCCTest method linearBidirectionalEdge.

@Test
public void linearBidirectionalEdge() {
    GraphHopperStorage g = new GraphBuilder(em).create();
    // 0 -> 1 - 2 <- 3
    GHUtility.setSpeed(60, true, false, encoder, g.edge(0, 1).setDistance(1));
    GHUtility.setSpeed(60, true, true, encoder, g.edge(1, 2).setDistance(1));
    GHUtility.setSpeed(60, true, false, encoder, g.edge(3, 2).setDistance(1));
    ConnectedComponents result = EdgeBasedTarjanSCC.findComponentsRecursive(g, fwdAccessFilter, false);
    assertEquals(6, result.getEdgeKeys());
    assertEquals(5, result.getTotalComponents());
    // a single bidirectional edge is treated as a 'real' component with two edge-keys. this is not nearly as
    // common as the single-edge-key components so no real need to do a special treatment for these as well.
    assertEquals(1, result.getComponents().size());
    assertEquals(4, result.getSingleEdgeComponents().cardinality());
    assertEquals(result.getComponents().get(0), result.getBiggestComponent());
}
Also used : ConnectedComponents(com.graphhopper.routing.subnetwork.EdgeBasedTarjanSCC.ConnectedComponents) GraphBuilder(com.graphhopper.storage.GraphBuilder) GraphHopperStorage(com.graphhopper.storage.GraphHopperStorage) RepeatedTest(org.junit.jupiter.api.RepeatedTest) Test(org.junit.jupiter.api.Test)

Aggregations

GraphBuilder (com.graphhopper.storage.GraphBuilder)98 Test (org.junit.jupiter.api.Test)60 Graph (com.graphhopper.storage.Graph)48 GraphHopperStorage (com.graphhopper.storage.GraphHopperStorage)40 NodeAccess (com.graphhopper.storage.NodeAccess)30 ShortestWeighting (com.graphhopper.routing.weighting.ShortestWeighting)22 CarFlagEncoder (com.graphhopper.routing.util.CarFlagEncoder)21 EncodingManager (com.graphhopper.routing.util.EncodingManager)19 Test (org.junit.Test)16 FlagEncoder (com.graphhopper.routing.util.FlagEncoder)15 RepeatedTest (org.junit.jupiter.api.RepeatedTest)14 ConnectedComponents (com.graphhopper.routing.subnetwork.EdgeBasedTarjanSCC.ConnectedComponents)12 Dijkstra (com.graphhopper.routing.Dijkstra)10 Path (com.graphhopper.routing.Path)10 ReaderWay (com.graphhopper.reader.ReaderWay)9 EdgeIteratorState (com.graphhopper.util.EdgeIteratorState)8 BeforeEach (org.junit.jupiter.api.BeforeEach)7 FastestWeighting (com.graphhopper.routing.weighting.FastestWeighting)6 IntsRef (com.graphhopper.storage.IntsRef)6 Random (java.util.Random)6