FitnessEvaluatorSync.java

1
package net.bmahe.genetics4j.core.evaluation;
2
3
import java.util.ArrayList;
4
import java.util.Comparator;
5
import java.util.List;
6
import java.util.Objects;
7
import java.util.concurrent.CompletableFuture;
8
import java.util.concurrent.ExecutorService;
9
10
import org.apache.commons.lang3.Validate;
11
import org.apache.logging.log4j.LogManager;
12
import org.apache.logging.log4j.Logger;
13
14
import net.bmahe.genetics4j.core.Fitness;
15
import net.bmahe.genetics4j.core.Genotype;
16
import net.bmahe.genetics4j.core.spec.EAConfiguration;
17
import net.bmahe.genetics4j.core.spec.EAExecutionContext;
18
19
/**
20
 * Wrapper around {@link net.bmahe.genetics4j.core.Fitness} for computing the fitness of a population
21
 * <p>In order to leverage multi-core systems and speed up computations, the population will be split according to the
22
 * number of partitions defined in
23
 * {@link net.bmahe.genetics4j.core.EASystemnet.bmahe.genetics4j.core.spec.EAExecutionContext#numberOfPartitions()} and
24
 * processed concurrently
25
 * 
26
 * @param <T>
27
 */
28
public class FitnessEvaluatorSync<T extends Comparable<T>> implements FitnessEvaluator<T> {
29
	public static final Logger logger = LogManager.getLogger(FitnessEvaluatorSync.class);
30
31
	private final EAExecutionContext<T> eaExecutionContext;
32
	private final EAConfiguration<T> eaConfigurationSync;
33
34
	private final ExecutorService executorService;
35
36
	public FitnessEvaluatorSync(final EAExecutionContext<T> _eaExecutionContext,
37
			final EAConfiguration<T> _eaConfigurationSync, final ExecutorService _executorService) {
38
		Objects.requireNonNull(_eaExecutionContext);
39
		Objects.requireNonNull(_eaConfigurationSync);
40
		Objects.requireNonNull(_executorService);
41
42 1 1. <init> : Removed assignment to member variable eaExecutionContext → KILLED
		this.eaExecutionContext = _eaExecutionContext;
43 1 1. <init> : Removed assignment to member variable eaConfigurationSync → KILLED
		this.eaConfigurationSync = _eaConfigurationSync;
44 1 1. <init> : Removed assignment to member variable executorService → KILLED
		this.executorService = _executorService;
45
	}
46
47
	@Override
48
	public List<T> evaluate(final long generation, final List<Genotype> population) {
49
		Validate.isTrue(generation >= 0);
50
		Objects.requireNonNull(population);
51
		Validate.isTrue(population.size() > 0);
52
53 1 1. evaluate : removed call to net/bmahe/genetics4j/core/spec/EAConfiguration::fitness → KILLED
		final Fitness<T> fitness = eaConfigurationSync.fitness();
54 1 1. evaluate : removed call to net/bmahe/genetics4j/core/spec/EAExecutionContext::numberOfPartitions → KILLED
		final int numPartitions = eaExecutionContext.numberOfPartitions();
55 7 1. evaluate : Replaced integer division with multiplication → SURVIVED
2. evaluate : replaced call to java/lang/Math::ceil with argument → SURVIVED
3. evaluate : removed call to java/util/List::size → SURVIVED
4. evaluate : removed call to java/lang/Math::ceil → SURVIVED
5. evaluate : replaced call to java/lang/Math::max with argument → TIMED_OUT
6. evaluate : removed call to java/lang/Math::max → TIMED_OUT
7. evaluate : Substituted 1 with 0 → TIMED_OUT
		final int partitionSize = Math.max(1, (int) Math.ceil(population.size() / numPartitions));
56
57 1 1. evaluate : removed call to java/util/ArrayList::<init> → KILLED
		final List<CompletableFuture<TaskResult<T>>> tasks = new ArrayList<>();
58 6 1. evaluate : removed conditional - replaced comparison check with true → TIMED_OUT
2. evaluate : changed conditional boundary → TIMED_OUT
3. evaluate : Substituted 0 with 1 → KILLED
4. evaluate : removed call to java/util/List::size → KILLED
5. evaluate : negated conditional → KILLED
6. evaluate : removed conditional - replaced comparison check with false → KILLED
		for (int i = 0; i < population.size();) {
59 8 1. evaluate : removed call to java/util/List::size → SURVIVED
2. evaluate : removed conditional - replaced comparison check with true → SURVIVED
3. evaluate : Replaced integer subtraction with addition → SURVIVED
4. evaluate : removed conditional - replaced comparison check with false → SURVIVED
5. evaluate : negated conditional → SURVIVED
6. evaluate : changed conditional boundary → SURVIVED
7. evaluate : removed call to java/util/List::size → TIMED_OUT
8. evaluate : Replaced integer subtraction with addition → KILLED
			final int numSubPopulation = population.size() - i > partitionSize ? partitionSize : population.size() - i;
60
			final int partitionStart = i;
61 1 1. evaluate : Replaced integer addition with subtraction → KILLED
			final int partitionEnd = partitionStart + numSubPopulation;
62 2 1. evaluate : replaced call to java/util/List::subList with receiver → KILLED
2. evaluate : removed call to java/util/List::subList → KILLED
			final List<Genotype> partition = population.subList(partitionStart, partitionEnd);
63 1 1. evaluate : removed call to java/util/concurrent/CompletableFuture::supplyAsync → KILLED
			final CompletableFuture<TaskResult<T>> asyncFitnessCompute = CompletableFuture.supplyAsync(() -> {
64 1 1. lambda$evaluate$0 : removed call to java/util/ArrayList::<init> → KILLED
				final List<T> fitnessPartition = new ArrayList<>(numSubPopulation);
65 6 1. lambda$evaluate$0 : removed conditional - replaced comparison check with false → KILLED
2. lambda$evaluate$0 : changed conditional boundary → KILLED
3. lambda$evaluate$0 : Substituted 0 with 1 → KILLED
4. lambda$evaluate$0 : removed call to java/util/List::size → KILLED
5. lambda$evaluate$0 : negated conditional → KILLED
6. lambda$evaluate$0 : removed conditional - replaced comparison check with true → KILLED
				for (int j = 0; j < partition.size(); j++) {
66 2 1. lambda$evaluate$0 : removed call to java/util/List::get → KILLED
2. lambda$evaluate$0 : removed call to net/bmahe/genetics4j/core/Fitness::compute → KILLED
					final T fitnessIndividual = fitness.compute(partition.get(j));
67 1 1. lambda$evaluate$0 : removed call to java/util/List::add → KILLED
					fitnessPartition.add(fitnessIndividual);
68
				}
69 1 1. lambda$evaluate$0 : removed call to net/bmahe/genetics4j/core/evaluation/TaskResult::<init> → KILLED
				final var taskResult = new TaskResult<>(partitionStart, fitnessPartition);
70 1 1. lambda$evaluate$0 : replaced return value with null for net/bmahe/genetics4j/core/evaluation/FitnessEvaluatorSync::lambda$evaluate$0 → KILLED
				return taskResult;
71
			}, executorService);
72 1 1. evaluate : removed call to java/util/List::add → KILLED
			tasks.add(asyncFitnessCompute);
73
74 1 1. evaluate : Replaced integer addition with subtraction → KILLED
			i += numSubPopulation;
75
		}
76
77 4 1. evaluate : removed call to java/util/List::size → SURVIVED
2. evaluate : removed call to java/util/concurrent/CompletableFuture::allOf → SURVIVED
3. evaluate : removed call to java/util/List::toArray → KILLED
4. evaluate : replaced call to java/util/List::toArray with argument → KILLED
		CompletableFuture.allOf(tasks.toArray(new CompletableFuture[tasks.size()]));
78
79 2 1. evaluate : removed call to java/util/List::size → SURVIVED
2. evaluate : removed call to java/util/ArrayList::<init> → KILLED
		final List<T> fitnessScores = new ArrayList<>(population.size());
80 1 1. evaluate : removed call to java/util/List::stream → KILLED
		tasks.stream()
81 2 1. evaluate : replaced call to java/util/stream/Stream::map with receiver → KILLED
2. evaluate : removed call to java/util/stream/Stream::map → KILLED
				.map(CompletableFuture::join)
82 3 1. evaluate : replaced call to java/util/stream/Stream::sorted with receiver → SURVIVED
2. evaluate : removed call to java/util/stream/Stream::sorted → KILLED
3. evaluate : removed call to java/util/Comparator::comparingInt → KILLED
				.sorted(Comparator.comparingInt(TaskResult::from))
83 1 1. evaluate : removed call to java/util/stream/Stream::forEach → KILLED
				.forEach(taskResult -> {
84 2 1. lambda$evaluate$1 : removed call to net/bmahe/genetics4j/core/evaluation/TaskResult::fitness → KILLED
2. lambda$evaluate$1 : removed call to java/util/List::addAll → KILLED
					fitnessScores.addAll(taskResult.fitness());
85
				});
86
87 1 1. evaluate : replaced return value with Collections.emptyList for net/bmahe/genetics4j/core/evaluation/FitnessEvaluatorSync::evaluate → KILLED
		return fitnessScores;
88
	}
89
}

