aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-query-viatra
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store-query-viatra')
-rw-r--r--subprojects/store-query-viatra/build.gradle.kts1
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/dse/internal/DesignSpaceExplorationAdapterImpl.java21
-rw-r--r--subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/dse/DebugTest.java15
3 files changed, 30 insertions, 7 deletions
diff --git a/subprojects/store-query-viatra/build.gradle.kts b/subprojects/store-query-viatra/build.gradle.kts
index 1f804247..ef73e10a 100644
--- a/subprojects/store-query-viatra/build.gradle.kts
+++ b/subprojects/store-query-viatra/build.gradle.kts
@@ -10,7 +10,6 @@ plugins {
10 10
11dependencies { 11dependencies {
12 implementation(libs.ecore) 12 implementation(libs.ecore)
13 implementation ("guru.nidi:graphviz-java:0.18.1")
14 api(libs.viatra) 13 api(libs.viatra)
15 api(project(":refinery-store-query")) 14 api(project(":refinery-store-query"))
16 api(project(":refinery-store-reasoning")) 15 api(project(":refinery-store-reasoning"))
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/dse/internal/DesignSpaceExplorationAdapterImpl.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/dse/internal/DesignSpaceExplorationAdapterImpl.java
index c4c51e79..0fcc719d 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/dse/internal/DesignSpaceExplorationAdapterImpl.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/dse/internal/DesignSpaceExplorationAdapterImpl.java
@@ -15,6 +15,7 @@ import tools.refinery.store.query.resultset.ResultSet;
15import tools.refinery.store.representation.Symbol; 15import tools.refinery.store.representation.Symbol;
16import tools.refinery.store.tuple.Tuple; 16import tools.refinery.store.tuple.Tuple;
17import tools.refinery.store.tuple.Tuple1; 17import tools.refinery.store.tuple.Tuple1;
18import tools.refinery.visualization.ModelVisualizerAdapter;
18 19
19import java.util.*; 20import java.util.*;
20 21
@@ -40,6 +41,8 @@ public class DesignSpaceExplorationAdapterImpl implements DesignSpaceExploration
40 private Random random = new Random(); 41 private Random random = new Random();
41 private Objective[][] leveledObjectives; 42 private Objective[][] leveledObjectives;
42 private boolean isNewState = false; 43 private boolean isNewState = false;
44 private final boolean isVisualizationEnabled;
45 private final ModelVisualizerAdapter modelVisualizerAdapter;
43 46
44 public List<Long> getTrajectory() { 47 public List<Long> getTrajectory() {
45 return new LinkedList<>(trajectory); 48 return new LinkedList<>(trajectory);
@@ -66,6 +69,8 @@ public class DesignSpaceExplorationAdapterImpl implements DesignSpaceExploration
66 statesAndUntraversedActivations = new HashMap<>(); 69 statesAndUntraversedActivations = new HashMap<>();
67 statesAndTraversedActivations = new HashMap<>(); 70 statesAndTraversedActivations = new HashMap<>();
68 strategy = storeAdapter.getStrategy(); 71 strategy = storeAdapter.getStrategy();
72 modelVisualizerAdapter = model.tryGetAdapter(ModelVisualizerAdapter.class).orElse(null);
73 isVisualizationEnabled = modelVisualizerAdapter != null;
69 74
70 } 75 }
71 76
@@ -129,6 +134,10 @@ public class DesignSpaceExplorationAdapterImpl implements DesignSpaceExploration
129 if (trajectory.size() < 2) { 134 if (trajectory.size() < 2) {
130 return false; 135 return false;
131 } 136 }
137 if (isVisualizationEnabled) {
138 modelVisualizerAdapter.addTransition(trajectory.get(trajectory.size() - 1),
139 trajectory.get(trajectory.size() - 2), "backtrack");
140 }
132 model.restore(trajectory.get(trajectory.size() - 2)); 141 model.restore(trajectory.get(trajectory.size() - 2));
133 trajectory.remove(trajectory.size() - 1); 142 trajectory.remove(trajectory.size() - 1);
134 return true; 143 return true;
@@ -137,6 +146,10 @@ public class DesignSpaceExplorationAdapterImpl implements DesignSpaceExploration
137 @Override 146 @Override
138 public void restoreTrajectory(List<Long> trajectory) { 147 public void restoreTrajectory(List<Long> trajectory) {
139 model.restore(trajectory.get(trajectory.size() - 1)); 148 model.restore(trajectory.get(trajectory.size() - 1));
149// if (isVisualizationEnabled) {
150// modelVisualizerAdapter.addTransition(this.trajectory.get(trajectory.size() - 1),
151// trajectory.get(trajectory.size() - 1), "restore");
152// }
140 this.trajectory = trajectory; 153 this.trajectory = trajectory;
141 154
142 } 155 }
@@ -173,6 +186,9 @@ public class DesignSpaceExplorationAdapterImpl implements DesignSpaceExploration
173 public void newSolution() { 186 public void newSolution() {
174 var state = model.getState(); 187 var state = model.getState();
175 solutions.add(state); 188 solutions.add(state);
189 if (isVisualizationEnabled) {
190 modelVisualizerAdapter.addSolution(state);
191 }
176 } 192 }
177 193
178 @Override 194 @Override
@@ -212,6 +228,11 @@ public class DesignSpaceExplorationAdapterImpl implements DesignSpaceExploration
212 isNewState = !statesAndUntraversedActivations.containsKey(newState); 228 isNewState = !statesAndUntraversedActivations.containsKey(newState);
213 statesAndUntraversedActivations.put(newState, getAllActivations()); 229 statesAndUntraversedActivations.put(newState, getAllActivations());
214 statesAndTraversedActivations.put(newState, new HashSet<>()); 230 statesAndTraversedActivations.put(newState, new HashSet<>());
231 if (isVisualizationEnabled) {
232 modelVisualizerAdapter.addTransition(trajectory.get(trajectory.size() - 2),
233 trajectory.get(trajectory.size() - 1), activation.transformationRule().getName(),
234 activation.activation());
235 }
215 return true; 236 return true;
216 } 237 }
217 238
diff --git a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/dse/DebugTest.java b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/dse/DebugTest.java
index 969afbcb..821be7e6 100644
--- a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/dse/DebugTest.java
+++ b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/dse/DebugTest.java
@@ -5,6 +5,7 @@ import tools.refinery.store.model.ModelStore;
5import tools.refinery.store.query.ModelQueryAdapter; 5import tools.refinery.store.query.ModelQueryAdapter;
6import tools.refinery.store.query.dnf.Query; 6import tools.refinery.store.query.dnf.Query;
7import tools.refinery.store.query.dse.internal.TransformationRule; 7import tools.refinery.store.query.dse.internal.TransformationRule;
8import tools.refinery.store.query.dse.strategy.BestFirstStrategy;
8import tools.refinery.store.query.dse.strategy.DepthFirstStrategy; 9import tools.refinery.store.query.dse.strategy.DepthFirstStrategy;
9import tools.refinery.store.query.viatra.ViatraModelQueryAdapter; 10import tools.refinery.store.query.viatra.ViatraModelQueryAdapter;
10import tools.refinery.store.query.view.AnySymbolView; 11import tools.refinery.store.query.view.AnySymbolView;
@@ -12,6 +13,7 @@ import tools.refinery.store.query.view.KeyOnlyView;
12import tools.refinery.store.representation.Symbol; 13import tools.refinery.store.representation.Symbol;
13import tools.refinery.store.tuple.Tuple; 14import tools.refinery.store.tuple.Tuple;
14import tools.refinery.visualization.ModelVisualizerAdapter; 15import tools.refinery.visualization.ModelVisualizerAdapter;
16import tools.refinery.visualization.internal.FileFormat;
15 17
16public class DebugTest { 18public class DebugTest {
17 private static final Symbol<Boolean> classModel = Symbol.of("ClassModel", 1); 19 private static final Symbol<Boolean> classModel = Symbol.of("ClassModel", 1);
@@ -83,30 +85,31 @@ public class DebugTest {
83 .symbols(classModel, classElement, feature, isEncapsulatedBy, encapsulates, classes, features) 85 .symbols(classModel, classElement, feature, isEncapsulatedBy, encapsulates, classes, features)
84 .with(ViatraModelQueryAdapter.builder() 86 .with(ViatraModelQueryAdapter.builder()
85 .queries(createClassPrecondition, createFeaturePrecondition)) 87 .queries(createClassPrecondition, createFeaturePrecondition))
88 .with(ModelVisualizerAdapter.builder())
86 .with(DesignSpaceExplorationAdapter.builder() 89 .with(DesignSpaceExplorationAdapter.builder()
87 .transformations(createClassRule, createFeatureRule) 90 .transformations(createClassRule, createFeatureRule)
88 .strategy(new DepthFirstStrategy(4).continueIfHardObjectivesFulfilled() 91 .strategy(new DepthFirstStrategy(4).continueIfHardObjectivesFulfilled()
89// .strategy(new BestFirstStrategy(4).continueIfHardObjectivesFulfilled() 92// .strategy(new BestFirstStrategy(4).continueIfHardObjectivesFulfilled()
90// .goOnOnlyIfFitnessIsBetter() 93// .goOnOnlyIfFitnessIsBetter()
91 )) 94 ))
92 .with(ModelVisualizerAdapter.builder())
93 .build(); 95 .build();
94 96
95 var model = store.createEmptyModel(); 97 var model = store.createEmptyModel();
96 var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); 98 var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class);
99// dseAdapter.setRandom(1);
97 var queryEngine = model.getAdapter(ModelQueryAdapter.class); 100 var queryEngine = model.getAdapter(ModelQueryAdapter.class);
98 101
99 var modelElementInterpretation = model.getInterpretation(classModel); 102 var modelElementInterpretation = model.getInterpretation(classModel);
100 modelElementInterpretation.put(dseAdapter.createObject(), true); 103 var classElementInterpretation = model.getInterpretation(classElement);
104 var modelElement = dseAdapter.createObject();
105 modelElementInterpretation.put(modelElement, true);
106 classElementInterpretation.put(modelElement, true);
101 queryEngine.flushChanges(); 107 queryEngine.flushChanges();
102 108
103 109
104 var states = dseAdapter.explore(); 110 var states = dseAdapter.explore();
105 var visualizer = model.getAdapter(ModelVisualizerAdapter.class); 111 var visualizer = model.getAdapter(ModelVisualizerAdapter.class);
106 for (var state : states) { 112 visualizer.renderDesignSpace("test_output", FileFormat.SVG);
107 var visualization = visualizer.createVisualizationForModelState(state);
108 visualizer.saveVisualization(visualization, "test_output" + state.hashCode() + ".png");
109 }
110 System.out.println("states size: " + states.size()); 113 System.out.println("states size: " + states.size());
111 System.out.println("states: " + states); 114 System.out.println("states: " + states);
112 115