Jenetics Changelog

What's new in Jenetics 7.2.0

Aug 31, 2023
  • Improvemments:
  • 862: Add a method, which allows to create a sliced (chromosome) view onto a given Genotype.
  • 866: Allow specifying the default RandomGenerator used by the library.
  • java -Dio.jenetics.util.defaultRandomGenerator=L64X1024MixRandom
  • cp jenetics-@[email protected]:app.jar
  • com.foo.bar.MyJeneticsAppjava
  • 872: Improve generic type parameters for some argument types in io.jenetics.prog module.
  • 876: Fix compiler warnings with Java 21.
  • Bugs:
  • 865, #867: Fixing typos in documentation.
  • 868: Fix execution script ./jrun.cmd

New in Jenetics 7.1.0 (Jun 15, 2022)

  • Improvements:
  • #813: Re-implementation of MathExpr class. Replace ad-hoc parsing implementation.
  • #815: Implement Grammatical-Evolution.
  • #820: Additional BitChromosome methods: and, or, xor, not, shiftRight, shiftLeft.
  • Bugs:
  • #831: Error while parsing parentheses trees.
  • #836: Fix BitChromosome(Test).

New in Jenetics 7.0.0 (Feb 21, 2022)

  • Improvements:
  • Convert data classes to records.
  • Convert libraries to JPMS modules.
  • Improve BitChromosome.
  • Breaking change Update to Java 17.
  • Incubator - Grammar-based evolution.
  • Incubator - Simplify and unify parsing code for MathExpr class.
  • Using RandomGenerator instead of Random class.
  • Breaking change - Change upper limit of Integer/LongeGenes from inclusively to exclusively.
  • Make AbstractChromosome non-Serializable.
  • Use InstantSource instead of Clock for measuring evolution durations.
  • Performance improve of subset creation method.
  • Introduce Self interface.
  • Add Sudoku example (by alex-cornejo).
  • Bugs:
  • Fix possible overflow in Integer/LongGene mean method.
  • Fix possible underflow in DoubleGene mean method.
  • Bug checking Sample arity in class SampleList.

New in Jenetics 6.3.0 (Aug 29, 2021)

  • Improvements:
  • ProxySorter is now able to sort array slices.
  • Implement Ordered class. Currently, it is required that the return value of the fitness function to be Comparable. But sometimes you might want to change the order of a given type or add some order to a type. The Ordered class makes this possible.

New in Jenetics 6.2.0 (Feb 9, 2021)

  • Improvements:
  • #754: Make Optimize.best method null friendly.
  • Bugs:
  • #742: Fix compile error with Java 15.
  • #746: Const<Double> equals doesn't conform with Double.compare.
  • #748: Fix broken formulas in Javadoc.
  • #752: StreamPublisher doesn't close underlying Stream on close.

New in Jenetics 6.1.0 (Sep 15, 2020)

  • Improvements:
  • #323: Fix leaky abstraction of CompositeCodec.
  • #434: Rewrite build scripts using Kotlin.
  • #695: Simplify MOEA for continious optimization.
  • #704: Add FlatTreeNode.ofTree factory method, for cleaner Tree API.
  • #706: The Constraint is now part of the Problem interface. If defined, it will automatically be part of the created Engine: default Optional<Constraint<G, C>> constraint() {return Optional.empty();}
  • #708: Additional Chromosome.map(Function) methods. This allows a more efficient mapping of chromosomes.
  • #731: Improve creation of constrained individuals, as defined in the Constraint interface.
  • #739: Add jenetics.incubator module. This module will contain classes which might be part of one of the main module.
  • Bugs:
  • #700: GaussianMutator violates the DoubleGene's upper bound.
  • #707: Fix conversion of BitChromosome <-> BitSet.

New in Jenetics 6.0.1 (Sep 14, 2020)

  • Bugs:
  • Invalid DoubleGene.isValid method.
  • Fix numeric instability of RouletteWheleSelectorclass.
  • IntermediateCrossover is not terminating for invalid genes.

