Hipster4j
Lightweight and powerful heuristic search library for Java and Android
A powerful and friendly heuristic search library implemented in Java.
What's Hipster4j?
The aim of Hipster4j is to provide an easy to use yet powerful and flexible type-safe Java library for heuristic search. Hipster relies on a flexible model with generic operators that allow you to reuse and change the behavior of the algorithms very easily. Algorithms are also implemented in an iterative way, avoiding recursion. This has many benefits: full control over the search, access to the internals at runtime or a better and clear scale-out for large search spaces using the heap memory.
You can use Hipster4j to solve from simple graph search problems to more advanced state-space search problems where the state space is complex and weights are not just double values but custom defined costs.
Features
The current version of the library comes with some very well-known and wide used search algorithms. We're working to add more algorithms soon:
- Search algorithms:
- Uninformed search:
- DFS: Depth-First-Search.
- BFS: Breadth-First-Search.
- Dijkstra's algorithm.
- Bellman-Ford.
- Informed search:
- A star (A*).
- IDA star (IDA), Iterative Deepening A.
- AD star (AD): Anytime Dynamic A.
- Local search:
- Hill-Climbing.
- Enforced-Hill-Climbing.
- Multiobjective search
- Multiobjective LS algorithm. Original paper: Martins, E. D. Q. V., & Santos, J. L. E. (1999). "The labeling algorithm for the multiobjective shortest path problem". <i>Departamento de Matematica, Universidade de Coimbra, Portugal, Tech. Rep. TR-99/005</i> (see an example)
- 3rd party adapters:
- Java Universal/Graph (JUNG) adapter.
If you don't find the algorithm or the feature you are looking for, please consider contributing to Hipster!. You can open a new issue or better fork this repository and create a pull request with your contribution.
What's next?
If you want to learn how to solve a problem by searching with Hipster, check the wiki and the JavaDoc documentation. We also suggest you to check this presentation for a quick introduction.