aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <semerath@mit.bme.hu>2023-09-07 02:07:35 +0200
committerLibravatar OszkarSemerath <semerath@mit.bme.hu>2023-09-07 02:07:35 +0200
commit5bfea37c2d5af9e2dda7725a75cc073ca8283cfa (patch)
treefb42b45bcb15fffb2fc41f7a7dea4c80c4d7b680
parentSample tests for the dse adapter (diff)
downloadrefinery-5bfea37c2d5af9e2dda7725a75cc073ca8283cfa.tar.gz
refinery-5bfea37c2d5af9e2dda7725a75cc073ca8283cfa.tar.zst
refinery-5bfea37c2d5af9e2dda7725a75cc073ca8283cfa.zip
missing synchronized statements and flush added
-rw-r--r--subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstWorker.java6
-rw-r--r--subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/ActivationStoreImpl.java2
-rw-r--r--subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/FastEquivalenceClassStore.java5
-rw-r--r--subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/ObjectivePriorityQueueImpl.java11
4 files changed, 14 insertions, 10 deletions
diff --git a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstWorker.java b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstWorker.java
index b8662d8d..f28505c3 100644
--- a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstWorker.java
+++ b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstWorker.java
@@ -11,6 +11,7 @@ import tools.refinery.store.dse.transition.VersionWithObjectiveValue;
11import tools.refinery.store.dse.transition.statespace.internal.ActivationStoreWorker; 11import tools.refinery.store.dse.transition.statespace.internal.ActivationStoreWorker;
12import tools.refinery.store.map.Version; 12import tools.refinery.store.map.Version;
13import tools.refinery.store.model.Model; 13import tools.refinery.store.model.Model;
14import tools.refinery.store.query.ModelQueryAdapter;
14import tools.refinery.store.statecoding.StateCoderAdapter; 15import tools.refinery.store.statecoding.StateCoderAdapter;
15 16
16import java.util.Random; 17import java.util.Random;
@@ -21,6 +22,7 @@ public class BestFirstWorker {
21 final ActivationStoreWorker activationStoreWorker; 22 final ActivationStoreWorker activationStoreWorker;
22 final StateCoderAdapter stateCoderAdapter; 23 final StateCoderAdapter stateCoderAdapter;
23 final DesignSpaceExplorationAdapter explorationAdapter; 24 final DesignSpaceExplorationAdapter explorationAdapter;
25 final ModelQueryAdapter queryAdapter;
24 26
25 public BestFirstWorker(BestFirstStoreManager storeManager, Model model) { 27 public BestFirstWorker(BestFirstStoreManager storeManager, Model model) {
26 this.storeManager = storeManager; 28 this.storeManager = storeManager;
@@ -28,9 +30,9 @@ public class BestFirstWorker {
28 30
29 explorationAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); 31 explorationAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class);
30 stateCoderAdapter = model.getAdapter(StateCoderAdapter.class); 32 stateCoderAdapter = model.getAdapter(StateCoderAdapter.class);
33 queryAdapter = model.getAdapter(ModelQueryAdapter.class);
31 activationStoreWorker = new ActivationStoreWorker(storeManager.getActivationStore(), 34 activationStoreWorker = new ActivationStoreWorker(storeManager.getActivationStore(),
32 explorationAdapter.getTransformations()); 35 explorationAdapter.getTransformations());
33
34 } 36 }
35 37
36 private VersionWithObjectiveValue last = null; 38 private VersionWithObjectiveValue last = null;
@@ -93,7 +95,9 @@ public class BestFirstWorker {
93 95
94 public RandomVisitResult visitRandomUnvisited(Random random) { 96 public RandomVisitResult visitRandomUnvisited(Random random) {
95 if (!model.hasUncommittedChanges()) { 97 if (!model.hasUncommittedChanges()) {
98 queryAdapter.flushChanges();
96 var visitResult = activationStoreWorker.fireRandomActivation(this.last, random); 99 var visitResult = activationStoreWorker.fireRandomActivation(this.last, random);
100
97 if (visitResult.successfulVisit()) { 101 if (visitResult.successfulVisit()) {
98 return new RandomVisitResult(submit(), visitResult.mayHaveMore()); 102 return new RandomVisitResult(submit(), visitResult.mayHaveMore());
99 } else { 103 } else {
diff --git a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/ActivationStoreImpl.java b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/ActivationStoreImpl.java
index 559c715a..fbd5b17f 100644
--- a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/ActivationStoreImpl.java
+++ b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/ActivationStoreImpl.java
@@ -29,7 +29,7 @@ public class ActivationStoreImpl implements ActivationStore {
29 successful[0] = true; 29 successful[0] = true;
30 List<ActivationStoreEntry> result = new ArrayList<>(emptyEntrySizes.length); 30 List<ActivationStoreEntry> result = new ArrayList<>(emptyEntrySizes.length);
31 for(int emptyEntrySize : emptyEntrySizes) { 31 for(int emptyEntrySize : emptyEntrySizes) {
32 result.add(ActivationStoreListEntry.create(emptyEntrySize)); 32 result.add(ActivationStoreEntry.create(emptyEntrySize));
33 } 33 }
34 return result; 34 return result;
35 }); 35 });
diff --git a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/FastEquivalenceClassStore.java b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/FastEquivalenceClassStore.java
index 75e117c0..faeedba5 100644
--- a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/FastEquivalenceClassStore.java
+++ b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/FastEquivalenceClassStore.java
@@ -15,13 +15,14 @@ public abstract class FastEquivalenceClassStore extends AbstractEquivalenceClass
15 15
16 final IntHashSet codes; 16 final IntHashSet codes;
17 17
18 public FastEquivalenceClassStore(StateCoderStoreAdapter stateCoderStoreAdapter) { 18 protected FastEquivalenceClassStore(StateCoderStoreAdapter stateCoderStoreAdapter) {
19 super(stateCoderStoreAdapter); 19 super(stateCoderStoreAdapter);
20 this.codes = new IntHashSet(); 20 this.codes = new IntHashSet();
21 } 21 }
22 22
23 @Override 23 @Override
24 protected boolean tryToAdd(StateCoderResult stateCoderResult, VersionWithObjectiveValue newVersion, int[] emptyActivations, boolean accept) { 24 protected synchronized boolean tryToAdd(StateCoderResult stateCoderResult, VersionWithObjectiveValue newVersion,
25 int[] emptyActivations, boolean accept) {
25 return this.codes.add(stateCoderResult.modelCode()); 26 return this.codes.add(stateCoderResult.modelCode());
26 } 27 }
27 28
diff --git a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/ObjectivePriorityQueueImpl.java b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/ObjectivePriorityQueueImpl.java
index c88a411f..2f3e142a 100644
--- a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/ObjectivePriorityQueueImpl.java
+++ b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/ObjectivePriorityQueueImpl.java
@@ -9,7 +9,6 @@ import tools.refinery.store.dse.transition.ObjectiveValues;
9import tools.refinery.store.dse.transition.VersionWithObjectiveValue; 9import tools.refinery.store.dse.transition.VersionWithObjectiveValue;
10import tools.refinery.store.dse.transition.objectives.Objective; 10import tools.refinery.store.dse.transition.objectives.Objective;
11import tools.refinery.store.dse.transition.statespace.ObjectivePriorityQueue; 11import tools.refinery.store.dse.transition.statespace.ObjectivePriorityQueue;
12import tools.refinery.store.map.Version;
13 12
14import java.util.Comparator; 13import java.util.Comparator;
15import java.util.List; 14import java.util.List;
@@ -37,27 +36,27 @@ public class ObjectivePriorityQueueImpl implements ObjectivePriorityQueue {
37 } 36 }
38 37
39 @Override 38 @Override
40 public void submit(VersionWithObjectiveValue versionWithObjectiveValue) { 39 public synchronized void submit(VersionWithObjectiveValue versionWithObjectiveValue) {
41 priorityQueue.add(versionWithObjectiveValue); 40 priorityQueue.add(versionWithObjectiveValue);
42 } 41 }
43 42
44 @Override 43 @Override
45 public void remove(VersionWithObjectiveValue versionWithObjectiveValue) { 44 public synchronized void remove(VersionWithObjectiveValue versionWithObjectiveValue) {
46 priorityQueue.remove(versionWithObjectiveValue); 45 priorityQueue.remove(versionWithObjectiveValue);
47 } 46 }
48 47
49 @Override 48 @Override
50 public int getSize() { 49 public synchronized int getSize() {
51 return priorityQueue.size(); 50 return priorityQueue.size();
52 } 51 }
53 52
54 @Override 53 @Override
55 public VersionWithObjectiveValue getBest() { 54 public synchronized VersionWithObjectiveValue getBest() {
56 return priorityQueue.peek(); 55 return priorityQueue.peek();
57 } 56 }
58 57
59 @Override 58 @Override
60 public VersionWithObjectiveValue getRandom(Random random) { 59 public synchronized VersionWithObjectiveValue getRandom(Random random) {
61 int randomPosition = random.nextInt(getSize()); 60 int randomPosition = random.nextInt(getSize());
62 for (VersionWithObjectiveValue entry : this.priorityQueue) { 61 for (VersionWithObjectiveValue entry : this.priorityQueue) {
63 if (randomPosition-- == 0) { 62 if (randomPosition-- == 0) {