### Important Note:

This information is now rather out of date. My research notes are now kept on a wiki, a static version of which is located here.

## Overview of Artificial Intelligence Algorithms for Planning

This page catalogs some of the fundamental algorithms in AI planning, both general and path. The intent is that with a strong understanding of the techniques used, we will be better able to provide support for the system programmer.

### Path Planning

These algorithms deal specifically with the task of how to best move through an environment.

#### A*

A* is perhaps one of the simplest and most straight forward path planning algorithms, and is both fast and optimal. The algorithm requires an "admissible heuristic" to generate a cost estimate from the current location to the goal. To be admissible, the heuristic must never over-estimate the distance. In typical path finding algorithms, this is the straight line distance to the goal.

The standard A* algorithm requires that the environment be discretized appropriately. The algorithm is essentially a graph traversal, with each node representing a location, and each node is connected to each of its immediate neighbors (locations that can be reached with one move by the agent). As one can imagine, how the discretization of the world is done can have great impacts: too coarse and the representation is inaccurate, too fine and the search time increases greatly.

A* can be used for any graph traversal problem (and is superior to Dijkstra's Algorithm when an admissible heuristic is available). Williams and Ragno (whose work I cover on my research page) extended the algorithm to avoid nodes which share "conflicts" with previously expanded nodes. In their work, the graph represents possible failure states and the admissible heuristic is that the components are in working order. The conflicts are discrepencies between the predicted outputs and the observed outputs of the system.

#### D*

Dynamic A* (often referred to as D*) is a variation of A* that is intended to provide for faster re-planning times. This is useful when there are unknown obstacles in the environment. A* would typically handle this situation by simply restarting, but D* takes advantage of previously computed paths to speed up the process.

Unlike A*, D* begins with the goal node and works backwards to the robot. As obstacles are discovered (most likely close to the robot due to their limited sensor range), affected nodes are reevaluted and marked as RAISE since their esitmated cost may have been increased by the discovery of the obstacle. These RAISE nodes are then evaluted: first a check is made to see if a neighbor can lower their cost (avoiding the obstacle). If not, the neighboring nodes are also marked RAISE. LOWER nodes are also propogated in a similar fashion.

Focused D* is a natural extension that directs the waves of propogating RAISE and LOWER nodes towards the robot, reducing the number of nodes to evaluate.

#### RRT

A Rapidly exploring Random Tree is well suited to continuous domains with high dimensionality. This means that the algorithm is suitable for real world applications such as driving a car, which has moment and dynamic limitations of the ways in which it can turn (cutting the wheel 90 degrees while travelling at 100 mph is generally inadvisable). While not optimal, it is fast.

### General Planning

#### Graphplan

Huzzah! A description of Graphplan.

### Planning for Multiple Agents

When planning must be done to coordinate multiple robots to work together, a whole new set of problems arise. While one could used an algorithm designed for a single agent by treating the separate agents as one giant agent with added restrictions to avoid collisions and such, this causes the solution space to grow rapidly and is cumbersome. Specific multi-agent algorithms are designed to solve these problems.