Skip to content

Node

src.python_motion_planning.utils.environment.node.Node

Bases: object

Class for searching nodes.

Parameters:

Name Type Description Default
current tuple

current coordinate

required
parent tuple

coordinate of parent node

None
g float

path cost

0
h float

heuristic cost

0

Examples:

Python Console Session
>>> from env import Node
>>> node1 = Node((1, 0), (2, 3), 1, 2)
>>> node2 = Node((1, 0), (2, 5), 2, 8)
>>> node3 = Node((2, 0), (1, 6), 3, 1)
...
>>> node1 + node2
>>> Node((2, 0), (2, 3), 3, 2)
...
>>> node1 == node2
>>> True
...
>>> node1 != node3
>>> True
Source code in src\python_motion_planning\utils\environment\node.py
Python
class Node(object):
    """
    Class for searching nodes.

    Parameters:
        current (tuple): current coordinate
        parent (tuple): coordinate of parent node
        g (float): path cost
        h (float): heuristic cost

    Examples:
        >>> from env import Node
        >>> node1 = Node((1, 0), (2, 3), 1, 2)
        >>> node2 = Node((1, 0), (2, 5), 2, 8)
        >>> node3 = Node((2, 0), (1, 6), 3, 1)
        ...
        >>> node1 + node2
        >>> Node((2, 0), (2, 3), 3, 2)
        ...
        >>> node1 == node2
        >>> True
        ...
        >>> node1 != node3
        >>> True
    """
    def __init__(self, current: tuple, parent: tuple = None, g: float = 0, h: float = 0) -> None:
        self.current = current
        self.parent = parent
        self.g = g
        self.h = h

    def __add__(self, node):
        assert isinstance(node, Node)
        return Node((self.x + node.x, self.y + node.y), self.parent, self.g + node.g, self.h)

    def __eq__(self, node) -> bool:
        if not isinstance(node, Node):
            return False
        return self.current == node.current

    def __ne__(self, node) -> bool:
        return not self.__eq__(node)

    def __lt__(self, node) -> bool:
        assert isinstance(node, Node)
        return self.g + self.h < node.g + node.h or \
                (self.g + self.h == node.g + node.h and self.h < node.h)

    def __hash__(self) -> int:
        return hash(self.current)

    def __str__(self) -> str:
        return "Node({}, {}, {}, {})".format(self.current, self.parent, self.g, self.h)

    def __repr__(self) -> str:
        return self.__str__()

    @property
    def x(self) -> float:
        return self.current[0]

    @property
    def y(self) -> float:
        return self.current[1]

    @property
    def px(self) -> float:
        if self.parent:
            return self.parent[0]
        else:
            return None

    @property
    def py(self) -> float:
        if self.parent:
            return self.parent[1]
        else:
            return None