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
12
13
14
15
16
17
18
19
20 public class NeatChromosomeRandomMutationHandler
21 extends AbstractNeatChromosomeConnectionMutationHandler<RandomMutation>
22 {
23
24 public NeatChromosomeRandomMutationHandler(final RandomGenerator _randomGenerator) {
25 super(RandomMutation.class, _randomGenerator);
26 }
27
28 @Override
29 protected List<Connection> mutateConnection(final RandomMutation randomMutation, final NeatChromosome neatChromosome,
30 final Connection oldConnection, final int i) {
31 Objects.requireNonNull(randomMutation);
32 Objects.requireNonNull(neatChromosome);
33 Objects.requireNonNull(oldConnection);
34
35 final var connectionBuilder = Connection.builder().from(oldConnection);
36
37 final var minValue = neatChromosome.getMinWeightValue();
38 final var maxValue = neatChromosome.getMaxWeightValue();
39
40 final var randomGenerator = getRandomGenerator();
41
42 float newWeight = randomGenerator.nextFloat(maxValue - minValue) + minValue;
43 connectionBuilder.weight(newWeight);
44 return List.of(connectionBuilder.build());
45 }
46 }