aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstWorker.java
diff options
context:
space:
mode:
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.java64
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;
13import tools.refinery.store.model.Model; 13import tools.refinery.store.model.Model;
14import tools.refinery.store.query.ModelQueryAdapter; 14import tools.refinery.store.query.ModelQueryAdapter;
15import tools.refinery.store.statecoding.StateCoderAdapter; 15import tools.refinery.store.statecoding.StateCoderAdapter;
16import tools.refinery.visualization.ModelVisualizerAdapter; 16import tools.refinery.visualization.statespace.VisualizationStore;
17 17
18import java.util.Random; 18import 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 {