DEV Community

Namsi Lydia
Namsi Lydia

Posted on

Understanding Use Of Shortest Path Algorithm In Apache Age

What is shortest path algorithm?
In graph theory, the shortest path problem is the problem of finding a path between two vertices (or nodes) in a graph such that the sum of the weights of its constituent edges is minimized.

The problem of finding the shortest path between two intersections on a road map may be modeled as a special case of the shortest path problem in graphs, where the vertices correspond to intersections and the edges correspond to road segments, each weighted by the length of the segment.

Shortest path algorithm is widely applied in various domains, including transportation networks, social networks, and network routing. Apache AGE provides an efficient implementation of the shortest path algorithm, allowing users to find the most optimal path between nodes in their graph data.

Benefits of using shortest path algorithm in Apache AGE

Scalability
Shortest path algorithms, when implemented in Apache AGE, contribute to the scalability of the system. As the size of the graph grows, the algorithm can still provide efficient pathfinding without a significant degradation in performance.

Optimized Query Performance
Use of the shortest path algorithm allows for optimized query performance, especially when dealing with large and complex graphs. It minimizes the computational cost by efficiently navigating the graph structure to find the shortest path.

Real-time Response
Shortest path algorithm enable real-time responses to queries related to pathfinding. This is particularly valuable in scenarios where quick decision-making based on the latest data is critical.

Step to take when implementing shortest path algorithm in Apache Age using dijkstra algorithm

Requirements needed for dijkstra implementation in python include:

sudo apt-get update
sudo apt-get install python3-dev libpq-dev
pip install --no-binary :all: psycopg2
Enter fullscreen mode Exit fullscreen mode

1.Set up Apache Age
install Apache Age and its python library client and this can be done as follows:

pip install apache-age apache-age-python-client
Enter fullscreen mode Exit fullscreen mode

next after installing apache age and its python client library we need to install the age-dijkstra library and this is done as follows:

pip install apache-age-dijkstra
pip install antlr4-python3-runtime==4.9.3
Enter fullscreen mode Exit fullscreen mode

2.Create your graph database connection

con = Age_Dijkstra()
con.connect(
    host="localhost",       # default is "172.17.0.2" 
    port="5432",            # default is "5432"
    dbname="databaseName",    # default is "postgres"
    user="usernamePostgres",    # default is "postgres"
    password="password password",  # default is "agens"
    printMessage = True     # default is False
)
Enter fullscreen mode Exit fullscreen mode

3.Define Vertex and Edge Properties:
Vertices: Store vertex IDs and any additional properties (e.g., name, location).
Edges: Store source and target vertex IDs, weight, and any other properties.

4. Load Data into the Graph:
Vertices: Store vertex IDs and any additional properties (e.g., name, location).
Edges: Store source and target vertex IDs, weight, and any other properties.

sample use case code implementation of dijkstra algorithm in Apache Age.


from age_dijkstra import Age_Dijkstra, Graph

con = Age_Dijkstra()
con.connect(
    host="localhost",       # default is "172.17.0.2" 
    port="5430",            # default is "5432"
    dbname="postgresDB",    # default is "postgres"
    user="postgresUser",    # default is "postgres"
    password="postgresPW",  # default is "agens"
    printMessage = True     # default is False
)

con.create_graph( graph_name = "states_graph")

con.set_vertices(
    graph_name = "states_graph", 
    label="County", 
    property={"name" : "Nairobi",}
    )
con.set_vertices(
    graph_name = "states_graph", 
    label="County", 
    property={"name" : "Mombasa",}
    )
con.set_vertices(
    graph_name = "states_graph", 
    label="County", 
    property={"name" : "Kisumu",}
    )
con.set_vertices(
    graph_name = "states_graph", 
    label="County", 
    property={"name" : "Nakuru",}
    )

con.set_edge( 
    graph_name = "states_graph", 
    label1="Country", 
    prop1={"name" : "Nairobi",}, 
    label2="County", 
    prop2={"name" : "Mombasa"}, 
    edge_label = "Neighbour", 
    edge_prop = {"distance":"483.5km"}
)
con.set_edge( 
    graph_name = "states_graph", 
    label1="County", 
    prop1={"name" : "Kisumu",}, 
    label2="County", 
    prop2={"name" : "Kisii"}, 
    edge_label = "Neighbour", 
    edge_prop = {"distance":"115.2km"}
)
con.set_edge( 
    graph_name = "states_graph", 
    label1="County", 
    prop1={"name" : "Kisumu",}, 
    label2="County", 
    prop2={"name" : "Seme"}, 
    edge_label = "Neighbour", 
    edge_prop = {"distance":"72km"}
)
con.set_edge( 
    graph_name = "states_graph", 
    label1="County", 
    prop1={"name" : "Mombasa",}, 
    label2="County", 
    prop2={"name" : "Machakos"}, 
    edge_label = "Neighbour", 
    edge_prop = {"distance":"443.3km"}
)
con.set_edge( 
    graph_name = "states_graph", 
    label1="County", 
    prop1={"name" : "Nairobi",}, 
    label2="County", 
    prop2={"name" : "Nakuru"}, 
    edge_label = "Neighbour", 
    edge_prop = {"distance":"161km"}
)
con.set_edge( 
    graph_name = "states_graph", 
    label1="County", 
    prop1={"name" : "Kiambu",}, 
    label2="County", 
    prop2={"name" : "Nakuru"}, 
    edge_label = "Neighbour", 
    edge_prop = {"distance":"155.7km"}
)

edges = con.get_all_edge()
nodes = []
for x in con.get_all_vertices():
    nodes.append(x['County'])

init_graph = {}
for node in nodes:
    init_graph[node] = {}

for edge in edges :
    v1 = edge['v1']['County']
    v2 = edge['v2']['name']
    dist = int(edge['e']['distance'])
    init_graph
    init_graph[v1][v2] = dist

graph = Graph(nodes, init_graph)
previous_nodes, shortest_path = Graph.dijkstra_algorithm(graph=graph, start_node="Dhaka")
Graph.print_shortest_path(previous_nodes, shortest_path, start_node="Dhaka", target_node="Chittagong")

con.delete_graph( graph_name = "states_graph")
con.close_connection()
Enter fullscreen mode Exit fullscreen mode

the code sample above will print output of the distance between the various counties available.

Conclusion
The sample code implementation is one of the few ways you can implement dijkstra algorithm in Apache Age using python as your programming language.

Top comments (0)