Chips N Salsa Versions Save

A Java library of Customizable, Hybridizable, Iterative, Parallel, Stochastic, and Self-Adaptive Local Search Algorithms

v6.4.0

9 months ago

[6.4.0] - 2023-07-28

Added

  • Added configurable source of randomness (#638).
  • Added Position Based Crossover (PBX), a crossover operator for permutations (#642).
  • New constructors in BitVector class enabling specifying source of randomness for random BitVectors (#638).

Dependencies

  • Bump jpt from 5.0.4 to 5.1.0
  • Bump rho-mu from 3.1.0 to 3.1.1

v6.3.0

1 year ago

[6.3.0] - 2023-05-15

Added

  • NaiveGenerationalEvolutionaryAlgorithm: This is the typical implementation of a generational EA. It is temporarily added to the library in this release for a specific research purpose. You should instead use the existing GenerationalEvolutionaryAlgorithm class, which is logically and statistically equivalent, as well as highly optimized.

Changed

  • Refactored and optimized:
    • NonWrappingOrderCrossover
    • OrderCrossover
    • OrderCrossoverTwo
    • PartiallyMatchedCrossover
    • TwoChangeMutation
    • UniformOrderBasedCrossover
    • UniformPartiallyMatchedCrossover

Deprecated

  • The new NaiveGenerationalEvolutionaryAlgorithm class is deprecated upon introduction. It is temporarily added to the library in this release for a specific research purpose. Once that research purpose is served, it will be removed from the library with no further notice. That future removal will not be considered a breaking change due to the prominent notice in the class's documentation upon introduction. You should instead use the existing GenerationalEvolutionaryAlgorithm class, which is logically and statistically equivalent, but is highly optimized.

Dependencies

  • Bump core from 2.4.4 to 2.5.0
  • Bump rho-mu from 3.0.2 to 3.1.0
  • Bump jpt from 5.0.1 to 5.0.4

v6.2.1

1 year ago

[6.2.1] - 2023-01-20

Changed

  • Refactored WeightedStaticScheduling to extract internal package-access classes for reading and writing instances to and from OR-library formatted files.
  • Refactored WeightedStaticSchedulingWithSetups to extract internal package-access classes for reading and writing instances to and from the format of Cicirello (2003).
  • Refactored CommonDuedateScheduling to extract internal package-access classes for reading and writing instances to and from OR-library formatted files.

Fixed

  • Refactored several classes based on RefactorFirst scan, including the following:
    • Test cases for all of the numeric representations
    • Test cases for ValueBiasedStochasticSampling
    • Test cases for HeuristicBiasedStochasticSampling
    • Test cases for HeuristicSolutionGenerator
    • Test cases for HeuristicPermutationGenerator
    • Test cases for AcceptanceBandSampling
    • Test cases for all of the iterable mutation operators
    • Test cases for all of the mutation operators for permutations
    • Test cases for UniformMutation for integer representations
    • Test cases for all of the classic annealing schedules (linear, exponential, and logarithmic)
    • Test cases for all of the restart schedules
    • Test cases for all constructive heuristics for scheduling problems
    • Test cases for the BitVector class
    • Test cases for CommonDuedateScheduling
    • Test cases for WeightedStaticSchedulingWithSetups
    • Test cases for the parallel metaheuristic and parallel multistarter classes
    • Test cases for the timed parallel multistarters

Dependencies

  • Bump core from 2.4.3 to 2.4.4
  • Bump rho-mu from 3.0.1 to 3.0.2
  • Bump jpt from 5.0.0 to 5.0.1

v6.2.0

1 year ago

[6.2.0] - 2023-01-10

Added

  • AdaptiveMutationOnlyEvolutionaryAlgorithm: Implementation of a mutation-only evolutionary algorithm with mutation rates that evolve during the search.
  • Extracted a EuclideanDistance class from the TSP (previously default and only edge distance) to enable easily introducing additional TSP edge distance functions.

Changed

  • Refactored several classes to improve performance and/or maintainability, including the following:
    • Several permutation crossover and mutation operators for improved performance
    • All real-valued mutation operators
    • SimulatedAnnealing
    • Stochastic samplers
    • Hill climbers
    • Evolutionary algorithms
    • Parallel metaheuristic and parallel multistarter classes
  • Refactored test cases for the LargestCommonSubgraph class (based on RefactorFirst scan).
  • Refactored test cases for the hill climber classes (based on RefactorFirst scan).
  • Refactored test cases for the TSP class (based on RefactorFirst scan).
  • Refactored test cases for BoltzmannSelection and BoltzmannStochasticUniversalSampling (based on RefactorFirst scan).

Dependencies

  • Bump jpt from 4.3.1 to 5.0.0
  • Bump rho-mu from 2.5.0 to 3.0.1

v6.1.0

1 year ago

[6.1.0] - 2022-11-17

Added

  • AdaptiveEvolutionaryAlgorithm class: An implementation of an evolutionary algorithm with control parameters (crossover and mutation rates) that evolve during the search.
  • Option to constrain the result of a mutation on a real-valued representation to an interval (e.g., such as relevant if mutating a crossover or mutation rate since such rates constrained in [0.0, 1.0]).
  • A set(int[]) method to the IntegerValued interface along with implementations in corresponding classes.
  • A set(double[]) method to the RealValued interface along with implementations in corresponding classes.

Changed

  • Reformatted all sourcecode to Google Java Style.
  • Refactored evolutionary algorithm classes to improve maintainability, as well as a few minor optimizations.
  • Refactored mutation classes for real-valued representations, including:
    • Extracted an internal abstract base class for common functionality.
    • Refactored Gaussian mutation classes to use new abstract base class.
    • Refactored Cauchy mutation classes to use new abstract base class.
    • Refactored uniform mutation classes to use new abstract base class.
  • Refactored several test classes based on suggestions by Sonatype Lift's new technical debt scan.

Fixed

  • Configuration of maven-shade-plugin fixed to suppress generation of dependency-reduced pom to avoid breaking transitive dependencies for the regular jar of the library.

Dependencies

  • Bump core from 2.2.2 to 2.4.3
  • Bump rho-mu from 2.4.2 to 2.5.0
  • Bump jpt from 4.2.0 to 4.3.1

CI/CD

Other

v6.0.0

1 year ago

[6.0.0] - 2022-09-02

BREAKING CHANGES: This release includes breaking changes (see Removed and Changed sections).

Added

  • Crossover operators for permutations:
    • Cycle Crossover (CX)
    • Order Crossover (OX)
    • Non-Wrapping Order Crossover (NWOX)
    • Uniform Order-Based Crossover (UOBX)
    • Order Crossover 2 (OX2)
    • Partially Matched Crossover (PMX)
    • Uniform Partially Matched Crossover (UPMX)
    • Precedence Preservative Crossover (PPX): two-point version
    • Precedence Preservative Crossover (PPX): uniform version
    • Edge Recombination
    • Enhanced Edge Recombination
  • Additional selection operators for use in evolutionary algorithms, including:
    • Boltzmann selection with 3 temperature schedules: constant, linear cooling, exponential cooling
    • Boltzmann selection with Stochastic Universal Sampling with 3 temperature schedules: constant, linear cooling, exponential cooling

Changed

  • For clarity, renamed GenerationalNANDOperatorsEvolutionaryAlgorithm to GenerationalEvolutionaryAlgorithmMutuallyExclusiveOperators (BREAKING CHANGE).

Removed

  • The following classes, previously deprecated in 5.1.0:
    • ShiftedFitnessProportionalSelection, replaced by combination of FitnessShifter with FitnessProportionalSelection.
    • ShiftedStochasticUniversalSampling, replaced by combination of FitnessShifter with StochasticUniversalSampling.
    • BiasedShiftedFitnessProportionalSelection, replaced by combination of FitnessShifter with BiasedFitnessProportionalSelection.
    • BiasedShiftedStochasticUniversalSampling, replaced by combination of FitnessShifter with BiasedStochasticUniversalSampling.

Dependencies

  • Bump jpt from 4.0.0 to 4.2.0
  • Bump rho-mu from 2.3.2 to 2.4.2

v5.2.0

1 year ago

[5.2.0] - 2022-08-01

Added

  • OnePlusOneEvolutionaryAlgorithm, an implementation of a (1+1)-EA.
  • OnePlusOneGeneticAlgorithm, an implementation of a (1+1)-GA, a subclass of OnePlusOneEvolutionaryAlgorithm for the special case of optimizing a BitVector representation.

v5.1.0

1 year ago

[5.1.0] - 2022-07-29

Added

  • SigmaScaling class, implementing sigma scaling.
  • FitnessShifter class for use in combination with fitness-weighted selection operators to shift all fitnesses such that minimum fitness is 1 at the time of selection (e.g., deals with negative fitnesses, etc).

Deprecated

  • ShiftedFitnessProportionalSelection, replaced by combination of FitnessShifter with FitnessProportionalSelection.
  • ShiftedStochasticUniversalSampling, replaced by combination of FitnessShifter with StochasticUniversalSampling.
  • BiasedShiftedFitnessProportionalSelection, replaced by combination of FitnessShifter with BiasedFitnessProportionalSelection.
  • BiasedShiftedStochasticUniversalSampling, replaced by combination of FitnessShifter with BiasedStochasticUniversalSampling.

v5.0.1

1 year ago

[5.0.1] - 2022-07-25

Dependencies

  • Bump core from 2.1.0 to 2.2.2
  • Bump rho-mu from 2.3.0 to 2.3.2

Other

  • First release available via JitPack after configuring builds. In addition to Maven Central and GitHub Packages, the library can now be imported from JitPack as a fall-back option, as well as a source of snapshot artifacts built from the current default branch or specific commit hashes.

v5.0.0

1 year ago

[5.0.0] - 2022-06-03

BREAKING CHANGES: This release includes breaking changes, including increasing the minimum supported Java to Java 17. See details below for other breaking changes.

Changed

  • Minimum supported Java bumped to Java 17 (breaking change).
  • Utilize Java 17's new RandomGenerator interface where relevant.

Dependencies

  • Bumped core from 1.1.0 to 2.1.0 (breaking change).
  • Bumped rho-mu from 1.2.0 to 2.3.0 (breaking change).
  • Bumped jpt from 3.3.0 to 4.0.0 (breaking change).