diff options
Diffstat (limited to 'subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstWorker.java')
-rw-r--r-- | subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstWorker.java | 64 |
1 files changed, 35 insertions, 29 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 0f1702ea..f1bec14f 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 | |||
@@ -13,7 +13,7 @@ import tools.refinery.store.map.Version; | |||
13 | import tools.refinery.store.model.Model; | 13 | import tools.refinery.store.model.Model; |
14 | import tools.refinery.store.query.ModelQueryAdapter; | 14 | import tools.refinery.store.query.ModelQueryAdapter; |
15 | import tools.refinery.store.statecoding.StateCoderAdapter; | 15 | import tools.refinery.store.statecoding.StateCoderAdapter; |
16 | import tools.refinery.visualization.ModelVisualizerAdapter; | 16 | import tools.refinery.visualization.statespace.VisualizationStore; |
17 | 17 | ||
18 | import java.util.Random; | 18 | import java.util.Random; |
19 | 19 | ||
@@ -24,7 +24,7 @@ public class BestFirstWorker { | |||
24 | final StateCoderAdapter stateCoderAdapter; | 24 | final StateCoderAdapter stateCoderAdapter; |
25 | final DesignSpaceExplorationAdapter explorationAdapter; | 25 | final DesignSpaceExplorationAdapter explorationAdapter; |
26 | final ModelQueryAdapter queryAdapter; | 26 | final ModelQueryAdapter queryAdapter; |
27 | final ModelVisualizerAdapter visualizerAdapter; | 27 | final VisualizationStore visualizationStore; |
28 | final boolean isVisualizationEnabled; | 28 | final boolean isVisualizationEnabled; |
29 | 29 | ||
30 | public BestFirstWorker(BestFirstStoreManager storeManager, Model model) { | 30 | public BestFirstWorker(BestFirstStoreManager storeManager, Model model) { |
@@ -36,9 +36,8 @@ public class BestFirstWorker { | |||
36 | queryAdapter = model.getAdapter(ModelQueryAdapter.class); | 36 | queryAdapter = model.getAdapter(ModelQueryAdapter.class); |
37 | activationStoreWorker = new ActivationStoreWorker(storeManager.getActivationStore(), | 37 | activationStoreWorker = new ActivationStoreWorker(storeManager.getActivationStore(), |
38 | explorationAdapter.getTransformations()); | 38 | explorationAdapter.getTransformations()); |
39 | visualizerAdapter = model.getAdapter(ModelVisualizerAdapter.class); | 39 | visualizationStore = storeManager.getVisualizationStore(); |
40 | System.out.println("visualizerAdapter = " + visualizerAdapter); | 40 | isVisualizationEnabled = visualizationStore != null; |
41 | isVisualizationEnabled = visualizerAdapter != null; | ||
42 | } | 41 | } |
43 | 42 | ||
44 | private VersionWithObjectiveValue last = null; | 43 | private VersionWithObjectiveValue last = null; |
@@ -47,28 +46,41 @@ public class BestFirstWorker { | |||
47 | 46 | ||
48 | public SubmitResult submit() { | 47 | public SubmitResult submit() { |
49 | if (explorationAdapter.checkExclude()) { | 48 | if (explorationAdapter.checkExclude()) { |
50 | last = null; | ||
51 | return new SubmitResult(false, false, null, null); | 49 | return new SubmitResult(false, false, null, null); |
52 | } | 50 | } |
53 | 51 | ||
54 | Version version = model.commit(); | ||
55 | queryAdapter.flushChanges(); | ||
56 | ObjectiveValue objectiveValue = explorationAdapter.getObjectiveValue(); | ||
57 | last = new VersionWithObjectiveValue(version, objectiveValue); | ||
58 | var code = stateCoderAdapter.calculateStateCode(); | 52 | var code = stateCoderAdapter.calculateStateCode(); |
59 | var accepted = explorationAdapter.checkAccept(); | 53 | |
60 | boolean isNew = storeManager.getEquivalenceClassStore().submit(last, code, | 54 | boolean isNew = storeManager.getEquivalenceClassStore().submit(code); |
61 | activationStoreWorker.calculateEmptyActivationSize(), accepted); | 55 | if (isNew) { |
62 | return new SubmitResult(isNew, accepted, objectiveValue, isNew ? last : null); | 56 | Version version = model.commit(); |
57 | ObjectiveValue objectiveValue = explorationAdapter.getObjectiveValue(); | ||
58 | var versionWithObjectiveValue = new VersionWithObjectiveValue(version, objectiveValue); | ||
59 | last = versionWithObjectiveValue; | ||
60 | var accepted = explorationAdapter.checkAccept(); | ||
61 | |||
62 | storeManager.getObjectiveStore().submit(versionWithObjectiveValue); | ||
63 | storeManager.getActivationStore().markNewAsVisited(versionWithObjectiveValue, activationStoreWorker.calculateEmptyActivationSize()); | ||
64 | if(accepted) { | ||
65 | storeManager.solutionStore.submit(versionWithObjectiveValue); | ||
66 | } | ||
67 | |||
68 | if (isVisualizationEnabled) { | ||
69 | visualizationStore.addState(last.version(), last.objectiveValue().toString()); | ||
70 | if (accepted) { | ||
71 | visualizationStore.addSolution(last.version()); | ||
72 | } | ||
73 | } | ||
74 | |||
75 | return new SubmitResult(true, accepted, objectiveValue, last); | ||
76 | } | ||
77 | |||
78 | return new SubmitResult(false, false, null, null); | ||
63 | } | 79 | } |
64 | 80 | ||
65 | public void restoreToLast() { | 81 | public void restoreToLast() { |
66 | if (explorationAdapter.getModel().hasUncommittedChanges()) { | 82 | if (explorationAdapter.getModel().hasUncommittedChanges()) { |
67 | var oldVersion = model.getState(); | ||
68 | explorationAdapter.getModel().restore(last.version()); | 83 | explorationAdapter.getModel().restore(last.version()); |
69 | if (isVisualizationEnabled) { | ||
70 | visualizerAdapter.addTransition(oldVersion, last.version(), ""); | ||
71 | } | ||
72 | } | 84 | } |
73 | } | 85 | } |
74 | 86 | ||
@@ -78,7 +90,7 @@ public class BestFirstWorker { | |||
78 | var oldVersion = model.getState(); | 90 | var oldVersion = model.getState(); |
79 | this.model.restore(bestVersion.version()); | 91 | this.model.restore(bestVersion.version()); |
80 | if (isVisualizationEnabled) { | 92 | if (isVisualizationEnabled) { |
81 | visualizerAdapter.addTransition(oldVersion, last.version(), ""); | 93 | visualizationStore.addTransition(oldVersion, last.version(), ""); |
82 | } | 94 | } |
83 | } | 95 | } |
84 | return bestVersion; | 96 | return bestVersion; |
@@ -105,7 +117,7 @@ public class BestFirstWorker { | |||
105 | } | 117 | } |
106 | } | 118 | } |
107 | 119 | ||
108 | record RandomVisitResult(SubmitResult submitResult, boolean shouldRetry) { | 120 | public record RandomVisitResult(SubmitResult submitResult, boolean shouldRetry) { |
109 | } | 121 | } |
110 | 122 | ||
111 | public RandomVisitResult visitRandomUnvisited(Random random) { | 123 | public RandomVisitResult visitRandomUnvisited(Random random) { |
@@ -119,15 +131,9 @@ public class BestFirstWorker { | |||
119 | oldVersion = last.version(); | 131 | oldVersion = last.version(); |
120 | } | 132 | } |
121 | var submitResult = submit(); | 133 | var submitResult = submit(); |
122 | if (isVisualizationEnabled) { | 134 | if (isVisualizationEnabled && submitResult.newVersion() != null) { |
123 | 135 | var newVersion = submitResult.newVersion().version(); | |
124 | Version newVersion = null; | 136 | visualizationStore.addTransition(oldVersion, newVersion, ""); |
125 | if (submitResult.newVersion() != null) { | ||
126 | newVersion = submitResult.newVersion().version(); | ||
127 | visualizerAdapter.addState(newVersion, submitResult.newVersion().objectiveValue().toString()); | ||
128 | visualizerAdapter.addSolution(newVersion); | ||
129 | } | ||
130 | visualizerAdapter.addTransition(oldVersion, newVersion, ""); | ||
131 | } | 137 | } |
132 | return new RandomVisitResult(submitResult, visitResult.mayHaveMore()); | 138 | return new RandomVisitResult(submitResult, visitResult.mayHaveMore()); |
133 | } else { | 139 | } else { |