Open Source Research Software

On this page, you will find information about my open source research software. This includes software implemented as part of my research on evolutionary computation, artificial intelligence, machine learning, and algorithms, including Java libraries for evolutionary computation and other metaheuristics, computation involving permutations, randomization related utilities, data structures and algorithms, as well as code to reproduce experimental results from published papers. It is organized into the following sections:

You can find my research software at the following sites:

Research Software Libraries

The following is a list of my research software that I have released in the form of libraries and frameworks to enable ease of reuse by others.

Chips-n-Salsa - A Java library of customizable, hybridizable, iterative, parallel, stochastic, and self-adaptive local search algorithms: The library includes implementations of stochastic local search algorithms, including simulated annealing, hill climbers, as well as constructive search algorithms such as stochastic sampling, and it also includes a wide variety of evolutionary algorithms. It includes several classes for representing solutions to a variety of optimization problems. For example, the library includes a BitVector class that implements vectors of bits, as well as classes for representing solutions to problems where we are searching for an optimal vector of integers or reals. For each of the built-in representations, the library provides the most common mutation operators for generating random neighbors of candidate solutions. Additionally, the library provides extensive support for permutation optimization problems, including implementations of many different mutation and crossover operators for permutations, and utilizing the efficiently implemented Permutation class of the JavaPermutationTools (JPT) library.

JavaPermutationTools: A Java library for computation on permutations and sequences: The JavaPermutationTools (JPT) library provides Java classes that enable representing and generating permutations and sequences, as well as performing computation on permutations and sequences, such as implementations of a variety of permutation distance metrics as well as distance metrics on sequences (i.e., Strings, arrays, and other ordered data types).

ρμ: A Java library of Randomization enHancements and Other Math Utilities: ρμ includes implementations of various algorithms for efficiently randomly sampling combinations of indexes into arrays and other sequential structures. It also includes efficient implementations of random number generation from distributions other than uniform, such as Gaussian, Cauchy, Binomial, etc. Additionally, it includes implementations of other math functions that are either needed by the randomization utilities, or which are needed by some of our other projects.

org.cicirello.core: A Java library of utilities and data structures: This library provides some of the core utilities and data structures used in several of our other libraries and projects, including but not limited to Chips-n-Salsa and JavaPermutationTools, as well as various projects that use those libraries.

Ziggurat Gaussian: Java implementation of the Ziggurat algorithm for generating Gaussian distributed random numbers.

Performance Tests for Small Clusters: Code developed to test the performance of a small 8 node cluster of raspberry pis. Implementations of a few simple parallel algorithms for testing the performance of a small cluster. Uses Java RMI for communication between master node and the worker nodes. Also includes useful bash scripts such as for starting the RMI servers on the worker nodes, shutting down and rebooting worker nodes from the master node, etc.

Top of the page

Reproducible Research Results

The following is a list of software that can be used to reproduce the experimental results from some of my published journal articles and conference papers.

small-sample-experiments: Experiments with algorithms for generating random samples of small combinations of distinct integers (e.g., random pairs, random triples, etc).

optimize-ga-operators: Experiments demonstrating how various operators of evolutionary algorithms, including bit-flip mutation, uniform crossover, and the generation control loop, can be optimized with an implementation involving binomial random variates that leads to massive performance gains relative to the standard implementations of the operators.

permutation-crossover-landscape-analysis: Experiments comparing the performance of many crossover operators for permutations on fitness landscapes that isolate different permutation features, exploring the different problem characteristics that impact when different crossover operators are expected to perform well.

btpe-iterations: Experiments exploring the acceptance-rejection sampling behavior of the binomial random variate generation algorithm implemented in the ρμ library.

mone-article-experiments: Experiments related to permutation metrics, permutation mutation operators, and fitness landscape analysis for permutation optimization.

cycle-mutation-experiments: Experiments with the new cycle mutation operator.

self-tuning-lam-experiments: Experiments with simulated annealing using the Self-Tuning Lam annealing schedule, comparing its behavior and performance with that of the Modified Lam annealing schedule.

modified-lam-experiments: Experiments with simulated annealing and an optimized version of the modified lam adaptive annealing schedule.

Top of the page