aboutsummaryrefslogtreecommitdiffstats
path: root/src/jcgp/ea/StandardMutator.java
blob: 447338ae3f111c91611274fc01b9532ef387bd02 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package jcgp.ea;

import jcgp.Parameters;
import jcgp.Utilities;
import jcgp.population.Chromosome;
import jcgp.population.MutableElement;
import jcgp.population.Node;
import jcgp.population.Output;

public class StandardMutator implements Mutator {

	@Override
	public void mutate(Chromosome chromosome) {
		int mutations = (int) (Parameters.getMutationRate() * ((double) Parameters.getNodeCount() / 100));
		
		for (int i = 0; i < mutations; i++) {
			MutableElement m = chromosome.getRandomMutableElement();
			
			if (m instanceof Output) {
				m.setConnection(chromosome.getRandomConnection());
			} else if (m instanceof Node) {
				int geneType = Utilities.getRandomInt(1 + Parameters.getMaxArity());
				if (geneType < 1) {
					((Node) m).setFunction(Utilities.getRandomFunction());
				} else {
					m.setConnection(chromosome.getRandomConnection(((Node) m).getColumn()));
				}
			}
		}
	}
}