Mutations

42

1.1
Location : <init>
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
Removed assignment to member variable eaExecutionContext → KILLED

43

1.1
Location : <init>
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
Removed assignment to member variable eaConfigurationSync → KILLED

44

1.1
Location : <init>
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
Removed assignment to member variable executorService → KILLED

53

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to net/bmahe/genetics4j/core/spec/EAConfiguration::fitness → KILLED

54

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to net/bmahe/genetics4j/core/spec/EAExecutionContext::numberOfPartitions → KILLED

55

1.1
Location : evaluate
Killed by : none
Replaced integer division with multiplication → SURVIVED
Covering tests

2.2
Location : evaluate
Killed by : none
replaced call to java/lang/Math::max with argument → TIMED_OUT

3.3
Location : evaluate
Killed by : none
removed call to java/lang/Math::max → TIMED_OUT

4.4
Location : evaluate
Killed by : none
replaced call to java/lang/Math::ceil with argument → SURVIVED Covering tests

5.5
Location : evaluate
Killed by : none
removed call to java/util/List::size → SURVIVED Covering tests

6.6
Location : evaluate
Killed by : none
removed call to java/lang/Math::ceil → SURVIVED Covering tests

7.7
Location : evaluate
Killed by : none
Substituted 1 with 0 → TIMED_OUT

