aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/NeighbourhoodCalculator.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/NeighbourhoodCalculator.java')
-rw-r--r--subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/NeighbourhoodCalculator.java14
1 files changed, 9 insertions, 5 deletions
diff --git a/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/NeighbourhoodCalculator.java b/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/NeighbourhoodCalculator.java
index 785fda7a..1442c915 100644
--- a/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/NeighbourhoodCalculator.java
+++ b/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/NeighbourhoodCalculator.java
@@ -18,21 +18,25 @@ import java.util.List;
18import java.util.Objects; 18import java.util.Objects;
19 19
20public class NeighbourhoodCalculator extends AbstractNeighbourhoodCalculator implements StateCodeCalculator { 20public class NeighbourhoodCalculator extends AbstractNeighbourhoodCalculator implements StateCodeCalculator {
21 private ObjectCodeImpl previousObjectCode = new ObjectCodeImpl();
22 private ObjectCodeImpl nextObjectCode = new ObjectCodeImpl();
23
21 public NeighbourhoodCalculator(List<? extends Interpretation<?>> interpretations, IntSet individuals) { 24 public NeighbourhoodCalculator(List<? extends Interpretation<?>> interpretations, IntSet individuals) {
22 super(interpretations, individuals); 25 super(interpretations, individuals);
23 } 26 }
24 27
25 public StateCoderResult calculateCodes() { 28 public StateCoderResult calculateCodes() {
26 ObjectCodeImpl previousObjectCode = new ObjectCodeImpl(); 29 previousObjectCode.clear();
30 nextObjectCode.clear();
27 initializeWithIndividuals(previousObjectCode); 31 initializeWithIndividuals(previousObjectCode);
28 32
29 int rounds = 0; 33 int rounds = 0;
30 do { 34 do {
31 final ObjectCodeImpl nextObjectCode = rounds == 0 ? new ObjectCodeImpl() :
32 new ObjectCodeImpl(previousObjectCode.getSize());
33
34 constructNextObjectCodes(previousObjectCode, nextObjectCode); 35 constructNextObjectCodes(previousObjectCode, nextObjectCode);
36 var tempObjectCode = previousObjectCode;
35 previousObjectCode = nextObjectCode; 37 previousObjectCode = nextObjectCode;
38 nextObjectCode = tempObjectCode;
39 nextObjectCode.clear();
36 rounds++; 40 rounds++;
37 } while (rounds <= 7 && rounds <= previousObjectCode.getEffectiveSize()); 41 } while (rounds <= 7 && rounds <= previousObjectCode.getEffectiveSize());
38 42
@@ -43,7 +47,7 @@ public class NeighbourhoodCalculator extends AbstractNeighbourhoodCalculator imp
43 private long calculateLastSum(ObjectCode codes) { 47 private long calculateLastSum(ObjectCode codes) {
44 long result = 0; 48 long result = 0;
45 for (var nullImpactValue : nullImpactValues) { 49 for (var nullImpactValue : nullImpactValues) {
46 result = result * 31 + Objects.hashCode(((Interpretation<?>) nullImpactValue).get(Tuple0.INSTANCE)); 50 result = result * PRIME + Objects.hashCode(((Interpretation<?>) nullImpactValue).get(Tuple0.INSTANCE));
47 } 51 }
48 52
49 for (int i = 0; i < codes.getSize(); i++) { 53 for (int i = 0; i < codes.getSize(); i++) {