Releases: jenetics/jenetics
Releases · jenetics/jenetics
v9.0.0
v8.3.0
Improvements
- #933: Deprecate
RandomAdapterfor removal. - #935: Compile and test Jenetics with Java 24/25
- #938: Convert
Rangeclasses into records. - #943: Remove `org.apache.commons:commons-math3´ test dependency.
- #946: Create
io.jenetics.distassertmodule, used by statistical GA tests. - #948: Improve
GaussianMutatorimplementation. - #951: Improve testing for
RandomRegistry
Bugs
v8.2.0
Improvements
- #889: Allow adding annotations to
Cfgelements for Grammatical Evolution.
final var cfg2 = Cfg.<String>builder()
.R("expr", rule -> rule
.N("num", "annotation 1")
.N("var", "annotation 2")
.E(exp -> exp
.T("(")
.N("expr").N("op", 4).N("expr")
.T(")")))
.R("op", rule -> rule.T("+").T("-").T("*").T("/"))
.R("var", rule -> rule.T("x").T("y"))
.R("num", rule -> rule
.T("0").T("1").T("2").T("3").T("4")
.T("5").T("6").T("7").T("8").T("9")
)
.build();- #915: Remove usage of
java.security.AccessController. - #921: Remove
object == this"optimization" inequalsmethods. - #923: Improve parsing performance of
CsvSupport. - #925: INCUBATION: Implement statistical hypothesis tester. The statistical tests for the engine classes has been stabilized and can be written in the following way.
final var observation = new RunnableObservation(
Sampling.repeat(200_000, samples ->
samples.add(DoubleGene.of(0, 20).doubleValue())
),
Partition.of(0, 20, 20)
);
new StableRandomExecutor(seed).execute(observation);
assertThatObservation(observation).isUniform();Bugs
- #914: Fix
Samplers.linear(double)factory.
v8.1.0
Improvements
- #822: Improve the build script for generating combined Javadoc.
- #898: Add support for reading data from CSV files or strings. This simplifies the code for regression problems.
static List<Sample<Double>> parseDoubles(final CharSequence csv) {
return CsvSupport.parseDoubles(csv).stream()
.map(Sample::ofDouble)
.toList();
}- #904: Upgrade to Gradle 8.10 and cleanup of build scripts.
- #907: Add a chapter in the user's manual for optimization strategies: Practical Jenetics.
- #909: Helper methods for converting primitive arrays.
final Codec<int[], DoubleGene> codec = Codecs
.ofVector(DoubleRange.of(0, 100), 100)
.map(Conversions::doubleToIntArray);Bugs
- #419: Fix flaky statistical tests.
v8.0.0
Improvements
- Java 21 is used for building and using the library.
- #878: Allow Virtual-Threads evaluating the fitness function. Must be enabled when creating an
Engine(see code snippet below), the previous behaviour has been preserverd.
final Engine<DoubleGene, Double> engine = Engine.builder(ff)
.fitnessExecutor(BatchExecutor.ofVirtualThreads())
.build();- #880: Replace code examples in Javadoc with JEP 413.
- #886: Improve
CharStoresort. - #894: New genetic operators:
ShiftMutator,ShuffleMutatorandUniformOrderBasedCrossover. - #895: Improve default
RandomGeneratorselection. The usedRandomGeneratoris selected in the following order:- Check if the
io.jenetics.util.defaultRandomGeneratorstart parameter is set. If so, take this generator. - Check if the
L64X256MixRandomgenerator is available. If so, take this generator. - Find the best available random generator according to the
RandomGeneratorFactory.stateBits()value. - Use the
Randomgenerator if no best generator can be found. This generator is guaranteed to be available on every platform.
- Check if the
v7.2.0
Improvemments
- #862: Add a method, which allows to create a sliced (chromosome) view onto a given Genotype.
- #866: Allow specifying the default
RandomGeneratorused by the library.
java -Dio.jenetics.util.defaultRandomGenerator=L64X1024MixRandom\
-cp jenetics-@__version__@.jar:app.jar\
com.foo.bar.MyJeneticsAppjava
- #872: Improve generic type parameters for some argument types in
io.jenetics.progmodule. - #876: Fix compiler warnings with Java 21.
Bugs
v7.1.3
v7.1.2
v7.1.1
v7.1.0
Improvements
- #813: Re-implementation of
MathExprclass. Replace ad-hoc parsing implementation. - #815: Implement Grammatical-Evolution.
- #820: Additional
BitChromosomemethods:and,or,xor,not,shiftRight,shiftLeft. - #833: Implement
Tree::reducefunction. Allows to write code as follows:
final Tree<String, ?> formula = TreeNode.parse(
"add(sub(6, div(230, 10)), mul(5, 6))",
String::trim
);
final double result = formula.reduce(new Double[0], (op, args) ->
switch (op) {
case "add" -> args[0] + args[1];
case "sub" -> args[0] - args[1];
case "mul" -> args[0] * args[1];
case "div" -> args[0] / args[1];
default -> Double.parseDouble(op);
}
);