New in Jenetics 3.1.0 (May 5, 2015)

  • Improvements:
  • Additional termination strategies in org.jenetics.engine.limit class.
  • Add EvolutionStream.of factory method. This allows to use other evolution functions than the Engine class.
  • org.jenetics.stat.Quantile has now a combine method which lets them use in a parallel stream.
  • Fix typos in user manual.
  • Add link to Javadoc and manual to README file.
  • Remove Serializable interface from Gene and Chromosome.
  • Make code examples in Javadoc standard conform.
  • Improve recombination section in manual.
  • Advance Genotype validity checks.

New in Jenetics 3.0.0 (Jan 6, 2015)

  • Rewrite of engine classes to make use of Java 8 Stream API.

New in Jenetics 2.0.2 (Oct 4, 2014)

  • Stabilization of ProbabilitySelector.probabilities method when minimizing the fitness function.

New in Jenetics 2.0.1 (Aug 12, 2014)

  • Fix bug in ProbabilitySelector class. The inverted probabilities are not correctly calculated when minimizing the fitness function.

New in Jenetics 2.0.0 (Apr 17, 2014)

  • Add IntegerGene/Chromosome classes.
  • Remove all deprecated classes and methods.
  • Remove dependency to the JScience library.
  • All concurrency classes are now internal. GeneticAlgorithm class takes an Executor as additional parameter, which is used for parallelizable code.
  • Library can now be downloaded via the maven central repository: `org.bitbucket.fwilhelm:org.jenetics:2.0.0`

New in Jenetics 1.6.0 (Apr 17, 2014)

  • Add JAXB base XML serialization mechanism to the Gene/Chromosome/Genotype/Phenotype classes. Mark the XMLSerializable based XML serialization as deprecated. org.jenetics.util.IO.xml is now deprecated.
  • Add Double/Long genes/chromosomes which will replace the Float64/Integer64 genes/chromosomes.
  • Generalize the fitness function to 'Function

New in Jenetics 1.5.0 (Apr 17, 2014)

  • Minor fixes in Gradle build script.
  • Mark some 'arrays' class methods as deprecated.
  • Fix/streamline BitChromosome constructors.
  • Improve Gradle build scripts.
  • Simplify statistics test classes.

New in Jenetics 1.4.1 (Oct 10, 2013)

  • Fix bug in ListIterator implementation of the 'Seq' classes.

New in Jenetics 1.4.0 (Oct 10, 2013)

  • Performance improvements of 'BitChromosome' class.
  • Add method 'BitChromosome.bitCount()'.
  • Mark 'arrays.subset' methods as deprecated; methods has been moved to 'org.jenetics.util.math' class.
  • Improve Gradle build scripts.
  • Change license from LGPL to Apache 2.0.

New in Jenetics 1.3.0 (Jun 15, 2013)

  • Add abstract 'Random64' class, respectively make it public.
  • Mark 'object.nonNull' methods as deprecated; functionality is now available in 'java.util.Objects.requireNonNull'.
  • Mark 'arrays.indexWhere' methods as deprecated.
  • Mark method 'object.str(Object)' as deprecated.
  • Mark method 'object.str(byte[])' as deprecated; functionality has moved to 'bit.toString(byte[])'.
  • Mark method 'math.min/max' as deprecated; functionality has moved to 'math.statistics' class.
  • Mark method 'math.sum' as deprecated; functionality has moved to 'math.statistics' class.
  • Mark 'arrays.foreach' method as deprecated. Replaced by 'arrays.forEach'.
  • Mark 'Seq.forall' method as deprecated. Replaced by 'Seq.forAll'.
  • Mark 'Seq.foreach' method as deprecated. Replaced by 'Seq.forEach'.
  • Mark non-array methods in 'arrays' class as deprecated.
  • Mark 'arrays.permutation' methods as deprecated.
  • Add 'Array.shuffle()' method.
  • Fix thread-safe version of the 'LCG64ShiftRandom' class.
  • Implement 'Comparable' interface for 'EnumGene'.
  • Add Array boxing/unboxing methods for short/Short.
  • Needed Gradle version (for building the library) is now 1.6.

