From 7fb2e47c13f798511b0fa6b47c34f53d42c00f34 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Tue, 8 Aug 2023 19:37:54 +0200 Subject: ObjectCodeImpl.effectiveSize introduced to correctly handle models with different indices. --- .../neighbourhood/NeighbourhoodCalculator.java | 2 +- .../statecoding/neighbourhood/ObjectCodeImpl.java | 29 ++++++++++++++-------- 2 files changed, 20 insertions(+), 11 deletions(-) (limited to 'subprojects/store/src/main/java/tools') 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 d3b3ccae..5b3e5ea3 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 @@ -34,7 +34,7 @@ public class NeighbourhoodCalculator extends AbstractNeighbourhoodCalculator imp constructNextObjectCodes(previousObjectCode, nextObjectCode); previousObjectCode = nextObjectCode; rounds++; - } while (rounds <= 7 && rounds <= previousObjectCode.getSize()); + } while (rounds <= 7 && rounds <= previousObjectCode.getEffectiveSize()); long result = calculateLastSum(previousObjectCode); return new StateCoderResult((int) result, previousObjectCode); diff --git a/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/ObjectCodeImpl.java b/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/ObjectCodeImpl.java index 0d629176..0cd7ff58 100644 --- a/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/ObjectCodeImpl.java +++ b/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/ObjectCodeImpl.java @@ -12,31 +12,35 @@ import java.util.Arrays; public class ObjectCodeImpl implements ObjectCode { private long[] vector; private int size; + private int effectiveSize; public ObjectCodeImpl() { vector = new long[10]; size = 0; + effectiveSize = 0; } public ObjectCodeImpl(int size) { this.vector = new long[size]; this.size = size; + effectiveSize = 0; } public ObjectCodeImpl(ObjectCodeImpl copy) { - this.vector = Arrays.copyOf(copy.vector,copy.size); + this.vector = Arrays.copyOf(copy.vector, copy.size); this.size = copy.size; + effectiveSize = copy.effectiveSize; } public void ensureSize(int object) { - if(object >= size) { - size = object+1; + if (object >= size) { + size = object + 1; } - if(object >= vector.length) { - int newLength = vector.length*2; - while(object >= newLength) { - newLength*=2; + if (object >= vector.length) { + int newLength = vector.length * 2; + while (object >= newLength) { + newLength *= 2; } long[] newVector = new long[newLength]; @@ -46,7 +50,7 @@ public class ObjectCodeImpl implements ObjectCode { } public long get(int object) { - if(object < vector.length) { + if (object < vector.length) { return vector[object]; } else { return 0; @@ -56,17 +60,22 @@ public class ObjectCodeImpl implements ObjectCode { public void set(int object, long value) { ensureSize(object); final long valueToPut = value == 0 ? 1 : value; - vector[object]=valueToPut; + if (vector[object] == 0) effectiveSize++; + vector[object] = valueToPut; } public int getSize() { return this.size; } + public int getEffectiveSize() { + return this.effectiveSize; + } + @Override public String toString() { return "ObjectCodeImpl{" + - "vector=" + Arrays.toString(Arrays.copyOf(vector,this.size)) + + "vector=" + Arrays.toString(Arrays.copyOf(vector, this.size)) + '}'; } } -- cgit v1.2.3-70-g09d2