public void doWork() { if (minNetworkSize <= 0 && minOneWayNetworkSize <= 0) return; logger.info("start finding subnetworks (min:" + minNetworkSize + ", min one way:" + minOneWayNetworkSize + ") " + Helper.getMemInfo()); int unvisitedDeadEnds = 0; for (FlagEncoder encoder : encoders) { // mark edges for one vehicle as inaccessible PrepEdgeFilter filter = new PrepEdgeFilter(encoder); if (minOneWayNetworkSize > 0) unvisitedDeadEnds += removeDeadEndUnvisitedNetworks(filter); List<IntArrayList> components = findSubnetworks(filter); keepLargeNetworks(filter, components); subnetworks = Math.max(components.size(), subnetworks); logger.info(components.size() + " subnetworks found for " + encoder + ", " + Helper.getMemInfo()); } markNodesRemovedIfUnreachable(); logger.info("optimize to remove subnetworks (" + subnetworks + "), " + "unvisited-dead-end-nodes (" + unvisitedDeadEnds + "), " + "maxEdges/node (" + maxEdgesPerNode.get() + ")"); ghStorage.optimize(); }
@Test public void testKeepLargestNetworks() { GraphHopperStorage g = createSubnetworkTestStorage(); PrepEdgeFilter filter = new PrepEdgeFilter(carFlagEncoder); PrepareRoutingSubnetworks instance = new PrepareRoutingSubnetworks(g, Collections.singletonList(carFlagEncoder)); List<IntArrayList> components = instance.findSubnetworks(filter); assertEquals(3, components.size()); int removedEdges = instance.keepLargeNetworks(filter, components); assertEquals(8, removedEdges); instance.markNodesRemovedIfUnreachable(); g.optimize(); assertEquals(8, g.getNodes()); assertEquals(Arrays.<String>asList(), GHUtility.getProblems(g)); components = instance.findSubnetworks(filter); assertEquals(1, components.size()); }
@Test public void testRemoveDeadEndUnvisitedNetworks() { GraphHopperStorage g = createDeadEndUnvisitedNetworkStorage(em); assertEquals(11, g.getNodes()); PrepareRoutingSubnetworks instance = new PrepareRoutingSubnetworks(g, Collections.singletonList(carFlagEncoder)). setMinOneWayNetworkSize(3); int removed = instance.removeDeadEndUnvisitedNetworks(new PrepEdgeFilter(carFlagEncoder)); assertEquals(3, removed); instance.markNodesRemovedIfUnreachable(); g.optimize(); assertEquals(8, g.getNodes()); }
@Test public void testAddEdgesAfterwards() { GraphHopperStorage g = createDeadEndUnvisitedNetworkStorage(em); assertEquals(11, g.getNodes()); PrepareRoutingSubnetworks instance = new PrepareRoutingSubnetworks(g, Collections.singletonList(carFlagEncoder)). setMinOneWayNetworkSize(3); int removed = instance.removeDeadEndUnvisitedNetworks(new PrepEdgeFilter(carFlagEncoder)); assertEquals(3, removed); instance.markNodesRemovedIfUnreachable(); g.optimize(); assertEquals(8, g.getNodes()); assertTrue(isConsistent(g)); g.edge(7,8); assertTrue(isConsistent(g)); }
public void doWork() { if (minNetworkSize <= 0 && minOneWayNetworkSize <= 0) return; logger.info("start finding subnetworks (min:" + minNetworkSize + ", min one way:" + minOneWayNetworkSize + ") " + Helper.getMemInfo()); int unvisitedDeadEnds = 0; for (FlagEncoder encoder : encoders) { // mark edges for one vehicle as inaccessible PrepEdgeFilter filter = new PrepEdgeFilter(encoder); if (minOneWayNetworkSize > 0) unvisitedDeadEnds += removeDeadEndUnvisitedNetworks(filter); List<IntArrayList> components = findSubnetworks(filter); keepLargeNetworks(filter, components); subnetworks = Math.max(components.size(), subnetworks); logger.info(components.size() + " subnetworks found for " + encoder + ", " + Helper.getMemInfo()); } markNodesRemovedIfUnreachable(); logger.info("optimize to remove subnetworks (" + subnetworks + "), " + "unvisited-dead-end-nodes (" + unvisitedDeadEnds + "), " + "maxEdges/node (" + maxEdgesPerNode.get() + ")"); ghStorage.optimize(); }
public void doWork() { if (minNetworkSize <= 0 && minOneWayNetworkSize <= 0) return; int unvisitedDeadEnds = 0; for (FlagEncoder encoder : encoders) { // mark edges for one vehicle as inaccessible PrepEdgeFilter filter = new PrepEdgeFilter(encoder); if (minOneWayNetworkSize > 0) unvisitedDeadEnds += removeDeadEndUnvisitedNetworks(filter); List<IntArrayList> components = findSubnetworks(filter); keepLargeNetworks(filter, components); subnetworks = Math.max(components.size(), subnetworks); logger.info(components.size() + " subnetworks found for " + encoder + ", " + Helper.getMemInfo()); } markNodesRemovedIfUnreachable(); logger.info("optimize to remove subnetworks (" + subnetworks + "), " + "unvisited-dead-end-nodes (" + unvisitedDeadEnds + "), " + "maxEdges/node (" + maxEdgesPerNode.get() + ")"); ghStorage.optimize(); }