New in Jenetics 1.2.0 (Mar 26, 2013)

  • Marking some Array constructors as deprecated.
  • Add some additional random helper functions.
  • Implement MultiplePointCrossover class.
  • Some code streamlining.
  • Prepare Selectors for parallelization.
  • The 'org.jenetics' project is now an OSGi module.

New in Jenetics 1.1.1 (Feb 18, 2013)

  • Fix bug in SinglePointCrossover, will just swap the whole Genotypes.

New in Jenetics 1.1.0 (Dec 27, 2012)

  • Add 'LCG64ShiftRandom' PRNG.
  • Speedup of 'IndexStream.Random' class. Uses internally now int values instead of doubles.
  • Add 'IndexStream.foreach' method.
  • Some minor code improvements.
  • Preparation for converting Jenetics into OSGi modules.
  • Switch build system from 'Ant' to 'Gradle'.
  • Switch SCM from 'Subversion' to 'Mercurial'.
  • Update documentation; describing new repository.

New in Jenetics 1.0.1 (Sep 5, 2012)

  • Fix bug in RouletteWheelSelector. The selection probabilities was not correctly calculated

New in Jenetics 1.0 (Sep 5, 2012)

  • Rename 'RandomRegistry.setDefault()' method to 'RandomRegistry.reset()'.
  • Rename 'MappableAccumulator' to 'MappedAccumulator'.
  • Optimize ProbabilitySelector. The selection complexity is now O(n + log(n)),
  • instead of O(n^2).
  • Remove NumberGene.asFactory method; no longer needed.
  • Rename method MSeq.fill(T[]) to MSeq.setAll(T[]).
  • Rename method MSeq.fill(Iterator) to MSeq.setAll(Iterator).
  • Rename method MSeq.fill(T) to MSeq.setAll(T).
  • Add org.jenetics.util.Seq.forall(Function) method.
  • Rename org.jenetics.util.Seq.indexOf(Function) to Seq.indexWhere(Function).
  • Rename org.jenetics.util.Seq.lastIndexOf(Function) to Seq.lastIndexWhere(Function).
  • Remove org.jenetics.util.CompositeFunction. Functionality moved to
  • org.jenetics.util.functions object.
  • Add Ant to build libraries.
  • Rename org.jenetics.util.CharSet to org.jenetics.util.CharSeq.
  • Some javadoc fixes.

New in Jenetics 0.9.0.0 (Sep 5, 2012)

  • Rename org.jenetics.Until class to org.jenetics.termination.
  • Remove ConstantFitnessFunction.
  • Mark GeneticAlgorithm.addAlterer(Alterer) method as deprecated.
  • Add GeneticAlgorithm.setAlterers(final Alterer) method.
  • Add GeneticAlgorithm.setup(Collection) method.
  • Rename Recombinator.recombinate to Recombinator.recombine.
  • Add IO.read methods without Class argument.
  • Rename Recombination to Recombinator.
  • Rename Array.append methods to Array.add.
  • Add an 'IO' class with IO helper methods.
  • Remove EnumGene, can be replaced by Integer64Gene.
  • Update JScience library from 4.3 to 4.3.1.
  • Simplify 'Accumulator' class hierarchy. Remove 'AdaptableAccumulator' and
  • rename 'AbstractAccumulator' to 'MappableAccumulator'.
  • Convert BitChromosome.valueOf() to constructors.
  • Remove GeneticAlgorithm.valueOf methods. They are no longer needed due to the extended type inference capabilities of Java 7 (diamond operator ).
  • Move the static 'concurrency' methods from the 'GeneticAlgorithm' class to a
  • new 'Concurrency' class.
  • The new org.jenetics.util.Function interfaces replaces the FitnessFunction,
  • Predicate and Converter interface.
  • Convert source to Java 7.

