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

Mutations

43

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

44

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

45

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

54

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

55

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

56

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

58

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

59

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnce()]
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:testEvaluateOnce()]
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:testEvaluateOnce()]
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:testEvaluateOnce()]
removed conditional - replaced comparison check with false → KILLED

60

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 : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnce()]
removed call to java/util/List::size → KILLED

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

62

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

63

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:testEvaluateOnce()]
removed call to java/util/List::subList → KILLED

64

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnce()]
removed call to java/util/concurrent/CompletableFuture::supplyAsync → 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:testEvaluateOnce()]
removed call to java/util/ArrayList::<init> → 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:testEvaluateOnce()]
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:testEvaluateOnce()]
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:testEvaluateOnce()]
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:testEvaluateOnce()]
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:testEvaluateOnce()]
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:testEvaluateOnce()]
removed conditional - replaced comparison check with true → 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:testEvaluateOnce()]
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:testEvaluateOnce()]
removed call to net/bmahe/genetics4j/core/Fitness::compute → KILLED

68

1.1
Location : lambda$evaluate$0
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnce()]
removed call to java/util/List::add → 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:testEvaluateOnce()]
removed call to net/bmahe/genetics4j/core/evaluation/TaskResult::<init> → KILLED

71

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

73

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

75

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

78

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnce()]
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:testEvaluateOnce()]
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

80

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:testEvaluateOnce()]
removed call to java/util/ArrayList::<init> → KILLED

81

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

82

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/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:testEvaluateOnce()]
removed call to java/util/stream/Stream::map → KILLED

83

1.1
Location : evaluate
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnce()]
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:testEvaluateOnce()]
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

84

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

85

1.1
Location : lambda$evaluate$1
Killed by : net.bmahe.genetics4j.core.EASystemTest.[engine:junit-jupiter]/[class:net.bmahe.genetics4j.core.EASystemTest]/[method:testEvaluateOnce()]
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:testEvaluateOnce()]
removed call to java/util/List::addAll → KILLED

88

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

Active mutators

Tests examined


Report generated by PIT 1.19.6