aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar nagilooh <ficsorattila96@gmail.com>2023-09-05 20:49:41 +0200
committerLibravatar nagilooh <ficsorattila96@gmail.com>2023-09-05 20:49:41 +0200
commit2809374210839fb72f455d846cd483c711b5dcb0 (patch)
treef75cb1331ec3f47089a34bad1cc93d5597e1d365
parentfixed numerous issues with activation coder (diff)
downloadrefinery-2809374210839fb72f455d846cd483c711b5dcb0.tar.gz
refinery-2809374210839fb72f455d846cd483c711b5dcb0.tar.zst
refinery-2809374210839fb72f455d846cd483c711b5dcb0.zip
Add minor improvements and fixes for explorer
-rw-r--r--subprojects/store-dse/src/main/java/tools/refinery/store/dse/modification/internal/ModificationStoreAdapterImpl.java2
-rw-r--r--subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstExplorer.java13
-rw-r--r--subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstStoreManager.java4
-rw-r--r--subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstWorker.java7
-rw-r--r--subprojects/store-dse/src/test/java/tools/refinery/store/dse/CRAExamplesTest.java283
-rw-r--r--subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyCriterion.java17
-rw-r--r--subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyObjective.java13
7 files changed, 194 insertions, 145 deletions
diff --git a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/modification/internal/ModificationStoreAdapterImpl.java b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/modification/internal/ModificationStoreAdapterImpl.java
index 913cb33f..62e4227b 100644
--- a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/modification/internal/ModificationStoreAdapterImpl.java
+++ b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/modification/internal/ModificationStoreAdapterImpl.java
@@ -24,6 +24,6 @@ public class ModificationStoreAdapterImpl implements ModificationStoreAdapter {
24 24
25 @Override 25 @Override
26 public ModelAdapter createModelAdapter(Model model) { 26 public ModelAdapter createModelAdapter(Model model) {
27 return null; 27 return new ModificationAdapterImpl(this, model);
28 } 28 }
29} 29}
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 72bbbc55..03a7fca3 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
@@ -5,7 +5,6 @@
5 */ 5 */
6package tools.refinery.store.dse.strategy; 6package tools.refinery.store.dse.strategy;
7 7
8import tools.refinery.store.dse.transition.ObjectiveValue;
9import tools.refinery.store.dse.transition.VersionWithObjectiveValue; 8import tools.refinery.store.dse.transition.VersionWithObjectiveValue;
10import tools.refinery.store.model.Model; 9import tools.refinery.store.model.Model;
11 10
@@ -32,13 +31,11 @@ public class BestFirstExplorer extends BestFirstWorker {
32 public void explore() { 31 public void explore() {
33 VersionWithObjectiveValue lastVisited = submit().newVersion(); 32 VersionWithObjectiveValue lastVisited = submit().newVersion();
34 33
35 mainLoop: while (shouldRun()) { 34 while (shouldRun()) {
36 35
37 if (lastVisited == null) { 36 if (lastVisited == null) {
38 var restored = this.restoreToBest(); 37 lastVisited = this.restoreToBest();
39 if(restored != null) { 38 if(lastVisited == null) {
40 lastVisited = restored;
41 } else {
42 return; 39 return;
43 } 40 }
44 } 41 }
@@ -47,7 +44,7 @@ public class BestFirstExplorer extends BestFirstWorker {
47 while(tryActivation && shouldRun()) { 44 while(tryActivation && shouldRun()) {
48 RandomVisitResult randomVisitResult = this.visitRandomUnvisited(random); 45 RandomVisitResult randomVisitResult = this.visitRandomUnvisited(random);
49 46
50 tryActivation &= randomVisitResult.shouldRetry(); 47 tryActivation = randomVisitResult.shouldRetry();
51 var newSubmit = randomVisitResult.submitResult(); 48 var newSubmit = randomVisitResult.submitResult();
52 if(newSubmit != null) { 49 if(newSubmit != null) {
53 if(!newSubmit.include()) { 50 if(!newSubmit.include()) {
@@ -57,7 +54,7 @@ public class BestFirstExplorer extends BestFirstWorker {
57 int compareResult = compare(lastVisited,newVisit); 54 int compareResult = compare(lastVisited,newVisit);
58 if(compareResult >= 0) { 55 if(compareResult >= 0) {
59 lastVisited = newVisit; 56 lastVisited = newVisit;
60 continue mainLoop; 57 break;
61 } 58 }
62 } 59 }
63 } 60 }
diff --git a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstStoreManager.java b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstStoreManager.java
index d1fd7884..3795daa4 100644
--- a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstStoreManager.java
+++ b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstStoreManager.java
@@ -35,7 +35,7 @@ public class BestFirstStoreManager {
35 objectiveStore = new ObjectivePriorityQueueImpl(storeAdapter.getObjectives()); 35 objectiveStore = new ObjectivePriorityQueueImpl(storeAdapter.getObjectives());
36 Procedure<VersionWithObjectiveValue> whenAllActivationsVisited = x -> objectiveStore.remove(x); 36 Procedure<VersionWithObjectiveValue> whenAllActivationsVisited = x -> objectiveStore.remove(x);
37 activationStore = new ActivationStoreImpl(storeAdapter.getTransformations().size(), whenAllActivationsVisited); 37 activationStore = new ActivationStoreImpl(storeAdapter.getTransformations().size(), whenAllActivationsVisited);
38 solutionStore = new SolutionStoreImpl(1); 38 solutionStore = new SolutionStoreImpl(10);
39 equivalenceClassStore = new FastEquivalenceClassStore(modelStore.getAdapter(StateCoderStoreAdapter.class)) { 39 equivalenceClassStore = new FastEquivalenceClassStore(modelStore.getAdapter(StateCoderStoreAdapter.class)) {
40 @Override 40 @Override
41 protected void delegate(VersionWithObjectiveValue version, int[] emptyActivations, boolean accept) { 41 protected void delegate(VersionWithObjectiveValue version, int[] emptyActivations, boolean accept) {
@@ -56,7 +56,7 @@ public class BestFirstStoreManager {
56 return activationStore; 56 return activationStore;
57 } 57 }
58 58
59 SolutionStore getSolutionStore() { 59 public SolutionStore getSolutionStore() {
60 return solutionStore; 60 return solutionStore;
61 } 61 }
62 62
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 ea7fe43f..4240fdf9 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,6 @@ import tools.refinery.store.map.Version;
13import tools.refinery.store.model.Model; 13import tools.refinery.store.model.Model;
14import tools.refinery.store.statecoding.StateCoderAdapter; 14import tools.refinery.store.statecoding.StateCoderAdapter;
15 15
16
17import java.util.Random; 16import java.util.Random;
18 17
19public class BestFirstWorker { 18public class BestFirstWorker {
@@ -31,6 +30,7 @@ public class BestFirstWorker {
31 stateCoderAdapter = model.getAdapter(StateCoderAdapter.class); 30 stateCoderAdapter = model.getAdapter(StateCoderAdapter.class);
32 activationStoreWorker = new ActivationStoreWorker(storeManager.getActivationStore(), 31 activationStoreWorker = new ActivationStoreWorker(storeManager.getActivationStore(),
33 explorationAdapter.getTransformations()); 32 explorationAdapter.getTransformations());
33
34 } 34 }
35 35
36 private VersionWithObjectiveValue last = null; 36 private VersionWithObjectiveValue last = null;
@@ -48,12 +48,9 @@ public class BestFirstWorker {
48 var res = new VersionWithObjectiveValue(version, objectiveValue); 48 var res = 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
52 boolean isNew = storeManager.getEquivalenceClassStore().submit(res, code, 51 boolean isNew = storeManager.getEquivalenceClassStore().submit(res, code,
53 activationStoreWorker.calculateEmptyActivationSize(), accepted); 52 activationStoreWorker.calculateEmptyActivationSize(), accepted);
54 53 return new SubmitResult(isNew, accepted, objectiveValue, isNew ? res : null);
55 last = new VersionWithObjectiveValue(version, objectiveValue);
56 return new SubmitResult(isNew, accepted, objectiveValue, last);
57 } 54 }
58 55
59 public void restoreToLast() { 56 public void restoreToLast() {
diff --git a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/CRAExamplesTest.java b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/CRAExamplesTest.java
index 36517709..f4c38b18 100644
--- a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/CRAExamplesTest.java
+++ b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/CRAExamplesTest.java
@@ -5,13 +5,28 @@
5 */ 5 */
6package tools.refinery.store.dse; 6package tools.refinery.store.dse;
7 7
8import tools.refinery.store.dse.transition.TransformationRule; 8import org.junit.jupiter.api.Disabled;
9import org.junit.jupiter.api.Test;
10import tools.refinery.store.dse.modification.ModificationAdapter;
11import tools.refinery.store.dse.strategy.BestFirstStoreManager;
12import tools.refinery.store.dse.transition.DesignSpaceExplorationAdapter;
13import tools.refinery.store.dse.tests.DummyCriterion;
14import tools.refinery.store.dse.tests.DummyObjective;
15import tools.refinery.store.model.ModelStore;
16import tools.refinery.store.query.ModelQueryAdapter;
17import tools.refinery.store.query.dnf.FunctionalQuery;
9import tools.refinery.store.query.dnf.Query; 18import tools.refinery.store.query.dnf.Query;
10import tools.refinery.store.query.dnf.RelationalQuery; 19import tools.refinery.store.query.dnf.RelationalQuery;
20import tools.refinery.store.dse.transition.TransformationRule;
21import tools.refinery.store.query.term.Variable;
22import tools.refinery.store.query.viatra.ViatraModelQueryAdapter;
11import tools.refinery.store.query.view.AnySymbolView; 23import tools.refinery.store.query.view.AnySymbolView;
12import tools.refinery.store.query.view.KeyOnlyView; 24import tools.refinery.store.query.view.KeyOnlyView;
13import tools.refinery.store.representation.Symbol; 25import tools.refinery.store.representation.Symbol;
26import tools.refinery.store.statecoding.StateCoderAdapter;
14import tools.refinery.store.tuple.Tuple; 27import tools.refinery.store.tuple.Tuple;
28import tools.refinery.visualization.ModelVisualizerAdapter;
29import tools.refinery.visualization.internal.FileFormat;
15 30
16import java.util.List; 31import java.util.List;
17 32
@@ -121,42 +136,42 @@ class CRAExamplesTest {
121 }); 136 });
122 }); 137 });
123 138
124// private static final TransformationRule deleteEmptyClassRule = new TransformationRule("DeleteEmptyClass", 139 private static final TransformationRule deleteEmptyClassRule = new TransformationRule("DeleteEmptyClass",
125// deleteEmptyClassPrecondition, 140 deleteEmptyClassPrecondition,
126// (model) -> { 141 (model) -> {
127//// var classesInterpretation = model.getInterpretation(classes); 142// var classesInterpretation = model.getInterpretation(classes);
128// var classElementInterpretation = model.getInterpretation(classElement); 143 var classElementInterpretation = model.getInterpretation(classElement);
129// return ((Tuple activation) -> { 144 return ((Tuple activation) -> {
130// // TODO: can we move dseAdapter outside? 145 // TODO: can we move modificationAdapter outside?
131// var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); 146 var modificationAdapter = model.getAdapter(ModificationAdapter.class);
132//// var modelElement = activation.get(0); 147// var modelElement = activation.get(0);
133// var classElement = activation.get(0); 148 var classElement = activation.get(0);
134// 149
135//// classesInterpretation.put(Tuple.of(modelElement, classElement), false); 150// classesInterpretation.put(Tuple.of(modelElement, classElement), false);
136// classElementInterpretation.put(Tuple.of(classElement), false); 151 classElementInterpretation.put(Tuple.of(classElement), false);
137// dseAdapter.deleteObject(Tuple.of(classElement)); 152 modificationAdapter.deleteObject(Tuple.of(classElement));
138// }); 153 });
139// }); 154 });
140 155
141// private static final TransformationRule createClassRule = new TransformationRule("CreateClass", 156 private static final TransformationRule createClassRule = new TransformationRule("CreateClass",
142// createClassPrecondition, 157 createClassPrecondition,
143// (model) -> { 158 (model) -> {
144// var classElementInterpretation = model.getInterpretation(classElement); 159 var classElementInterpretation = model.getInterpretation(classElement);
145//// var classesInterpretation = model.getInterpretation(classes); 160// var classesInterpretation = model.getInterpretation(classes);
146// var encapsulatesInterpretation = model.getInterpretation(encapsulates); 161 var encapsulatesInterpretation = model.getInterpretation(encapsulates);
147// return ((Tuple activation) -> { 162 return ((Tuple activation) -> {
148// // TODO: can we move dseAdapter outside? 163 // TODO: can we move modificationAdapter outside?
149// var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); 164 var modificationAdapter = model.getAdapter(ModificationAdapter.class);
150//// var modelElement = activation.get(0); 165// var modelElement = activation.get(0);
151// var feature = activation.get(0); 166 var feature = activation.get(0);
152// 167
153// var newClassElement = dseAdapter.createObject(); 168 var newClassElement = modificationAdapter.createObject();
154// var newClassElementId = newClassElement.get(0); 169 var newClassElementId = newClassElement.get(0);
155// classElementInterpretation.put(newClassElement, true); 170 classElementInterpretation.put(newClassElement, true);
156//// classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); 171// classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true);
157// encapsulatesInterpretation.put(Tuple.of(newClassElementId, feature), true); 172 encapsulatesInterpretation.put(Tuple.of(newClassElementId, feature), true);
158// }); 173 });
159// }); 174 });
160 175
161 private static final TransformationRule moveFeatureRule = new TransformationRule("MoveFeature", 176 private static final TransformationRule moveFeatureRule = new TransformationRule("MoveFeature",
162 moveFeaturePrecondition, 177 moveFeaturePrecondition,
@@ -172,16 +187,16 @@ class CRAExamplesTest {
172 }); 187 });
173 }); 188 });
174 189
175// @Test 190 @Test
176// @Disabled("This test is only for debugging purposes") 191// @Disabled("This test is only for debugging purposes")
177// void craTest() { 192 void craTest() {
178// var store = ModelStore.builder() 193 var store = ModelStore.builder()
179// .symbols(classElement, encapsulates, classes, features, attribute, method, dataDependency, 194 .symbols(classElement, encapsulates, classes, features, attribute, method, dataDependency,
180// functionalDependency, name) 195 functionalDependency, name)
181// .with(ViatraModelQueryAdapter.builder() 196 .with(ViatraModelQueryAdapter.builder()
182// .queries(feature, assignFeaturePreconditionHelper, assignFeaturePrecondition, 197 .queries(feature, assignFeaturePreconditionHelper, assignFeaturePrecondition,
183// deleteEmptyClassPrecondition, createClassPreconditionHelper, createClassPrecondition, 198 deleteEmptyClassPrecondition, createClassPreconditionHelper, createClassPrecondition,
184// moveFeaturePrecondition)) 199 moveFeaturePrecondition))
185// .with(ModelVisualizerAdapter.builder() 200// .with(ModelVisualizerAdapter.builder()
186// .withOutputpath("test_output") 201// .withOutputpath("test_output")
187// .withFormat(FileFormat.DOT) 202// .withFormat(FileFormat.DOT)
@@ -189,89 +204,99 @@ class CRAExamplesTest {
189// .saveStates() 204// .saveStates()
190// .saveDesignSpace() 205// .saveDesignSpace()
191// ) 206// )
192// .with(DesignSpaceExplorationAdapter.builder() 207 .with(StateCoderAdapter.builder())
193// .transformations(assignFeatureRule, deleteEmptyClassRule, createClassRule, moveFeatureRule) 208 .with(ModificationAdapter.builder())
209 .with(DesignSpaceExplorationAdapter.builder()
210 .transformations(assignFeatureRule, deleteEmptyClassRule, createClassRule, moveFeatureRule)
211 .objectives(new DummyObjective())
212 .accept(new DummyCriterion(true))
213 .exclude(new DummyCriterion(false))
194// .objectives(new AlwaysSatisfiedRandomHardObjective()) 214// .objectives(new AlwaysSatisfiedRandomHardObjective())
195//// .strategy(new DepthFirstStrategy().withDepthLimit(3).continueIfHardObjectivesFulfilled() 215// .strategy(new DepthFirstStrategy().withDepthLimit(3).continueIfHardObjectivesFulfilled()
196// .strategy(new BestFirstStrategy().withDepthLimit(6).continueIfHardObjectivesFulfilled() 216// .strategy(new BestFirstStrategy().withDepthLimit(6).continueIfHardObjectivesFulfilled()
197//// .goOnOnlyIfFitnessIsBetter() 217// .goOnOnlyIfFitnessIsBetter())
198// )) 218 )
199// .build(); 219 .build();
200// 220
201// var model = store.createEmptyModel(); 221 var model = store.createEmptyModel();
202// var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); 222// modificationAdapter.setRandom(1);
203//// dseAdapter.setRandom(1); 223 var queryEngine = model.getAdapter(ModelQueryAdapter.class);
204// var queryEngine = model.getAdapter(ModelQueryAdapter.class); 224
205// 225// var modelInterpretation = model.getInterpretation(classModel);
206//// var modelInterpretation = model.getInterpretation(classModel); 226 var nameInterpretation = model.getInterpretation(name);
207// var nameInterpretation = model.getInterpretation(name); 227 var methodInterpretation = model.getInterpretation(method);
208// var methodInterpretation = model.getInterpretation(method); 228 var attributeInterpretation = model.getInterpretation(attribute);
209// var attributeInterpretation = model.getInterpretation(attribute); 229 var dataDependencyInterpretation = model.getInterpretation(dataDependency);
210// var dataDependencyInterpretation = model.getInterpretation(dataDependency); 230 var functionalDependencyInterpretation = model.getInterpretation(functionalDependency);
211// var functionalDependencyInterpretation = model.getInterpretation(functionalDependency); 231
212// 232 var modificationAdapter = model.getAdapter(ModificationAdapter.class);
213//// var modelElement = dseAdapter.createObject(); 233
214// var method1 = dseAdapter.createObject(); 234// var modelElement = modificationAdapter.createObject();
215// var method1Id = method1.get(0); 235 var method1 = modificationAdapter.createObject();
216// var method2 = dseAdapter.createObject(); 236 var method1Id = method1.get(0);
217// var method2Id = method2.get(0); 237 var method2 = modificationAdapter.createObject();
218// var method3 = dseAdapter.createObject(); 238 var method2Id = method2.get(0);
219// var method3Id = method3.get(0); 239 var method3 = modificationAdapter.createObject();
220// var method4 = dseAdapter.createObject(); 240 var method3Id = method3.get(0);
221// var method4Id = method4.get(0); 241 var method4 = modificationAdapter.createObject();
222// var attribute1 = dseAdapter.createObject(); 242 var method4Id = method4.get(0);
223// var attribute1Id = attribute1.get(0); 243 var attribute1 = modificationAdapter.createObject();
224// var attribute2 = dseAdapter.createObject(); 244 var attribute1Id = attribute1.get(0);
225// var attribute2Id = attribute2.get(0); 245 var attribute2 = modificationAdapter.createObject();
226// var attribute3 = dseAdapter.createObject(); 246 var attribute2Id = attribute2.get(0);
227// var attribute3Id = attribute3.get(0); 247 var attribute3 = modificationAdapter.createObject();
228// var attribute4 = dseAdapter.createObject(); 248 var attribute3Id = attribute3.get(0);
229// var attribute4Id = attribute4.get(0); 249 var attribute4 = modificationAdapter.createObject();
230// var attribute5 = dseAdapter.createObject(); 250 var attribute4Id = attribute4.get(0);
231// var attribute5Id = attribute5.get(0); 251 var attribute5 = modificationAdapter.createObject();
232// 252 var attribute5Id = attribute5.get(0);
233// nameInterpretation.put(method1, "M1"); 253
234// nameInterpretation.put(method2, "M2"); 254 nameInterpretation.put(method1, "M1");
235// nameInterpretation.put(method3, "M3"); 255 nameInterpretation.put(method2, "M2");
236// nameInterpretation.put(method4, "M4"); 256 nameInterpretation.put(method3, "M3");
237// nameInterpretation.put(attribute1, "A1"); 257 nameInterpretation.put(method4, "M4");
238// nameInterpretation.put(attribute2, "A2"); 258 nameInterpretation.put(attribute1, "A1");
239// nameInterpretation.put(attribute3, "A3"); 259 nameInterpretation.put(attribute2, "A2");
240// nameInterpretation.put(attribute4, "A4"); 260 nameInterpretation.put(attribute3, "A3");
241// nameInterpretation.put(attribute5, "A5"); 261 nameInterpretation.put(attribute4, "A4");
242// 262 nameInterpretation.put(attribute5, "A5");
243// 263
244// 264
245//// modelInterpretation.put(modelElement, true); 265
246// methodInterpretation.put(method1, true); 266// modelInterpretation.put(modelElement, true);
247// methodInterpretation.put(method2, true); 267 methodInterpretation.put(method1, true);
248// methodInterpretation.put(method3, true); 268 methodInterpretation.put(method2, true);
249// methodInterpretation.put(method4, true); 269 methodInterpretation.put(method3, true);
250// attributeInterpretation.put(attribute1, true); 270 methodInterpretation.put(method4, true);
251// attributeInterpretation.put(attribute2, true); 271 attributeInterpretation.put(attribute1, true);
252// attributeInterpretation.put(attribute3, true); 272 attributeInterpretation.put(attribute2, true);
253// attributeInterpretation.put(attribute4, true); 273 attributeInterpretation.put(attribute3, true);
254// attributeInterpretation.put(attribute5, true); 274 attributeInterpretation.put(attribute4, true);
255// 275 attributeInterpretation.put(attribute5, true);
256// dataDependencyInterpretation.put(Tuple.of(method1Id, attribute1Id), true); 276
257// dataDependencyInterpretation.put(Tuple.of(method1Id, attribute3Id), true); 277 dataDependencyInterpretation.put(Tuple.of(method1Id, attribute1Id), true);
258// dataDependencyInterpretation.put(Tuple.of(method2Id, attribute2Id), true); 278 dataDependencyInterpretation.put(Tuple.of(method1Id, attribute3Id), true);
259// dataDependencyInterpretation.put(Tuple.of(method3Id, attribute3Id), true); 279 dataDependencyInterpretation.put(Tuple.of(method2Id, attribute2Id), true);
260// dataDependencyInterpretation.put(Tuple.of(method3Id, attribute4Id), true); 280 dataDependencyInterpretation.put(Tuple.of(method3Id, attribute3Id), true);
261// dataDependencyInterpretation.put(Tuple.of(method4Id, attribute3Id), true); 281 dataDependencyInterpretation.put(Tuple.of(method3Id, attribute4Id), true);
262// dataDependencyInterpretation.put(Tuple.of(method4Id, attribute5Id), true); 282 dataDependencyInterpretation.put(Tuple.of(method4Id, attribute3Id), true);
263// 283 dataDependencyInterpretation.put(Tuple.of(method4Id, attribute5Id), true);
264// functionalDependencyInterpretation.put(Tuple.of(method1Id, attribute3Id), true); 284
265// functionalDependencyInterpretation.put(Tuple.of(method1Id, attribute4Id), true); 285 functionalDependencyInterpretation.put(Tuple.of(method1Id, attribute3Id), true);
266// functionalDependencyInterpretation.put(Tuple.of(method2Id, attribute1Id), true); 286 functionalDependencyInterpretation.put(Tuple.of(method1Id, attribute4Id), true);
267// functionalDependencyInterpretation.put(Tuple.of(method3Id, attribute1Id), true); 287 functionalDependencyInterpretation.put(Tuple.of(method2Id, attribute1Id), true);
268// functionalDependencyInterpretation.put(Tuple.of(method3Id, attribute4Id), true); 288 functionalDependencyInterpretation.put(Tuple.of(method3Id, attribute1Id), true);
269// functionalDependencyInterpretation.put(Tuple.of(method4Id, attribute2Id), true); 289 functionalDependencyInterpretation.put(Tuple.of(method3Id, attribute4Id), true);
270// 290 functionalDependencyInterpretation.put(Tuple.of(method4Id, attribute2Id), true);
271// queryEngine.flushChanges(); 291
272// 292 var initialVersion = model.commit();
273// var states = dseAdapter.explore(); 293 queryEngine.flushChanges();
274// System.out.println("states size: " + states.size()); 294
275// } 295 var bestFirst = new BestFirstStoreManager(store);
276//*/ 296 bestFirst.startExploration(initialVersion);
297 var resultStore = bestFirst.getSolutionStore();
298 System.out.println("states size: " + resultStore.getSolutions().size());
299 var modelVisualizerAdapter = model.getAdapter(ModelVisualizerAdapter.class);
300 modelVisualizerAdapter.visualize();
301 }
277} 302}
diff --git a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyCriterion.java b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyCriterion.java
new file mode 100644
index 00000000..6bcbd1c3
--- /dev/null
+++ b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyCriterion.java
@@ -0,0 +1,17 @@
1package tools.refinery.store.dse.tests;
2
3import tools.refinery.store.dse.transition.objectives.Criterion;
4import tools.refinery.store.dse.transition.objectives.CriterionCalculator;
5import tools.refinery.store.model.Model;
6
7public class DummyCriterion implements Criterion {
8 protected final boolean returnValue;
9 public DummyCriterion(boolean returnValue) {
10 this.returnValue = returnValue;
11 }
12
13 @Override
14 public CriterionCalculator createCalculator(Model model) {
15 return () -> returnValue;
16 }
17}
diff --git a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyObjective.java b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyObjective.java
new file mode 100644
index 00000000..77a23d62
--- /dev/null
+++ b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyObjective.java
@@ -0,0 +1,13 @@
1package tools.refinery.store.dse.tests;
2
3import tools.refinery.store.dse.transition.objectives.Objective;
4import tools.refinery.store.dse.transition.objectives.ObjectiveCalculator;
5import tools.refinery.store.model.Model;
6
7public class DummyObjective implements Objective {
8
9 @Override
10 public ObjectiveCalculator createCalculator(Model model) {
11 return () -> {return 0d;};
12 }
13}