New in Jenetics 0.8.0.0 (Jun 2, 2011)

  • Add Array.sort() methods.
  • Add performance tests.
  • Rename the Array.seal() method to Array.toISeq() and remove the Array.isSealed()
  • method.
  • Add new TestNG version 6.0.
  • The EvaluatorRegistry is no longer used. Only the GA directly was using it, so
  • remove the registry and add the Evaluator as member to the GA.
  • Rename Genotype.toArray to Genotype.toSeq and Chromosome.toArray to
  • Chromosome.toSeq.
  • Add interfaces Seq, ISeq and MSeq to make the (im)mutable state of the Array
  • class more explicit.
  • Making org.jenetics.Statisitcs.Builder constructor protected and add static
  • factory method which creates an new builder instance.
  • Change the signature of the Statistics.Calculator.evaluate method to work with
  • Iterable

New in Jenetics 0.7.0.0 (Jun 2, 2011)

  • Change the signature of the org.jenetics.Statistics.Calculator.evaluate
  • methods so that it returns a Statistics.Builder instead of a Statistics object.
  • Add builder classes for Statistics and NumberStatistics classes.
  • Rename org.jenetics.util.TransitiveConverter to org.jenetics.util.CompositeConverter.
  • Fix documentation and behavior of org.jenetics.GaussianMutator class.
  • Fix the org.jenetics.Mutator class. The mutation probability is (now) the
  • probability that a given gene is mutated. (Should have been always the case.)
  • Add org.jenetics.stat.NormalDistribution class for creating statistical tests
  • for the org.jenetics.Mutator class.
  • The org.jenetics.Alterer.alter method now returns the number of altered genes.
  • Refactoring: Move Accumulators.Variance and Accumulators.Mean class to
  • org.jenetics.stat package.
  • Create org.jenetics.stat package.
  • Change type signature from 'C extends Comparable' to
  • C extends Comparable

New in Jenetics 0.6.1.0 (Sep 16, 2010)

  • Selectors and Alterers are no longer Serializable.
  • Implement readObject and writeObject methods in gene and chromosome implementations.
  • Making CharSet class final.
  • Fixing bug in the ArrayUtils.sort(Array) method. This method doesn't sort
  • Arrays created with Array.subArray not the right way.
  • Fixing bug in SinglePointCrossover class. It was only a 'half' crossover performed.
  • Add org.jenetics.util.Array.subArray(int) method.
  • Add org.jenetics.util.Array.map(Converter) method.
  • Change the method signature of the org.jenetics.utils.IOUtils.writeXXX methods.
  • Now the parameter order is , .
  • Add org.jenetics.utils.Array.toString(String, String, String) method.

New in Jenetics 0.6.0.0 (May 25, 2010)

  • Change structure to Maven standard directory layout.
  • BitChromosome implements now org.jscience.mathematics.number.Number instead of org.jscience.mathematics.number.Number.
  • Add BitChromosome.invert() method.
  • Fixing bug in CharSet class. The constructor CharSet(String) now creates a distinct CharSet.
  • Fixing bug in Array.equals(Object) method.
  • Add Array.fill(Factory) method.
  • Jenetics now allows fitness minimization.

New in Jenetics 0.5.1.0 (May 25, 2010)

  • Add org.jenetics.util.Predicates which contains some general purpose predicates like Not, And, Or, Nil.
  • Add incremental Quantile class.
  • Add ConverterAdapter class.
  • Removed Genotype.chromosomes() method. Use Genotype.length() instead.
  • Add Accumulator classes for statistics calculation.
  • Rename org.jenetics.utils.Serializer to org.jenetics.utils.IOUtils.
  • Change method signature from ArrayUtils.foreach(Collection) to
  • ArrayUtils.foreach(Iterable).
  • Add Array.toArray() and Array.toArray(Object[]) methods.
  • Add 'divide' method to Float64Gene and Integer64Gene.
  • Add factory methods CharSet.valueOf(CharSequence) and CharSet.valueOf(char, char).

