Merge 7542f1a64a into 61464fc2bd
				
					
				
			This commit is contained in:
		
						commit
						0f26319152
					
				@ -13,6 +13,7 @@ namespace osrm::contractor
 | 
			
		||||
 | 
			
		||||
void search(ContractorHeap &heap,
 | 
			
		||||
            const ContractorGraph &graph,
 | 
			
		||||
            const std::vector<bool> &contractable,
 | 
			
		||||
            const unsigned number_of_targets,
 | 
			
		||||
            const int node_limit,
 | 
			
		||||
            const EdgeWeight weight_limit,
 | 
			
		||||
 | 
			
		||||
@ -10,6 +10,7 @@ namespace
 | 
			
		||||
{
 | 
			
		||||
void relaxNode(ContractorHeap &heap,
 | 
			
		||||
               const ContractorGraph &graph,
 | 
			
		||||
               const std::vector<bool> &contractable,
 | 
			
		||||
               const NodeID node,
 | 
			
		||||
               const EdgeWeight node_weight,
 | 
			
		||||
               const NodeID forbidden_node)
 | 
			
		||||
@ -34,6 +35,9 @@ void relaxNode(ContractorHeap &heap,
 | 
			
		||||
        // New Node discovered -> Add to Heap + Node Info Storage
 | 
			
		||||
        if (!toHeapNode)
 | 
			
		||||
        {
 | 
			
		||||
            if (!contractable[to]) {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            heap.Insert(to, to_weight, ContractorHeapData{current_hop, false});
 | 
			
		||||
        }
 | 
			
		||||
        // Found a shorter Path -> Update weight
 | 
			
		||||
@ -49,6 +53,7 @@ void relaxNode(ContractorHeap &heap,
 | 
			
		||||
 | 
			
		||||
void search(ContractorHeap &heap,
 | 
			
		||||
            const ContractorGraph &graph,
 | 
			
		||||
            const std::vector<bool> &contractable,
 | 
			
		||||
            const unsigned number_of_targets,
 | 
			
		||||
            const int node_limit,
 | 
			
		||||
            const EdgeWeight weight_limit,
 | 
			
		||||
@ -80,7 +85,7 @@ void search(ContractorHeap &heap,
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        relaxNode(heap, graph, node, node_weight, forbidden_node);
 | 
			
		||||
        relaxNode(heap, graph, contractable, node, node_weight, forbidden_node);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
} // namespace osrm::contractor
 | 
			
		||||
 | 
			
		||||
@ -138,6 +138,7 @@ void ContractNode(ContractorThreadData *data,
 | 
			
		||||
                  const ContractorGraph &graph,
 | 
			
		||||
                  const NodeID node,
 | 
			
		||||
                  std::vector<EdgeWeight> &node_weights,
 | 
			
		||||
                  const std::vector<bool> &contractable,
 | 
			
		||||
                  ContractionStats *stats = nullptr)
 | 
			
		||||
{
 | 
			
		||||
    auto &heap = data->heap;
 | 
			
		||||
@ -245,12 +246,12 @@ void ContractNode(ContractorThreadData *data,
 | 
			
		||||
        if (RUNSIMULATION)
 | 
			
		||||
        {
 | 
			
		||||
            const int constexpr SIMULATION_SEARCH_SPACE_SIZE = 1000;
 | 
			
		||||
            search(heap, graph, number_of_targets, SIMULATION_SEARCH_SPACE_SIZE, max_weight, node);
 | 
			
		||||
            search(heap, graph, contractable, number_of_targets, SIMULATION_SEARCH_SPACE_SIZE, max_weight, node);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            const int constexpr FULL_SEARCH_SPACE_SIZE = 2000;
 | 
			
		||||
            search(heap, graph, number_of_targets, FULL_SEARCH_SPACE_SIZE, max_weight, node);
 | 
			
		||||
            search(heap, graph, contractable, number_of_targets, FULL_SEARCH_SPACE_SIZE, max_weight, node);
 | 
			
		||||
        }
 | 
			
		||||
        for (auto out_edge : graph.GetAdjacentEdgeRange(node))
 | 
			
		||||
        {
 | 
			
		||||
@ -344,18 +345,20 @@ void ContractNode(ContractorThreadData *data,
 | 
			
		||||
void ContractNode(ContractorThreadData *data,
 | 
			
		||||
                  const ContractorGraph &graph,
 | 
			
		||||
                  const NodeID node,
 | 
			
		||||
                  std::vector<EdgeWeight> &node_weights)
 | 
			
		||||
                  std::vector<EdgeWeight> &node_weights,
 | 
			
		||||
                  const std::vector<bool> &contractable)
 | 
			
		||||
{
 | 
			
		||||
    ContractNode<false>(data, graph, node, node_weights, nullptr);
 | 
			
		||||
    ContractNode<false>(data, graph, node, node_weights, contractable, nullptr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ContractionStats SimulateNodeContraction(ContractorThreadData *data,
 | 
			
		||||
                                         const ContractorGraph &graph,
 | 
			
		||||
                                         const NodeID node,
 | 
			
		||||
                                         std::vector<EdgeWeight> &node_weights)
 | 
			
		||||
                                         std::vector<EdgeWeight> &node_weights,
 | 
			
		||||
                                         const std::vector<bool> &contractable)
 | 
			
		||||
{
 | 
			
		||||
    ContractionStats stats;
 | 
			
		||||
    ContractNode<true>(data, graph, node, node_weights, &stats);
 | 
			
		||||
    ContractNode<true>(data, graph, node, node_weights, contractable, &stats);
 | 
			
		||||
    return stats;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -487,7 +490,7 @@ bool UpdateNodeNeighbours(ContractorNodeData &node_data,
 | 
			
		||||
        if (node_data.contractable[u])
 | 
			
		||||
        {
 | 
			
		||||
            node_data.priorities[u] = EvaluateNodePriority(
 | 
			
		||||
                SimulateNodeContraction(data, graph, u, node_data.weights), node_data.depths[u]);
 | 
			
		||||
                SimulateNodeContraction(data, graph, u, node_data.weights, node_data.contractable), node_data.depths[u]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
@ -627,7 +630,7 @@ std::vector<bool> contractGraph(ContractorGraph &graph,
 | 
			
		||||
                                  auto node = remaining_nodes[x].id;
 | 
			
		||||
                                  BOOST_ASSERT(node_data.contractable[node]);
 | 
			
		||||
                                  node_data.priorities[node] = EvaluateNodePriority(
 | 
			
		||||
                                      SimulateNodeContraction(data, graph, node, node_data.weights),
 | 
			
		||||
                                      SimulateNodeContraction(data, graph, node, node_data.weights, node_data.contractable),
 | 
			
		||||
                                      node_data.depths[node]);
 | 
			
		||||
                              }
 | 
			
		||||
                          });
 | 
			
		||||
@ -688,7 +691,7 @@ std::vector<bool> contractGraph(ContractorGraph &graph,
 | 
			
		||||
                for (auto position = range.begin(), end = range.end(); position != end; ++position)
 | 
			
		||||
                {
 | 
			
		||||
                    const NodeID node = remaining_nodes[position].id;
 | 
			
		||||
                    ContractNode(data, graph, node, node_data.weights);
 | 
			
		||||
                    ContractNode(data, graph, node, node_data.weights, node_data.contractable);
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user