# Path Planning Algorithm in Python

Intelligence is the human species’ strength, and scientists have exploited it to better people’s lives. Artificial intelligence was then invented to augment human intelligence and build and thrive civilizations like never before. AI assists the user in solving challenges of varying complexity. AI can be used to address computational difficulties such as path search problems. Problems require the user to determine a path from one location to another, such as points A to B. Sometimes, the user must map problems to graphs, where nodes represent all possible outcomes.

Assume the user is required to navigate a massive maze. This maze is so large that manually locating the objective would take hours. Furthermore, once the user completes the maze “by foot,” it is supposed to move on to the next one.

Converting any problem into a search problem necessitates six steps:

- A collection of all possible states in which the user could end up.
- The initial and final states.
- The last check (a way to check if the user is at the finished state).
- A series of potential acts (in this case, different directions of movement).
- A function for traversing (a position that may affect the user where it may end up.)
- A series of state-to-state transportation charges. (which correspond to edges in the graph).

## A* Algorithm

A* is a variation of the best-first algorithm that uses heuristic methods to attain optimality and completeness.

When a search algorithm has the assets of optimality, it guarantees that it may locate the best feasible solution, the shortest path to the finish state.

When A* enters a state, it calculates the cost, f(n) (n being the surrounding node), of traveling to all of the neighboring nodes and then enters the node with the lowest f value (n).

The following formula is used to calculate these values:

f(n) =g(n) + h(n)

## Complete Induction

The number of nodes between node ** n** and the finish node

**on the shortest path between the two may be the induction parameter N.**

*s*Base N=0

If there are no nodes amid ** n** and

**, and h(**

*s***) is consistent, the user may use the following equation:**

*n*c(n,s)+h(s)≥h(n)

As

h*(n)=c(n,s)

It can be deduced that,

h∗(n)≥h(n)

In N = k nodes on the closest path from n to s, the user investigates the finish node n’s first successor (node m). Because we know there is a path from m to n and has k-1 nodes, the following equation is correct.

h∗(n)=c(n,m)+h∗(m)≥c(n,m)+h(m)≥h(n)

## Implementation

It is a graph-structured direct implementation of A*. For the sake of easiness and brevity, the heuristic function is set to 1 for all nodes.

An adjacency list is used to denote the graph, with the keys representing graph nodes and the values being a list of edges with the corresponding surrounding nodes.

from collections import deque class Graph:# example of adjacency list (or rather map)# adjacency_list = {# 'A': [('B', 1), ('C', 3), ('D', 7)],# 'B': [('D', 5)],# 'C': [('D', 12)]# }def __init__(self, adjacency_list): self.adjacency_list = adjacency_list def get_neighbors(self, v): return self.adjacency_list[v]# heuristic function with equal values for all nodesdef h(self, n): H = { 'A': 1, 'B': 1, 'C': 1, 'D': 1 } return H[n] def a_star_algorithm(self, start_node, stop_node):# open_list is a list of nodes which have been visited, but who's neighbors# haven't all been inspected, starts off with the start node# closed_list is a list of nodes which have been visited# and who's neighbors have been inspectedopen_list = set([start_node]) closed_list = set([])# g contains current distances from start_node to all other nodes# the default value (if it's not found in the map) is +infinityg = {} g[start_node] = 0# parents contains an adjacency map of all nodesparents = {} parents[start_node] = start_node

As the code runs;

adjacency_list = { 'A': [('B', 1), ('C', 3), ('D', 7)], 'B': [('D', 5)], 'C': [('D', 12)] }

### Output

Path found: ['A', 'B', 'D'] ['A', 'B', 'D']

As a result, the best path from A to D, as determined by A*, is A->B->D.

**Other useful articles:**

- OOP in Python
- Python v2 vs Python v3
- Variables, Data Types, and Syntaxes in Python
- Operators, Booleans, and Tuples
- Loops and Statements in Python
- Python Functions and Modules
- Regular Expressions in Python
- Python Interfaces
- JSON Data and Python
- Pip and its Uses in Python
- File Handling in Python
- Searching and Sorting Algorithms in Python
- System Programming (Pipes &Threads etc.)
- Database Programming in Python
- Debugging with Assertion in Python
- Sockets in Python
- InterOp in Python
- Exception Handling in Python
- Environments in Python
- Foundation of Data Science
- Reinforcement Learning
- Python for AI
- Applied Text Mining in Python
- Python Iterations using Libraries
- NumPy vs SciPy
- Python Array Indexing and Slicing
- PyGame
- PyTorch
- Python & Libraries
- Python with MySQL
- Python with MongoDB
- Path Planning Algorithm in Python