Skip to main content

No project description provided

Project description

modgeosys-graph-algorithms: Graph Algorithms

A repository for [hopefully] clean, readable, and easily-called implementations of some navigation, path planning, and obstacle avoidance algorithms I will be using in the near future, written in modern Python and/or Rust with Python bindings. I'll be adding more algorithm implementations over time.

Algorithms: Currently implemented + planned

  • A* - Graph path search algorithm.
    • Code-complete in both Python and Rust.
    • Needs a more thorough test suite.
    • Needs Python bindings for Rust implementation.
  • Prim's algorithm - Prim's Minimum Spanning Tree algorithm.
    • Code-complete in Python.
    • Tested on toy dataset in test suite.
    • Tested on larger sample (pickled) dataset, not yet incorporated into test suite.
    • Needs a Rust implementation and corresponding Python bindings.

Usage

A*

import pickle
from pprint import pprint

from modgeosys.graph.types import Node, Edge, Graph
from modgeosys.graph.distance import manhattan_distance, euclidean_distance
from modgeosys.graph.a_star import a_star

# Define a toy graph.
nodes = [Node(coordinates=(0.0, 0.0)),
         Node(coordinates=(0.0, 2.0)),
         Node(coordinates=(1.0, 0.0)),
         Node(coordinates=(2.0, 1.0)),
         Node(coordinates=(2.0, 3.0))]
edges = (Edge(weight=2.0, node_indices=frozenset((0, 1))),
         Edge(weight=1.0, node_indices=frozenset((0, 2))),
         Edge(weight=1.0, node_indices=frozenset((2, 3))),
         Edge(weight=3.0, node_indices=frozenset((1, 4))),
         Edge(weight=1.0, node_indices=frozenset((3, 4))))
toy_graph = Graph(nodes=nodes, edges=edges)

# Load a bigger graph from a pickle file.
with open('python/data/graph.pickle', 'rb') as pickled_sample_larger_graph_file:
    larger_graph = pickle.load(pickled_sample_larger_graph_file)

# Call the A* function.
toy_a_star_path = a_star(graph=toy_graph, start_node_index=0, goal_node_index=4, heuristic_distance=manhattan_distance)
print(f'Toy A* Path:')
pprint(toy_a_star_path)
print()
larger_a_star_path = a_star(graph=larger_graph, start_node_index=0, goal_node_index=4, heuristic_distance=manhattan_distance)
print(f'Large A* Path:')
pprint(larger_a_star_path)

Prim's algorithm

import pickle

from modgeosys.graph.types import Node, Edge, Graph
from modgeosys.graph.prim import prim

# Define a toy graph.
nodes = [Node(coordinates=(0.0, 0.0)),
         Node(coordinates=(0.0, 2.0)),
         Node(coordinates=(1.0, 0.0)),
         Node(coordinates=(2.0, 1.0)),
         Node(coordinates=(2.0, 3.0))]
edges = (Edge(weight=2.0, node_indices=frozenset((0, 1))),
         Edge(weight=1.0, node_indices=frozenset((0, 2))),
         Edge(weight=1.0, node_indices=frozenset((2, 3))),
         Edge(weight=3.0, node_indices=frozenset((1, 4))),
         Edge(weight=1.0, node_indices=frozenset((3, 4))))
toy_graph = Graph(nodes=nodes, edges=edges)

# Load a bigger graph from a pickle file.
with open('python/data/graph.pickle', 'rb') as pickled_sample_larger_graph_file:
    larger_graph = pickle.load(pickled_sample_larger_graph_file)

# Call the Prim function.
toy_minimum_spanning_tree = prim(graph=toy_graph, start_node_index=0)
print('Toy Prim Minimum Spanning Tree:')
print(toy_minimum_spanning_tree)
print()
larger_minimum_spanning_tree = prim(graph=larger_graph, start_node_index=0)
print('Prim Minimum Spanning Tree:')
print(larger_minimum_spanning_tree)

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

modgeosys_graph_algorithms-0.2.0.tar.gz (8.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

modgeosys_graph_algorithms-0.2.0-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

File details

Details for the file modgeosys_graph_algorithms-0.2.0.tar.gz.

File metadata

  • Download URL: modgeosys_graph_algorithms-0.2.0.tar.gz
  • Upload date:
  • Size: 8.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.10.12 Linux/6.5.0-26-generic

File hashes

Hashes for modgeosys_graph_algorithms-0.2.0.tar.gz
Algorithm Hash digest
SHA256 7ebab05ba0694d0de62802ce4e7333c8fd96644c5288490fdbc30611271edb3a
MD5 3e9f0e6e6a08a9fff3727089f16064c2
BLAKE2b-256 dbda3745dcbdb4099ec78980cdd47b9a4bc2b2517d053bc2ddb6e7e056605c66

See more details on using hashes here.

File details

Details for the file modgeosys_graph_algorithms-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for modgeosys_graph_algorithms-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c2c250de791c5a853ce8f3c6b74f179cc298950a99d6bfdc2f6c0e565a3c0505
MD5 480e34f4890d6a705564cc31fbbeea1d
BLAKE2b-256 5a9b2c6d4102e0ed718d6061fc1776e852b1cdbdc06e42ff52b44e2f7d67e734

See more details on using hashes here.

Supported by

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