a-starpgrouting

Custom heuristic on pgrouting pgr_astar function


So i'm using pgrouting to compute shortest path on transit network, The cost of my graph is time, but the graph isn't "time dependent" - which means my arcs are available at every hour everyday, the cost is not the distance between station but the time it take to move from one point to another. I figured by doing the computation that pgr_astar (and even pgr_bdAstar) is slower than pgr_dijkstra. I thought it might be a heuristic problem. My questions is :

Is there a way to edit pgr_astar to insert your own heuristi


Solution

  • It's open-source, so yes you can, as long as you don't mind some C/C++: here. Still, what you likely want is one of the 6 built-in options:

                 switch (m_heuristic) {
                     case 0:
                         current = 0;
                         break;
                     case 1:
                         current = std::fabs((std::max)(dx, dy)) * m_factor;
                         break;
                     case 2:
                         current = std::fabs((std::min)(dx, dy)) * m_factor;
                         break;
                     case 3:
                         current = (dx * dx + dy * dy) * m_factor * m_factor;
                         break;
                     case 4:
                         current = std::sqrt(dx * dx + dy * dy) * m_factor;
                         break;
                     case 5:
                         current = (std::fabs(dx) + std::fabs(dy)) * m_factor;
                         break;
                     default:
                         current = 0;
                 }
    

    All of which are fairly simple as it is.