- #347: Improve
hashCode
andequals
methods. - #349: Cleanup of chromosome constructors. Make the constructors more regular.
- #355: Simplify implementation of numeric genes.
- #361: Add
NumericChromosome.primitiveStream()
methods. - #366: Deprecate reference to fitness function property from
Phenotype
. Preparation step for generalizing the fitness evaluation. - #377: Add
Tree.childAt
method. Lets you fetch deeply nested child nodes. - #378: Convert tree to parentheses tree string.
- #379: Parse parentheses tree string to tree object.
- #380: Add
TreeNode.map
method. - #400: Codec for mapping source- and target objects.
- #406: Make the library compilable under Java 11.
- #411: Improve the behaviour of the
MathExpr.format
method.
- #357: Invalid length of selected population in
MonteCarloSelector
. - #420:
Limits.byFitnessThreshold
termination strategy is missing best generation.
- 416: Method internal
comb.subset
doesn't create all possible combinations. ThePermutationChromosome
is therefore not able to create solutions for the whole search space.
- #325: Allow customization of fitness evaluation execution for bundling calculations
- #327: Improve CPU utilization during fitness evaluation.
- #335: Seq view wrapper for List and T[] types.
- #317: Fix links of Javadoc images.
- #318: NULL result from engine.stream() after upgrade from 4.0.0 to 4.1.0.
- #336: Errornous default implementation of 'Seq.indexWhere'.
- #341: Error in internal 'bit.increment' method.
- #345: Assumption for 'Genotype.newInstance(ISeq)' no longer holds.
- #223: Implementation of Multi-Objective Optimization.
- #259: Pruning GP program tree.
- #285: Population exchange between different Engines.
- #294: Cleanup of Jenetics examples.
- #295: Upgrade Gradle version 4.5.
- #297: Compile JMH test on test execution.
- #306: Improve Javadoc on how to extend chromosomes.
- #307: Enable @apiNote, @implSpec and @implNote Javadoc tag.
- #28: Immutable population class. The original
Population
class has been replaced bySeq<Phenotype<G, C>>
. This points to a more functional implementation of the library. - #119:
Chromosome
implementations are now fully immutable. This is an internal change only. - #121:
Mutator
class is easier now to extend. It has been extended with additionalmutate
methods which serves as extension points for onwMutator
implementations. - #123:
Chromosome
with variable number of genes: Most chromosomes can now be created with a variable number of genes.DoubleChromosome.of(0.0, 1.0, IntRange.of(5, 16))
. - #172:
io.jenetics.prngine
library replaces the existing PRNG implementations in theio.jenetics.base
module. - #175: Align random int range generation with
io.jenetics.prngine
library. This is an internal change only. - #180: Change library namespace from
org.jenetics
toio.jenetics
. This is the most invasive change of this release. Users have to adopt the imports in all their code. - #183: Change copyright email address to [email protected]
- #200: Implementation of gene convergence termination: A termination method that stops the evolution when a user-specified percentage of the genes that make up a
Genotype
are deemed as converged. A gene is deemed as converged when the average value of that gene across all of the genotypes in the current population is less than a user-specified percentage away from the maximum gene value across the genotypes. - #253: Removal of deprecated code and classes: mainly
JAXB
marshalling and theLCG64ShiftRandom
class. - #260: Clean room implementation of internal
subset
function. This method was a port from the C++ source written by John Burkardt. The original source has been published under the LGPL licence, which is not compatible to tha Apache 2 licence. To avoid legal issues, the affected method has been reimplemented using the Clean Room method, based on the original book, Combinatorial Algorithms for Computers and Calculators, by Albert Nijenhuis and Herbert Wilf. Theio.jenetics.internal.math.comb.subset
method is now fully compatible with the Apache 2 licence. - #262: Filter for duplicate individuals: It is now possible to intercept the stream of
EvolutionResult
s of the evolutionEngine
:
final Engine<DoubleGene, Integer> engine = Engine.builder(problem)
.mapping(EvolutionResult.toUniquePopulation())
.build();
- #264: Upgrade Gradle to version 4.3.
- #266: The
Seq
serialization should be more robust in the case of implementation changes. - #268: Implementation of an
EliteSelector
. - #269: Cleanup of internal, mathematical helper functions.
- #272: Obey Java naming convention. Two helper classes have been renamed to obey the Java naming conventions.
codecs
->Codecs
andlimits
->Limits
. - #279: Additional
MSeq.swap
method.
- #247: Fix the classpath of the
jrun
helper script. - #256: Buggy type signature of
AnyChromosome.of
method.
- #26: Extend Gradle scripts for multi-module releases.
- #27: Parallel
EvolutionStream
. - #64: Implementation of
TreeGene
/Chromosome
. - #181: XML marshaling module:
org.jenetics.xml
. - #199: Termination: Population convergence.
- #201: Simplify Gradle build scripts.
- #204: Remove internal 'Stack' container class.
- #207: Add missing
BitChromosome
factory methods. - #216: Restructuring of User's Manual.
- #218: Mark
LCG64ShiftRandom
class as deprecated. - #219: Mark
JAXB
marshaling as deprecated. - #227: Genetic Programming module:
org.jenetics.prog
. - #228: Upgrade Gradle to 4.0.2.
- #229: Define stable module names.
- #236: Rename module
jenetix
toorg.jenetics.ext
- #238: Align project directories with maven artifact names.
- #212: Fix
Seq.toArray(Object[])
method. - #226: Incorrect
MinMax.toString()
output. - #233:
Engine.java
Comment Grammar Fix. - #234:
Population.empty()
isn't empty
- #157: Add
LineCrossover
class. - #158: Add
IntermediateCrossover
class. - #168: Remove dependency to
java.desktop
module. - #169: Describe how to configure (μ, λ) and (μ + λ) Evolution Strategies in manual.
- #177: Additional 'Seq' conversion functions:
- #182: Rename build script to default names. All build scripts are now named
build.gradle
. - #188: Additional
Engine.Builder
methods - #189:
TruncationSelector
is now able to globally limit best selected individuals. This is used for (μ, λ) and (μ + λ) Evolution Strategies. - #197: Improve CPU utilization for long running fitness functions. The original concurrent fitness function evaluation where assumed to be quite fast.
- #127: Change the maven group and artifact ID from
org.bitbucket:org.jenetics
toio.jenetics:jenetics
. - #142: Jenetics now compiles without warnings with Java 9 EA.
- #145: Add additional
Engine.stream(...)
andEngine.iterator(...)
methods: - #150: Implement fitness convergence termination strategy.
- #152: Remove
hashCode
and replaceequals
method withsameState(T)
for mutable objects. - #156: Implementation of an UniformCrossover.
- #162: Update and improve User's Manual.
- #143: Fix serialization of
EvolutionResult
class. - #146: NPE in
EvolutionResult.toBestEvolutionResult()
when collecting emptyEvolutionStream
s. - #159: The User's Manual build fails for Lyx version 2.2.2.
- #103: Add
MSeq.sort
method. - #114:
Alterer
implementations are now able to handleChromosome
s of different length. - #135: Add
Codec.decode(Genotype)
default method. - #140: Additional
EvolutionResult.toBestResult
collectors.
- #129: Fix Javadoc encoding.
- #111: Dead lock for single-threaded executors.
- #81: It is now easier to register user-defined JAXB marshallings --
org.jenetics.util.IO.JAXB.register
- #90, #91: The manual contains now a section where the performance of the
MonteCarloSelector
and an evolutionarySelector
is compared (fig. 6.8, page 52). - #96: Merge branch with incubation module
org.jenetix
, which contains experimental classes. - #101: Add manual example for solving the Rastrigin function.
- #92: Fix example code in user manual.
- #94: Inconsistent pre-condition check of
Engine.Builder.build
method. - #99:
EvolutionResult
was not completely immutable.
- #68: Improve implementations of
Seq
interfaces. Note: The changes of this issue changes the Java serialization of theGenes
andChromosomes
.Gene
/Chromosomes
which has been serialized with version 3.3 can't be loaded with version 3.4. As a workaround, it is still possible to write theGenes
/Chromosomes
in XML format and load it with version 3.4. - #73: Add additional methods to
Seq
interface:Seq.append
andSeq.prepend
. - #79: Improve evolution performance measuring. Code resides now in (experimental)
org.jenetics.tool
module. - #85: Add support for fixed-sized subsets in
PermutationChromosome
class. See also codecs.ofSubSet(ISeq, int).
- #43: Add Evolving images example.
- #62: Two or more
Codec
interfaces can be combined into a single one. - #66: Add
AnyGene
andAnyChromosome
for arbitrary allele types.
- #24: Stabilize statistical selector tests.
- #25: Remove
testng.xml
file. The test classes are now determined automatically. - #40: Introduce
Codec
interface for defining problem encodings. - Add Internal section in manual, which describes implementation details.
- #33: Selectors must not change the input population. This occasionally caused
ConcurrentModificationException
. Such selectors are now creating a defensive copy of the input population. - #34:
IndexOutOfBoundsException
when selecting populations which are too short. - #35:
IndexOutOfBoundsException
when altering populations which are too short. - #39: Numerical instabilities of
ProbabilitySelector
. - #47:
Engine
deadlock for long running fitness functions.
- Additional termination strategies in
org.jenetics.engine.limit
class. - Add
EvolutionStream.of
factory method. This allows to use other evolution functions than theEngine
class. org.jenetics.stat.Quantile
has now acombine
method which lets them use in a parallel stream.- #12: Fix typos in user manual.
- #13: Add link to Javadoc and manual to README file.
- #14: Remove
Serializable
interface fromGene
andChromosome
. - #16: Make code examples in Javadoc standard conform.
- #17: Improve recombination section in manual.
- #20: Advance
Genotype
validity checks.
- Rewrite of engine classes to make use of Java 8 Stream API.