Skip to main content

path finding algorithms in python

Project description

PathFind

Unittest License Package version Supported Python versions

Implementation of path finding algorithms including:

  • Depth-First Search (DFS)
  • Breadth-First Search (BFS)
  • Dijkstra Search
  • Greedy Best-First Search
  • A*
  • D*-Lite
  • Jump Point Search (JPS)

Install

pip install pathfind

Basic Usage

Define a graph to transform graph from a matrix, then find a path from start point to end point. The value in m indicates a cost at that node. Note that the -1 in m represents the cost in that node is infinity, which means this node is not connected to others.

import pathfind

m = [
    [1, 1, 1, 1, 1],
    [1, 2, -1, 1, 1],
    [1, 1, 1, 1, 1],
    [8, 3, 1, 1, 1],
    [1, 1, 1, 1, 1],
]
graph = pathfind.transform.matrix2graph(m)
path = pathfind.find(graph, start="4,0", end="0,0")
# ['4,0', '4,1', '3,1', '2,1', '2,0', '1,0', '0,0']

graph.show(trace=path)
drawing

Finder can be changed by passing a string method ("a*", "bfs", "greedy", "dijkstra", "dfs", "d*lite", "jps").

path = pathfind.find(graph, start="2,2", end="0,2", method="bfs")
# ['2,2', '2,1', '1,1', '0,1', '0,2']

graph.show(trace=path)
drawing

Graph setup

Another way to define a graph is to config the edge by give [node1's name, node2's name, cost] pairs.

import pathfind

conf = [
    # [node1's name, node2's name, weight, *back_weight]
    ["n1", "n2", 0.1],
    ["n1", "n3", 0.2],
    ["n2", "n3", 0.3]
]
graph = pathfind.Graph(conf)
graph.show()
drawing

Or you can set edge's and node's details by following way:

import pathfind

my_n0 = pathfind.Node(name="my_n0")  # node name set to "my_n0"
auto_name = pathfind.Node()  # node name automatically set to "n0"
n2 = "n2"  # pass a string to represent node name
e0 = pathfind.Edge(node1=my_n0, node2=auto_name, weight=0.2)
e1 = pathfind.Edge(node1=my_n0, node2=n2, weight=0.1)
e2 = pathfind.Edge(auto_name, n2, weight=0)

g = pathfind.Graph()
g.add_edges([e0, e1, e2])
g.show()
g.edges
"""
{'my_n0:n0': my_n0:n0, 'my_n0:n2': my_n0:n2, 'n0:n2': n0:n2}
"""
drawing

A diagonal grid graph can be generated by following way:

import pathfind

m = [
    [1, 1, 1, 1],
    [1, 1, 1, 1],
    [1, 1, 1, 1],
]
graph = pathfind.transform.matrix2graph(m, diagonal=True)
path = pathfind.find(graph, start="0,0", end="2,3")
# ['0,0', '1,1', '2,2', '2,3']

graph.show(trace=path)
drawing

More examples

More examples and usages can be found in test

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pathfind-0.1.2.tar.gz (19.0 kB view details)

Uploaded Source

Built Distribution

pathfind-0.1.2-py3-none-any.whl (20.4 kB view details)

Uploaded Python 3

File details

Details for the file pathfind-0.1.2.tar.gz.

File metadata

  • Download URL: pathfind-0.1.2.tar.gz
  • Upload date:
  • Size: 19.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.6

File hashes

Hashes for pathfind-0.1.2.tar.gz
Algorithm Hash digest
SHA256 fdbf5d822906b5939cd1eb036f99a6559d1dec7bb009985f6f936aea9816ada2
MD5 88b8de316a83af8eb2b41ee3ba51e905
BLAKE2b-256 7acba32ce22f38b7e21ec95dac3eef79cde472c98a6f8b4cd953e1bb4f3656fa

See more details on using hashes here.

File details

Details for the file pathfind-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: pathfind-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 20.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.6

File hashes

Hashes for pathfind-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 95213d0e50c123245a223439ac93a84fd22a80c4c9254040b183b71b7ebd6019
MD5 08ce0a81912768687cae8dd9172502a1
BLAKE2b-256 3ef08da3ba180886626adbd058508ef87b50d37a384fe8878a18a5d226e6591b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page