b-studios / parametric-a-star   0.1

MIT License GitHub

A JVM (Scala / Java) implementation of A* (A Star), parametric in the possible states and transitions.

Scala versions: 2.11 2.10

Parametric A*

A JVM (Scala / Java) implementation of A* (A Star), parametric in the possible states and transitions.

Build Status Maven Central

Standard implementations of A* are defined on a 2D map with a fixed set of commands for navigation. In contrast, this implementation is fully parametric (unaware) of the used "map"-structure and "commands". To guide the search algorithm the Engine (or JEngine for Java respectively) interface has to be implemented, repeated here for convenience:

trait Engine[State, Command] {
  // State related
  def valid(self: State): Boolean
  def bisimilar(self: State, other: State): Boolean
  def hash(self: State): Int
  def transition(state: State, cmd: Command): State

  // Available commands
  def commands: List[Command]

  // Heuristics
  def distance(fst: State, other: State): Double
}

The common A* algorithm can be recovered, by instantiating State = (Int, Int) and Command with the desired set of commands, whose behaviour is implemented in transition. The map structure then will be implemented by validity of positions in valid. Usually bisimilar = equals and hash = hashCode. However, also more complex equalities can be implemented like symmetry of rotations.

Installation

This project is hosted on sonatype and synchronized to Maven Central. You can use sbt or maven to add parametrized A* to your dependencies.

SBT

In build.sbt:

resolvers ++= Seq(
  Resolver.sonatypeRepo("releases"),
  Resolver.sonatypeRepo("snapshots")
)

libraryDependencies += "de.b-studios" %% "parametric-a-star" % "0.1"

Maven

In pom.xml:

<dependencies>
    <dependency>
      <groupId>de.b-studios</groupId>
      <artifactId>parametric-a-star_2.11</artifactId>
      <version>0.1</version>
    </dependency>
</dependencies>

Usage

For example usages see for instance this Scala file or this Java file.