New in Jenetics 0.5.0.0 (May 25, 2010)

  • Rename Validator.notNull() to Validator.nonNull(). It's the same name as in the
  • new Objects.nonNull() method in Java 1.7.
  • Remove the org.jenetics.Propability class. It's not worth the effort.
  • Refactoring of the Alterer class. The Alterer is now an interface with one
  • "alter" method. To combine different alterers to one alterer you have to use
  • the CompositeAlterer class.
  • Rename Mutation to Mutator.
  • Rename DoubleGene(Chromosome) to Float64Gene(Chromosome).
  • Rename IntegerGene(Chromosome) to Integer64Gene(Chromosome).
  • Rename org.jenetics.util.XMLSerializer to org.jenetics.util.Serializer.
  • Move Mean class from org.jenetics to org.jenetics.util package.
  • Rename PowerScaler to ExponentialScaler.
  • Add new selector, MonteCarloSelector. This selector can be used to evaluate
  • the performance of an other selector.
  • Rename GeneticAlgorithm.getBestStatistic() method to
  • GeneticAlgorithm.getBestStatistics()
  • Change org.jenetics.util.Timer to nano second resolution.
  • Rename method Statistics.getTimes() to Statistics.getTime().
  • Replace the Statistics.Time properties with "final" javolution.lang.References.
  • Instead of statistics.getTimes().getAlterTime() you write statistics.getTimes().alter.get().
  • Adding fork-join library from Doug Lea and ForkJoinEvaluator.
  • Adding UmlGraph for javadoc generation.
  • Making the Array class cloneable.
  • Fix external javadoc references in build script.
  • The characters which are used by the CharacterGene can now be changed.
  • Adding adapter class for jscience Function object.
  • Adding method getParallelTasks to Evaluator interface.
  • The GeneticAlgorithm.getLock() method now returns a fair lock.
  • Make the static helper method ArrayUtils.asList() a member method of the Array
  • class.
  • Make the Array class Serializable.
  • Making the StatisticsCalculator a static inner class of the Statistics.

New in Jenetics 0.4.0.1 (May 25, 2010)

  • Fix bug in the GeneticAlgoritm.setPopulation/setGenotypes function. The fitness scaler was not set.
  • The examples are packed in separate jar file (Jenetics examples-.jar).
  • Some Fixing javadoc.

New in Jenetics 0.4.0.0 (May 25, 2010)

  • Remove the survivor fraction probability from the GA. This can lead to
  • inconsistencies with the offspring fraction. The survivor fraction is deduced
  • from the offspring fraction (sf := 1 - of).
  • Adding additional example.
  • Removing the static factory methods from the Array class.
  • Refactoring GA statistic classes.
  • Adding TruncationSelector.
  • Adding SwapMutation class, needed for TSP (and other combinatorial) problem.
  • Rename NumberGene.getMinValue() to NumberGene.getMaxValue() to
  • NumberGene.getMin() and NumberGene.getMax().
  • Remove the mutation method from the Chromosomes interface. The mutation is
  • solely done by the Mutation class. This requires a new method in the Gene
  • interface, Gene.newInstance(). To not be forced to cast the newly generated
  • gene to its concrete type, an additional type parameter has been added to the
  • Gene interface. As side effect, no @SuppressWarnin annotation are needed.
  • Adding GaussianMutation class.
  • Fixing Mutation class. After an previous refactoring no mutation was performed.
  • Fixing mutation probability calculation in Mutation class.
  • Making mutation a little bit faster.
  • The methods of the Array class throw an ArrayIndexOutOfBoundsException instead
  • of an IndexOutOfBoundsException.
  • Fixing again bugs in the Array(Utils) class concerning the sealed state.
  • Adding ArrayUtils.sealedArray() method.
  • Rename Chromosome.getGenes() to Chromosome.toArray().
  • Making all method parameters final.

