View Javadoc
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  		// TODO use distribution
34  		float newWeight = randomGenerator.nextFloat(maxValue - minValue) + minValue;
35  		connectionBuilder.weight(newWeight);
36  		return List.of(connectionBuilder.build());
37  	}
38  }