Getting started

To use JAMES in your Java project you can either add a Maven dependency to automatically pull in all required packages or manually download and install the JAR files. Or you can grab the source code from GitHub and build JAMES all by yourself. Using Maven, this only takes a few minutes. Build instructions are included in the GitHub README file.

The JAMES framework consists of several modules:

Core Module
This module contains the core of the framework. It includes many general components for both problem specification and search application. A wide range of generic local search algorithms are provided out-of-the-box, including random descent, tabu search, variable neighbourhood search and parallel tempering (all algorithms are listed here). Moreover, the core module contains implementations of specific components for subset selection as well as some specific subset sampling heuristics. GitHub
Extensions Module
This module extends the core with additional tools for advanced problem specification and search customization. It also provides specific components for some other problem types besides subset selection (e.g. permutation problems) and an automated analysis workflow. Analysis results can be studied and visualized in R using the Analysis R package. The extensions module is optional and should only be included if any of its components are used. GitHub
Examples Module
Provides a series of example problem implementations where several different optimization algorithms are applied to obtain solutions for the specified problems (see examples). This module is intended for demonstration purposes only and should not be included when using the framework. GitHub

An R package is provided to inspect and visualize results obtained using the analysis workflow from the extensions module. The R statistical software is freely available at the R project home page. The package can be installed from CRAN as follows:

> install.packages("james.analysis")
Then load it with:
> library(james.analysis)
Documentation is included in the package. Type ?james.analysis for an overview of the available functions. Examples demonstrating the use of the analysis tools and R package are provided here.

The JAMES framework requires Java 8 or later.

To perform logging, JAMES depends on the Simple Logging Facade for Java (SLF4J) which is a general logging API that provides bindings for several popular Java logging frameworks including log4j, JDK 1.4 logging and logback. To send all log messages generated by JAMES to your favorite logging framework, simply include the appropriate binding on your classpath as described in the SLF4J user manual. If no binding is found, a warning is printed to the console

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
and all log messages are silently discarded. If you do not mind about log messages it is perfectly safe to ignore this warning.

Warning!

The SLF4J binaries are not included in the distributed JAR files of the JAMES core and extensions modules. If you are manually downloading and installing these JAR files, do not forget to also include the SLF4J API. When using Maven this dependency is automatically installed.

All stable releases are synced with the Maven Central Repository. Subscribe to the RSS feed to stay informed about new releases.

Latest stable releases

Core module:
1.2 Changes
Extensions module:
1.2 Changes
Examples module:
1.2 Changes

Module compatibility

Always use version x.y of the core module in combination with version x.y or x.y.* of the extensions module.

Maven

If you are using Maven you can simply add a dependency to your POM file:

<dependency>
  <groupId>org.jamesframework</groupId>
  <artifactId>james-core</artifactId>
  <version>1.2</version>
</dependency>

for the core module and (optionally)

<dependency>
  <groupId>org.jamesframework</groupId>
  <artifactId>james-extensions</artifactId>
  <version>1.2</version>
</dependency>

for the extensions module. The required packages and all dependencies are then automatically grabbed from the Central Repository.

Plain-old JARs

Alternatively you can manually download the latest releases from the Central Repository and put the JAR files on your classpath:

Do not forget to also include the SLF4J API:

Previous versions can be obtained by browsing the Central Repository.

Examples ZIP package

A ZIP package is provided for the examples module that contains all Java sources, a runnable JAR (including all dependencies) and some example input files. The latest release of this package can be retrieved here:

Bleeding edge development snapshots are frequently deployed to the Sonatype OSSRH open source repository.

Warning!

Remember that snapshots are no stable releases and should therefore be used with care. For example, their API might change without notice and they may contain incomplete or insufficiently tested components. It is also not guaranteed that the latest snapshots of different modules are fully compatible.

We strongly recommend to use stable releases whenever possible.

Current snapshot versions

Core module:
1.3-SNAPSHOT Changes
Extensions module:
1.2.1-SNAPSHOT Changes
Examples module:
1.2.1-SNAPSHOT Changes

Maven

To use the snapshots you will have to add the Sonatype snapshots repository to your project's POM file or settings.xml:

<repositories>
  <repository>
    <id>snapshots-repo</id>
    <url>https://oss.sonatype.org/content/repositories/snapshots</url>
  </repository>
</repositories>

Then simply include the appropriate dependencies:

<dependency>
  <groupId>org.jamesframework</groupId>
  <artifactId>james-core</artifactId>
  <version>1.3-SNAPSHOT</version>
</dependency>

and (optionally)

<dependency>
  <groupId>org.jamesframework</groupId>
  <artifactId>james-extensions</artifactId>
  <version>1.2.1-SNAPSHOT</version>
</dependency>

for the core and extensions modules, respectively.

Plain-old JARs

Alternatively you can manually grab the latest snapshots of the required JAR files and put them on your classpath:

Do not forget to also include the SLF4J API:

Examples ZIP package

The latest snapshot of the examples ZIP package can be retrieved here: