1 package net.bmahe.genetics4j.neat.mutation.chromosome;
2
3 import java.util.List;
4 import java.util.Objects;
5 import java.util.random.RandomGenerator;
6
7 import net.bmahe.genetics4j.core.spec.mutation.RandomMutation;
8 import net.bmahe.genetics4j.neat.Connection;
9 import net.bmahe.genetics4j.neat.chromosomes.NeatChromosome;
10
11 public class NeatChromosomeRandomMutationHandler
12 extends AbstractNeatChromosomeConnectionMutationHandler<RandomMutation>
13 {
14
15 public NeatChromosomeRandomMutationHandler(final RandomGenerator _randomGenerator) {
16 super(RandomMutation.class, _randomGenerator);
17 }
18
19 @Override
20 protected List<Connection> mutateConnection(final RandomMutation randomMutation, final NeatChromosome neatChromosome,
21 final Connection oldConnection, final int i) {
22 Objects.requireNonNull(randomMutation);
23 Objects.requireNonNull(neatChromosome);
24 Objects.requireNonNull(oldConnection);
25
26 final var connectionBuilder = Connection.builder().from(oldConnection);
27
28 final var minValue = neatChromosome.getMinWeightValue();
29 final var maxValue = neatChromosome.getMaxWeightValue();
30
31 final var randomGenerator = getRandomGenerator();
32
33
34 float newWeight = randomGenerator.nextFloat(maxValue - minValue) + minValue;
35 connectionBuilder.weight(newWeight);
36 return List.of(connectionBuilder.build());
37 }
38 }