New in Jenetics 0.3.2.1 (May 25, 2010)

  • Adding and extending javadoc comments.
  • Finish NumericStatistic/Calculator implementation.
  • Fixing minor flaws of the Arrays sealed state.
  • Adding method Array.subArray(int, int).
  • Generalize the method Array.clear() to Array.fill(T value).

New in Jenetics 0.3.2.0 (May 25, 2010)

  • The PropabilitySelector no longer sorts the population before calling the ProbabilitySelector.probabilities() method. The subclass must sort the population if needed.
  • Move Verifiyble interface to util package.
  • Change signature of the Alterer.alter(Population, int) method. Adding the generation of the altered phenotype.
  • Add new abstract Alterer class Recombination.
  • Move RandomRegistry into org.jenetics.util package.
  • Add org.jenetics.util.EvaluatorRegistry class.
  • Parallelize the recombination in the Recombination class.

New in Jenetics 0.3.1.0 (May 25, 2010)

  • Deleting ConcurrentStatisticCalculator
  • Adding concurrence support on the level of the fitness calculation of the
  • phenotypes of the population. This will the job of the
  • (Concurrent)Evaluator.
  • CharacterChromosome implements java.lang.CharSequence interface.
  • Adding method org.jenetics.util.Array.subArray(start, end).
  • Adding timer which measures the time spend for selecting, altering and
  • calculating the fitness of a population.

New in Jenetics 0.3.0.0 (May 25, 2010)

  • Adding javadoc to exported zip file.
  • Moving classes
  • Array
  • ArrayIterator
  • ArrayUtils
  • BitUtils
  • Probability
  • Validator
  • into new org.jenetics.util package.
  • Changing interface 'FitnessFunction'. It converts a given Genotyp to an
  • (more general) java.lang.Comparable instead of a double value. An additional
  • generic parameter (C extends Comparable) was therefor introduced in the
  • FitnessScaler, Phenotype, Population, Selector and GeneticAlgorithm class.
  • Adding NumericStatistic and NumericStatisticCalculator. Move functionality
  • from old Statistic class into the new NumericStatistic class.
  • Some additional helper methods in the ArrayUtils class.
  • Remove method CharacterGene.getCharacter(), use CharacterGene.getAllele()
  • instead.
  • adding interface org.jenetics.util.Copyable.
  • Streamline XML-Serialization.
  • Streamline toString methods and examples.

New in Jenetics 0.2.0.0 (May 25, 2010)

  • Removing Randomizable interface.
  • Changing the template method return value of the ProbabilitySelector.probabilities(Population,int) from Probabilities[] to double[].
  • Replace array types (e.g. IntegerGene[]) with Array class (e.g. Array). This moves all the 'unchecked' stuff in the new Array class.
  • Only add valid phenotypes to surviving phenotypes.
  • Caching the isValid value in AbstractChromosome and Genotype.
  • Rename util class org.jenetics.Arrays to org.jenetics.ArrayUtils.
  • Adding StatisticTest class.
  • Adding the (shortcut)method Genotype.getGene()
  • Adding the method Chromosome.getGene() to the Chromosome interface.
  • Adding the ConcurrentStatisticCalculator class.
  • Making the StatisticsCalculator class public.

New in Jenetics 0.1.0.4 (May 25, 2010)

  • Adding @Override annotation where possible.
  • The factory method IntegerGene.valueOf(long min, long max) and the DoubleGene.valueOf(double min, double max) now creates a Gene with a random value within the given range. Adding comments to this methods

New in Jenetics 0.1.0.3 (May 25, 2010)

  • Using javolution.context.LocalContext.Reference in RandomRegistry.
  • New version of the private PermutationChromosome.randomize method.
  • Adding private helper class Arrays.