diff options
author | Oszkár Semeráth <semerath@mit.bme.hu> | 2023-09-06 21:45:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-06 21:45:24 +0200 |
commit | cd56679b71bfd54ac77287623fd0849516787034 (patch) | |
tree | ede411db35c283ed8841de3dc6a5accd1bc612ab | |
parent | Merge pull request #1 from nagilooh/datastructure (diff) | |
parent | Fix numerous issues with DSE (diff) | |
download | refinery-cd56679b71bfd54ac77287623fd0849516787034.tar.gz refinery-cd56679b71bfd54ac77287623fd0849516787034.tar.zst refinery-cd56679b71bfd54ac77287623fd0849516787034.zip |
Merge pull request #2 from nagilooh/datastructure
Fix numerous issues with DSE
5 files changed, 16 insertions, 18 deletions
diff --git a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstExplorer.java b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstExplorer.java index 03a7fca3..f82d7c06 100644 --- a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstExplorer.java +++ b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstExplorer.java | |||
@@ -58,6 +58,10 @@ public class BestFirstExplorer extends BestFirstWorker { | |||
58 | } | 58 | } |
59 | } | 59 | } |
60 | } | 60 | } |
61 | else { | ||
62 | lastVisited = null; | ||
63 | break; | ||
64 | } | ||
61 | } | 65 | } |
62 | 66 | ||
63 | //final ObjectiveComparatorHelper objectiveComparatorHelper = dseAdapter.getObjectiveComparatorHelper(); | 67 | //final ObjectiveComparatorHelper objectiveComparatorHelper = dseAdapter.getObjectiveComparatorHelper(); |
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 4240fdf9..b8662d8d 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 | |||
@@ -45,12 +45,12 @@ public class BestFirstWorker { | |||
45 | 45 | ||
46 | Version version = model.commit(); | 46 | Version version = model.commit(); |
47 | ObjectiveValue objectiveValue = explorationAdapter.getObjectiveValue(); | 47 | ObjectiveValue objectiveValue = explorationAdapter.getObjectiveValue(); |
48 | var res = new VersionWithObjectiveValue(version, objectiveValue); | 48 | last = new VersionWithObjectiveValue(version, objectiveValue); |
49 | var code = stateCoderAdapter.calculateStateCode(); | 49 | var code = stateCoderAdapter.calculateStateCode(); |
50 | var accepted = explorationAdapter.checkAccept(); | 50 | var accepted = explorationAdapter.checkAccept(); |
51 | boolean isNew = storeManager.getEquivalenceClassStore().submit(res, code, | 51 | boolean isNew = storeManager.getEquivalenceClassStore().submit(last, code, |
52 | activationStoreWorker.calculateEmptyActivationSize(), accepted); | 52 | activationStoreWorker.calculateEmptyActivationSize(), accepted); |
53 | return new SubmitResult(isNew, accepted, objectiveValue, isNew ? res : null); | 53 | return new SubmitResult(isNew, accepted, objectiveValue, isNew ? last : null); |
54 | } | 54 | } |
55 | 55 | ||
56 | public void restoreToLast() { | 56 | public void restoreToLast() { |
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 1229ec15..559c715a 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 | |||
@@ -66,7 +66,7 @@ public class ActivationStoreImpl implements ActivationStore { | |||
66 | activation = -1; | 66 | activation = -1; |
67 | } | 67 | } |
68 | 68 | ||
69 | if(hasMoreInActivation) { | 69 | if(!hasMoreInActivation) { |
70 | boolean hasMoreInOtherTransformation = false; | 70 | boolean hasMoreInOtherTransformation = false; |
71 | for (var e : entries) { | 71 | for (var e : entries) { |
72 | if (e != entry && e.getNumberOfVisitedActivations() > 0) { | 72 | if (e != entry && e.getNumberOfVisitedActivations() > 0) { |
@@ -83,7 +83,7 @@ public class ActivationStoreImpl implements ActivationStore { | |||
83 | actionWhenAllActivationVisited.accept(from); | 83 | actionWhenAllActivationVisited.accept(from); |
84 | } | 84 | } |
85 | 85 | ||
86 | return new VisitResult(false, hasMore, transformation, activation); | 86 | return new VisitResult(successfulVisit, hasMore, transformation, activation); |
87 | } | 87 | } |
88 | 88 | ||
89 | @Override | 89 | @Override |
@@ -116,7 +116,7 @@ public class ActivationStoreImpl implements ActivationStore { | |||
116 | var entry = entries.get(transformation); | 116 | var entry = entries.get(transformation); |
117 | int unvisited = entry.getNumberOfUnvisitedActivations(); | 117 | int unvisited = entry.getNumberOfUnvisitedActivations(); |
118 | if (selected < sum2 + unvisited) { | 118 | if (selected < sum2 + unvisited) { |
119 | activation = sum2 + unvisited - selected; | 119 | activation = sum2 + unvisited - selected - 1; |
120 | break; | 120 | break; |
121 | } else { | 121 | } else { |
122 | sum2 += unvisited; | 122 | sum2 += unvisited; |
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 249b22da..c88a411f 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 | |||
@@ -53,12 +53,7 @@ public class ObjectivePriorityQueueImpl implements ObjectivePriorityQueue { | |||
53 | 53 | ||
54 | @Override | 54 | @Override |
55 | public VersionWithObjectiveValue getBest() { | 55 | public VersionWithObjectiveValue getBest() { |
56 | var best = priorityQueue.peek(); | 56 | return priorityQueue.peek(); |
57 | if (best != null) { | ||
58 | return best; | ||
59 | } else { | ||
60 | throw new IllegalArgumentException("The objective store is empty!"); | ||
61 | } | ||
62 | } | 57 | } |
63 | 58 | ||
64 | @Override | 59 | @Override |
diff --git a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/SolutionStoreImpl.java b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/SolutionStoreImpl.java index cc48864f..43548eaa 100644 --- a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/SolutionStoreImpl.java +++ b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/statespace/internal/SolutionStoreImpl.java | |||
@@ -10,17 +10,17 @@ import tools.refinery.store.dse.transition.statespace.SolutionStore; | |||
10 | 10 | ||
11 | import java.util.ArrayList; | 11 | import java.util.ArrayList; |
12 | import java.util.List; | 12 | import java.util.List; |
13 | import java.util.SortedSet; | 13 | import java.util.PriorityQueue; |
14 | import java.util.TreeSet; | 14 | |
15 | 15 | ||
16 | public class SolutionStoreImpl implements SolutionStore { | 16 | public class SolutionStoreImpl implements SolutionStore { |
17 | final int maxNumberSolutions; | 17 | final int maxNumberSolutions; |
18 | public static final int UNLIMITED = -1; | 18 | public static final int UNLIMITED = -1; |
19 | final SortedSet<VersionWithObjectiveValue> solutions; | 19 | final PriorityQueue<VersionWithObjectiveValue> solutions; |
20 | 20 | ||
21 | public SolutionStoreImpl(int maxNumberSolutions) { | 21 | public SolutionStoreImpl(int maxNumberSolutions) { |
22 | this.maxNumberSolutions = maxNumberSolutions; | 22 | this.maxNumberSolutions = maxNumberSolutions; |
23 | solutions = new TreeSet<>(ObjectivePriorityQueueImpl.c1); | 23 | solutions = new PriorityQueue<>(ObjectivePriorityQueueImpl.c1.reversed()); |
24 | } | 24 | } |
25 | 25 | ||
26 | 26 | ||
@@ -29,8 +29,7 @@ public class SolutionStoreImpl implements SolutionStore { | |||
29 | boolean removeLast = hasEnoughSolution(); | 29 | boolean removeLast = hasEnoughSolution(); |
30 | solutions.add(version); | 30 | solutions.add(version); |
31 | if(removeLast) { | 31 | if(removeLast) { |
32 | var last = solutions.last(); | 32 | var last = solutions.poll(); |
33 | solutions.remove(last); | ||
34 | return last != version; | 33 | return last != version; |
35 | } else { | 34 | } else { |
36 | return true; | 35 | return true; |