• Stars
    star
    323
  • Rank 130,051 (Top 3 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 11 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Hipster4j is a lightweight and powerful heuristic search library for Java and Android. It contains common, fully customizable algorithms such as Dijkstra, A* (A-Star), DFS, BFS, Bellman-Ford and more.

Hipster

CI

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". Departamento de Matematica, Universidade de Coimbra, Portugal, Tech. Rep. TR-99/005 (see an example)
  • 3rd party adapters:

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.

Getting started

The easiest way to use Hipster is adding it as a dependency with your favourite dependency manager. Maven users can include the library using the following snippet:

Snapshots

You can use the latest (unstable) version of Hipster under development. Just add the following dependency into your pom.xml:

<!-- Use sonatype oss public for snapshots -->
<repositories>
  <repository>
    <id>sonatype-oss-public</id>
    <url>https://oss.sonatype.org/content/groups/public/</url>
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
  </repository>
</repositories>

<dependencies>
  <!-- 
    Add this dependency under your pom.xml <dependencies> section to add
    all the dependencies of Hipster to your project. Add hipster-core
    instead of hipster-all for basic functionality.
  -->
  <dependency>
    <groupId>es.usc.citius.hipster</groupId>
    <artifactId>hipster-all</artifactId>
    <version>1.0.2-SNAPSHOT</version>
  </dependency>
</dependencies>

Releases

Current stable release is v1.0.1. See the milestones to check the current development status.

<dependencies>
  <!--
    Add this dependency under your pom.xml <dependencies> section to add
    all the dependencies of Hipster to your project. Add hipster-core
    instead of hipster-all for core functionality.
  -->
  <dependency>
    <groupId>es.usc.citius.hipster</groupId>
    <artifactId>hipster-all</artifactId>
    <version>1.0.1</version>
  </dependency>
</dependencies>

Quick Example

Let's solve the graph used in this Wikipedia article about Shortest paths.

DirectedGraph

Although Hipster is graph agnostic, we include some useful classes to create a graph or a directed graph and the search problem. We create a graph using the GraphBuilder class and then we use the GraphSearchProblem to create the required components to solve it using Dijkstra's algorithm:

// Create a simple weighted directed graph with Hipster where
// vertices are Strings and edge values are just doubles
HipsterDirectedGraph<String,Double> graph = 
    GraphBuilder.<String,Double>create()
     .connect("A").to("B").withEdge(4d)
     .connect("A").to("C").withEdge(2d)
     .connect("B").to("C").withEdge(5d)
     .connect("B").to("D").withEdge(10d)
     .connect("C").to("E").withEdge(3d)
     .connect("D").to("F").withEdge(11d)
     .connect("E").to("D").withEdge(4d)
     .createDirectedGraph();

// Create the search problem. For graph problems, just use
// the GraphSearchProblem util class to generate the problem with ease.
SearchProblem p = GraphSearchProblem
                           .startingFrom("A")
                           .in(graph)
                           .takeCostsFromEdges()
                           .build();
                           
// Search the shortest path from "A" to "F"
System.out.println(Hipster.createDijkstra(p).search("F"));

Output result: `Total solutions: 1 Total time: 6 ms Total number of iterations: 6

  • Solution 1:
  • States: [A, C, E, D, F]
  • Actions: [2.0, 3.0, 4.0, 11.0]
  • Search information: WeightedNode{state=F, cost=20.0, estimation=0.0, score=20.0}`

But that's not all. Hipster comes with different problem examples that illustrate how Hipster can be used to solve a wide variety of problems (not only graph search).

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.

License & Citation

This software is licensed under the Apache 2 license, quoted below.

Copyright 2013 Centro de Investigaci贸n en Tecnolox铆as da Informaci贸n (CITIUS),
University of Santiago de Compostela (USC).

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Citation

This library was presented in the "9th Iberian Conference on Information Systems and Technologies (CISTI), 2014". If you use this library in your research projects, we encourage you to please cite our work:

Rodriguez-Mier, P., Gonzalez-Sieira, A., Mucientes, M., Lama, M. & Bugarin, A. (2014). Hipster: An Open Source Java Library for Heuristic Search. 9th Iberian Conference on Information Systems and Technologies (CISTI).

@inproceedings{RodriguezMier2014,
  author = {Rodriguez-Mier, Pablo and Gonzalez-Sieira, Adrian and Mucientes, Manuel and and Lama, Manuel and Bugarin, Alberto},
  booktitle = {9th Iberian Conference on Information Systems and Technologies (CISTI 2014)},
  month = jun,
  volume = 1,
  title = {{Hipster: An Open Source Java Library for Heuristic Search}},
  pages = {481--486},
  isbn = "978-989-98434-2-4"
  address = "Barcelona",
  year = {2014}
}

More Repositories

1

calendula

An Android assistant for personal medication management
Java
199
star
2

Smarty-GPT

A wrapper of LLMs that biases its behaviour using prompts and contexts in a transparent manner to the end-users
Jupyter Notebook
142
star
3

veryfasttree

Efficient phylogenetic tree inference for massive taxonomic datasets
C++
89
star
4

SparkBWA

SparkBWA is a new tool that exploits the capabilities of a Big Data technology as Apache Spark to boost the performance of one of the most widely adopted sequence aligner, the Burrows-Wheeler Aligner (BWA).
C
69
star
5

Linguakit

Multilingual toolkit for NLP: dependency parser, PoS tagger, NERC, multiword extractor, sentiment analysis, etc.
Perl
64
star
6

construe

An abductive framework for the interpretation of time series, with special application to ECG data.
Python
55
star
7

BigSeqKit

BigSeqKit: a parallel Big Data toolkit to process FASTA and FASTQ files at scale
Go
46
star
8

jflap-lib

An improved version of JFLAP 7.0 to be used as a library as well as a command line tool.
Java
44
star
9

pyplexity

Cleaning tool for web scraped text
Python
39
star
10

BigBWA

BigBWA is a new tool that uses the Big Data technology Hadoop to boost the performance of the Burrows鈥揥heeler aligner (BWA).
C
30
star
11

stac

Statistical Tests for Algorithms Comparison (STAC) is a new platform for statistical analysis to verify the results obtained from computational intelligence algorithms.
JavaScript
28
star
12

citius-invaders

An old-style HTML5 arcade game for teaching genetic algorithms to kids, made with PhaserJS
JavaScript
25
star
13

voila

Variational Inference for Langevin Equations
R
19
star
14

servando

An open distributed telemedicine platform
Java
19
star
15

SimpleNLG-ES

SimpleNLG-ES is a Java API for Natural Language Generation in Spanish. It is a bilingual English/Spanish adaptation of the SimpleNLG v4.4.8 library, following the structure used in SimpleNLG-EnFr.
Java
16
star
16

composit

Semantic Web Service Composition Engine
Java
12
star
17

DepPattern

Dependency syntactic parser and formal grammar for Natural Languages
Perl
12
star
18

qrsdel

A noise robust QRS delineation algorithm
Python
11
star
19

pastaspark

PASTASpark is an extension to PASTA (Practical Alignments using SAT茅 and TrAnsitivity) that allows to execute it on a distributed memory cluster making use of Apache Spark.
Python
10
star
20

perldoop

Efficient Execution of Perl Scripts on Hadoop Clusters
Java
10
star
21

VERY-NEG-and-VERY-POS-Lexicons

Two lexicons for extreme words
7
star
22

frog

Java library for building Fuzzy Rule Bases
Java
5
star
23

SPLM-Lexicon

5
star
24

servando-core

Servando core modules and data model
Java
4
star
25

calendula-backend

Calendula app backend server
JavaScript
4
star
26

olivia

A Developer-Friendly Lidar Visualizer with 3D Stereo
Java
4
star
27

SimpleNLG-GL

SimpleNLG-GL is a Java API for Natural Language Generation in Galician language. It is a trilingual English/Spanish/Galician adaptation of the SimpleNLG v4.4.8 library, following the structure used in SimpleNLG-EnFr.
Java
4
star
28

fracdet

An R package for the simultaneous estimation of deterministic and fractal components in non-stationary time series
R
3
star
29

explorador-diacronico

Herramienta para observar el cambio de significado en las palabras a lo largo del tiempo. Puede ver m谩s informaci贸n en: http://tec.citius.usc.es/explorador-diacronico/ o en: http://explorador-diacronico.readthedocs.io/es/latest/
JavaScript
3
star
30

onto-evol-llm

Evaluation of ontology evolution with LLMs
Python
2
star
31

composit-iserve

ComposIT / iServe bindings for integration
Java
2
star
32

ho-mnist

Hardware Oriented CNN for MNIST recognition
Jupyter Notebook
2
star
33

jsonschema2shacl

A Python program that creates SHACL shapes from JSON Schema
Python
2
star
34

poster-svg-template

CiTIUS Poster template (non-official) in SVG format
1
star
35

lastpminer

LA-STPminer algorithm
Java
1
star
36

docker-citius-notebook

Dockerized version of ipython notebook for CiTIUS
Python
1
star
37

polypus

Polypus: a Big Data Self-Deployable Architecture for Microblogging Text Extraction and Real-Time Sentiment Analysis
1
star
38

GPTCopyCheck

Software to test if our books, papers, or whatever online document has been ingested by OpenAI model
Python
1
star