57

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to java/util/ArrayList::<init> → KILLED

58

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
Substituted 0 with 1 → KILLED

2.2
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to java/util/List::size → KILLED

3.3
Location : evaluate
Killed by : none
removed conditional - replaced comparison check with true → TIMED_OUT

4.4
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
negated conditional → KILLED

5.5
Location : evaluate
Killed by : none
changed conditional boundary → TIMED_OUT

6.6
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed conditional - replaced comparison check with false → KILLED

59

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnce()]
Replaced integer subtraction with addition → KILLED

2.2
Location : evaluate
Killed by : none
removed call to java/util/List::size → SURVIVED
Covering tests

3.3
Location : evaluate
Killed by : none
removed conditional - replaced comparison check with true → SURVIVED Covering tests

4.4
Location : evaluate
Killed by : none
Replaced integer subtraction with addition → SURVIVED Covering tests

5.5
Location : evaluate
Killed by : none
removed call to java/util/List::size → TIMED_OUT

6.6
Location : evaluate
Killed by : none
removed conditional - replaced comparison check with false → SURVIVED Covering tests

7.7
Location : evaluate
Killed by : none
negated conditional → SURVIVED Covering tests

8.8
Location : evaluate
Killed by : none
changed conditional boundary → SURVIVED Covering tests

61

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
Replaced integer addition with subtraction → KILLED

62

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnce()]
replaced call to java/util/List::subList with receiver → KILLED

2.2
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to java/util/List::subList → KILLED

63

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to java/util/concurrent/CompletableFuture::supplyAsync → KILLED

64

1.1
Location : lambda$evaluate$0
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to java/util/ArrayList::<init> → KILLED

65

1.1
Location : lambda$evaluate$0
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed conditional - replaced comparison check with false → KILLED

2.2
Location : lambda$evaluate$0
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
changed conditional boundary → KILLED

3.3
Location : lambda$evaluate$0
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
Substituted 0 with 1 → KILLED

4.4
Location : lambda$evaluate$0
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to java/util/List::size → KILLED

5.5
Location : lambda$evaluate$0
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
negated conditional → KILLED

6.6
Location : lambda$evaluate$0
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed conditional - replaced comparison check with true → KILLED

66

1.1
Location : lambda$evaluate$0
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to java/util/List::get → KILLED

2.2
Location : lambda$evaluate$0
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to net/bmahe/genetics4j/core/Fitness::compute → KILLED

67

1.1
Location : lambda$evaluate$0
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to java/util/List::add → KILLED

69

1.1
Location : lambda$evaluate$0
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to net/bmahe/genetics4j/core/evaluation/TaskResult::<init> → KILLED

70

1.1
Location : lambda$evaluate$0
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
replaced return value with null for net/bmahe/genetics4j/core/evaluation/FitnessEvaluatorSync::lambda$evaluate$0 → KILLED

72

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to java/util/List::add → KILLED

74

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
Replaced integer addition with subtraction → KILLED

77

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to java/util/List::toArray → KILLED

2.2
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
replaced call to java/util/List::toArray with argument → KILLED

3.3
Location : evaluate
Killed by : none
removed call to java/util/List::size → SURVIVED
Covering tests

4.4
Location : evaluate
Killed by : none
removed call to java/util/concurrent/CompletableFuture::allOf → SURVIVED Covering tests

79

1.1
Location : evaluate
Killed by : none
removed call to java/util/List::size → SURVIVED
Covering tests

2.2
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to java/util/ArrayList::<init> → KILLED

80

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to java/util/List::stream → KILLED

81

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
replaced call to java/util/stream/Stream::map with receiver → KILLED

2.2
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to java/util/stream/Stream::map → KILLED

82

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to java/util/stream/Stream::sorted → KILLED

2.2
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to java/util/Comparator::comparingInt → KILLED

3.3
Location : evaluate
Killed by : none
replaced call to java/util/stream/Stream::sorted with receiver → SURVIVED
Covering tests

83

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to java/util/stream/Stream::forEach → KILLED

84

1.1
Location : lambda$evaluate$1
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to net/bmahe/genetics4j/core/evaluation/TaskResult::fitness → KILLED

2.2
Location : lambda$evaluate$1
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
removed call to java/util/List::addAll → KILLED

87

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnceWithDifferentGenerations()]
replaced return value with Collections.emptyList for net/bmahe/genetics4j/core/evaluation/FitnessEvaluatorSync::evaluate → KILLED

Active mutators

Tests examined


Report generated by PIT 1.20.3