diff options
author | nagilooh <ficsorattila96@gmail.com> | 2023-09-07 17:34:37 +0200 |
---|---|---|
committer | nagilooh <ficsorattila96@gmail.com> | 2023-09-07 17:52:34 +0200 |
commit | 741ff77e0e841cdf3fd893e1fb3d1ccccc6a83e4 (patch) | |
tree | 5670015d5e4e02ab1453fad2cf8888ac9d1a9a2d /subprojects/store-dse/src/test/java/tools | |
parent | Merge remote-tracking branch 'oszkar/datastructure' into datastructure (diff) | |
download | refinery-741ff77e0e841cdf3fd893e1fb3d1ccccc6a83e4.tar.gz refinery-741ff77e0e841cdf3fd893e1fb3d1ccccc6a83e4.tar.zst refinery-741ff77e0e841cdf3fd893e1fb3d1ccccc6a83e4.zip |
fix issues with DSE framework
Diffstat (limited to 'subprojects/store-dse/src/test/java/tools')
6 files changed, 176 insertions, 100 deletions
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 f4c38b18..831b9ff0 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 | |||
@@ -9,6 +9,8 @@ import org.junit.jupiter.api.Disabled; | |||
9 | import org.junit.jupiter.api.Test; | 9 | import org.junit.jupiter.api.Test; |
10 | import tools.refinery.store.dse.modification.ModificationAdapter; | 10 | import tools.refinery.store.dse.modification.ModificationAdapter; |
11 | import tools.refinery.store.dse.strategy.BestFirstStoreManager; | 11 | import tools.refinery.store.dse.strategy.BestFirstStoreManager; |
12 | import tools.refinery.store.dse.tests.DummyRandomCriterion; | ||
13 | import tools.refinery.store.dse.tests.DummyRandomObjective; | ||
12 | import tools.refinery.store.dse.transition.DesignSpaceExplorationAdapter; | 14 | import tools.refinery.store.dse.transition.DesignSpaceExplorationAdapter; |
13 | import tools.refinery.store.dse.tests.DummyCriterion; | 15 | import tools.refinery.store.dse.tests.DummyCriterion; |
14 | import tools.refinery.store.dse.tests.DummyObjective; | 16 | import tools.refinery.store.dse.tests.DummyObjective; |
@@ -188,7 +190,7 @@ class CRAExamplesTest { | |||
188 | }); | 190 | }); |
189 | 191 | ||
190 | @Test | 192 | @Test |
191 | // @Disabled("This test is only for debugging purposes") | 193 | @Disabled("This test is only for debugging purposes") |
192 | void craTest() { | 194 | void craTest() { |
193 | var store = ModelStore.builder() | 195 | var store = ModelStore.builder() |
194 | .symbols(classElement, encapsulates, classes, features, attribute, method, dataDependency, | 196 | .symbols(classElement, encapsulates, classes, features, attribute, method, dataDependency, |
@@ -197,24 +199,20 @@ class CRAExamplesTest { | |||
197 | .queries(feature, assignFeaturePreconditionHelper, assignFeaturePrecondition, | 199 | .queries(feature, assignFeaturePreconditionHelper, assignFeaturePrecondition, |
198 | deleteEmptyClassPrecondition, createClassPreconditionHelper, createClassPrecondition, | 200 | deleteEmptyClassPrecondition, createClassPreconditionHelper, createClassPrecondition, |
199 | moveFeaturePrecondition)) | 201 | moveFeaturePrecondition)) |
200 | // .with(ModelVisualizerAdapter.builder() | 202 | .with(ModelVisualizerAdapter.builder() |
201 | // .withOutputpath("test_output") | 203 | .withOutputpath("test_output") |
202 | // .withFormat(FileFormat.DOT) | 204 | .withFormat(FileFormat.DOT) |
203 | // .withFormat(FileFormat.SVG) | 205 | .withFormat(FileFormat.SVG) |
204 | // .saveStates() | 206 | .saveStates() |
205 | // .saveDesignSpace() | 207 | .saveDesignSpace() |
206 | // ) | 208 | ) |
207 | .with(StateCoderAdapter.builder()) | 209 | .with(StateCoderAdapter.builder()) |
208 | .with(ModificationAdapter.builder()) | 210 | .with(ModificationAdapter.builder()) |
209 | .with(DesignSpaceExplorationAdapter.builder() | 211 | .with(DesignSpaceExplorationAdapter.builder() |
210 | .transformations(assignFeatureRule, deleteEmptyClassRule, createClassRule, moveFeatureRule) | 212 | .transformations(assignFeatureRule, deleteEmptyClassRule, createClassRule, moveFeatureRule) |
211 | .objectives(new DummyObjective()) | 213 | .objectives(new DummyRandomObjective()) |
212 | .accept(new DummyCriterion(true)) | 214 | .accept(new DummyRandomCriterion()) |
213 | .exclude(new DummyCriterion(false)) | 215 | .exclude(new DummyCriterion(false)) |
214 | // .objectives(new AlwaysSatisfiedRandomHardObjective()) | ||
215 | // .strategy(new DepthFirstStrategy().withDepthLimit(3).continueIfHardObjectivesFulfilled() | ||
216 | // .strategy(new BestFirstStrategy().withDepthLimit(6).continueIfHardObjectivesFulfilled() | ||
217 | // .goOnOnlyIfFitnessIsBetter()) | ||
218 | ) | 216 | ) |
219 | .build(); | 217 | .build(); |
220 | 218 | ||
@@ -296,7 +294,5 @@ class CRAExamplesTest { | |||
296 | bestFirst.startExploration(initialVersion); | 294 | bestFirst.startExploration(initialVersion); |
297 | var resultStore = bestFirst.getSolutionStore(); | 295 | var resultStore = bestFirst.getSolutionStore(); |
298 | System.out.println("states size: " + resultStore.getSolutions().size()); | 296 | System.out.println("states size: " + resultStore.getSolutions().size()); |
299 | var modelVisualizerAdapter = model.getAdapter(ModelVisualizerAdapter.class); | ||
300 | modelVisualizerAdapter.visualize(); | ||
301 | } | 297 | } |
302 | } | 298 | } |
diff --git a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/DebugTest.java b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/DebugTest.java index 1d757a5f..87c3892a 100644 --- a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/DebugTest.java +++ b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/DebugTest.java | |||
@@ -5,9 +5,27 @@ | |||
5 | */ | 5 | */ |
6 | package tools.refinery.store.dse; | 6 | package tools.refinery.store.dse; |
7 | 7 | ||
8 | import org.junit.jupiter.api.Disabled; | ||
9 | import org.junit.jupiter.api.Test; | ||
10 | import tools.refinery.store.dse.modification.ModificationAdapter; | ||
11 | import tools.refinery.store.dse.strategy.BestFirstStoreManager; | ||
12 | import tools.refinery.store.dse.tests.DummyCriterion; | ||
13 | import tools.refinery.store.dse.tests.DummyObjective; | ||
14 | import tools.refinery.store.dse.tests.DummyRandomCriterion; | ||
15 | import tools.refinery.store.dse.tests.DummyRandomObjective; | ||
16 | import tools.refinery.store.dse.transition.DesignSpaceExplorationAdapter; | ||
17 | import tools.refinery.store.dse.transition.TransformationRule; | ||
18 | import tools.refinery.store.model.ModelStore; | ||
19 | import tools.refinery.store.query.ModelQueryAdapter; | ||
20 | import tools.refinery.store.query.dnf.Query; | ||
21 | import tools.refinery.store.query.viatra.ViatraModelQueryAdapter; | ||
8 | import tools.refinery.store.query.view.AnySymbolView; | 22 | import tools.refinery.store.query.view.AnySymbolView; |
9 | import tools.refinery.store.query.view.KeyOnlyView; | 23 | import tools.refinery.store.query.view.KeyOnlyView; |
10 | import tools.refinery.store.representation.Symbol; | 24 | import tools.refinery.store.representation.Symbol; |
25 | import tools.refinery.store.statecoding.StateCoderAdapter; | ||
26 | import tools.refinery.store.tuple.Tuple; | ||
27 | import tools.refinery.visualization.ModelVisualizerAdapter; | ||
28 | import tools.refinery.visualization.internal.FileFormat; | ||
11 | 29 | ||
12 | class DebugTest { | 30 | class DebugTest { |
13 | private static final Symbol<Boolean> classModel = Symbol.of("ClassModel", 1); | 31 | private static final Symbol<Boolean> classModel = Symbol.of("ClassModel", 1); |
@@ -29,88 +47,92 @@ class DebugTest { | |||
29 | private static final AnySymbolView classesView = new KeyOnlyView<>(classes); | 47 | private static final AnySymbolView classesView = new KeyOnlyView<>(classes); |
30 | 48 | ||
31 | 49 | ||
32 | // @Test | 50 | @Test |
33 | // @Disabled("This test is only for debugging purposes") | 51 | @Disabled("This test is only for debugging purposes") |
34 | // void BFSTest() { | 52 | void BFSTest() { |
35 | // var createClassPrecondition = Query.of("CreateClassPrecondition", | 53 | var createClassPrecondition = Query.of("CreateClassPrecondition", |
36 | // (builder, model) -> builder.clause( | 54 | (builder, model) -> builder.clause( |
37 | // classModelView.call(model) | 55 | classModelView.call(model) |
38 | // )); | 56 | )); |
39 | // | 57 | |
40 | // var createClassRule = new TransformationRule("CreateClass", | 58 | var createClassRule = new TransformationRule("CreateClass", |
41 | // createClassPrecondition, | 59 | createClassPrecondition, |
42 | // (model) -> { | 60 | (model) -> { |
43 | // var classesInterpretation = model.getInterpretation(classes); | 61 | var classesInterpretation = model.getInterpretation(classes); |
44 | // var classElementInterpretation = model.getInterpretation(classElement); | 62 | var classElementInterpretation = model.getInterpretation(classElement); |
45 | // return ((Tuple activation) -> { | 63 | return ((Tuple activation) -> { |
46 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 64 | var dseAdapter = model.getAdapter(ModificationAdapter.class); |
47 | // var modelElement = activation.get(0); | 65 | var modelElement = activation.get(0); |
48 | // | 66 | |
49 | // var newClassElement = dseAdapter.createObject(); | 67 | var newClassElement = dseAdapter.createObject(); |
50 | // var newClassElementId = newClassElement.get(0); | 68 | var newClassElementId = newClassElement.get(0); |
51 | // | 69 | |
52 | // classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); | 70 | classesInterpretation.put(Tuple.of(modelElement, newClassElementId), true); |
53 | // classElementInterpretation.put(Tuple.of(newClassElementId), true); | 71 | classElementInterpretation.put(Tuple.of(newClassElementId), true); |
54 | // }); | 72 | }); |
55 | // }); | 73 | }); |
56 | // | 74 | |
57 | // var createFeaturePrecondition = Query.of("CreateFeaturePrecondition", | 75 | var createFeaturePrecondition = Query.of("CreateFeaturePrecondition", |
58 | // (builder, model) -> builder.clause( | 76 | (builder, model) -> builder.clause( |
59 | // classModelView.call(model) | 77 | classModelView.call(model) |
60 | // )); | 78 | )); |
61 | // | 79 | |
62 | // var createFeatureRule = new TransformationRule("CreateFeature", | 80 | var createFeatureRule = new TransformationRule("CreateFeature", |
63 | // createFeaturePrecondition, | 81 | createFeaturePrecondition, |
64 | // (model) -> { | 82 | (model) -> { |
65 | // var featuresInterpretation = model.getInterpretation(features); | 83 | var featuresInterpretation = model.getInterpretation(features); |
66 | // var featureInterpretation = model.getInterpretation(feature); | 84 | var featureInterpretation = model.getInterpretation(feature); |
67 | // return ((Tuple activation) -> { | 85 | return ((Tuple activation) -> { |
68 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 86 | var dseAdapter = model.getAdapter(ModificationAdapter.class); |
69 | // var modelElement = activation.get(0); | 87 | var modelElement = activation.get(0); |
70 | // | 88 | |
71 | // var newClassElement = dseAdapter.createObject(); | 89 | var newClassElement = dseAdapter.createObject(); |
72 | // var newClassElementId = newClassElement.get(0); | 90 | var newClassElementId = newClassElement.get(0); |
73 | // | 91 | |
74 | // featuresInterpretation.put(Tuple.of(modelElement, newClassElementId), true); | 92 | featuresInterpretation.put(Tuple.of(modelElement, newClassElementId), true); |
75 | // featureInterpretation.put(Tuple.of(newClassElementId), true); | 93 | featureInterpretation.put(Tuple.of(newClassElementId), true); |
76 | // }); | 94 | }); |
77 | // }); | 95 | }); |
78 | // | 96 | |
79 | // var store = ModelStore.builder() | 97 | var store = ModelStore.builder() |
80 | // .symbols(classModel, classElement, feature, isEncapsulatedBy, encapsulates, classes, features) | 98 | .symbols(classModel, classElement, feature, isEncapsulatedBy, encapsulates, classes, features) |
81 | // .with(ViatraModelQueryAdapter.builder() | 99 | .with(ViatraModelQueryAdapter.builder() |
82 | // .queries(createClassPrecondition, createFeaturePrecondition)) | 100 | .queries(createClassPrecondition, createFeaturePrecondition)) |
83 | // .with(ModelVisualizerAdapter.builder() | 101 | .with(ModelVisualizerAdapter.builder() |
84 | // .withOutputpath("test_output") | 102 | .withOutputpath("test_output") |
85 | // .withFormat(FileFormat.DOT) | 103 | .withFormat(FileFormat.DOT) |
86 | // .withFormat(FileFormat.SVG) | 104 | .withFormat(FileFormat.SVG) |
87 | // .saveStates() | 105 | .saveStates() |
88 | // .saveDesignSpace() | 106 | .saveDesignSpace() |
89 | // ) | 107 | ) |
90 | // .with(DesignSpaceExplorationAdapter.builder() | 108 | .with(StateCoderAdapter.builder()) |
91 | // .transformations(createClassRule, createFeatureRule) | 109 | .with(ModificationAdapter.builder()) |
92 | // .objectives(new AlwaysSatisfiedRandomHardObjective()) | 110 | .with(DesignSpaceExplorationAdapter.builder() |
93 | // .strategy(new DepthFirstStrategy().withDepthLimit(4).continueIfHardObjectivesFulfilled() | 111 | .transformations(createClassRule, createFeatureRule) |
94 | //// .strategy(new BestFirstStrategy().withDepthLimit(4).continueIfHardObjectivesFulfilled() | 112 | .objectives(new DummyRandomObjective()) |
95 | //// .goOnOnlyIfFitnessIsBetter() | 113 | .accept(new DummyRandomCriterion()) |
96 | // )) | 114 | .exclude(new DummyRandomCriterion()) |
97 | // .build(); | 115 | ) |
98 | // | 116 | .build(); |
99 | // var model = store.createEmptyModel(); | 117 | |
100 | // var dseAdapter = model.getAdapter(DesignSpaceExplorationAdapter.class); | 118 | var model = store.createEmptyModel(); |
101 | //// dseAdapter.setRandom(1); | 119 | var dseAdapter = model.getAdapter(ModificationAdapter.class); |
102 | // var queryEngine = model.getAdapter(ModelQueryAdapter.class); | 120 | // dseAdapter.setRandom(1); |
103 | // | 121 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
104 | // var modelElementInterpretation = model.getInterpretation(classModel); | 122 | |
105 | // var classElementInterpretation = model.getInterpretation(classElement); | 123 | var modelElementInterpretation = model.getInterpretation(classModel); |
106 | // var modelElement = dseAdapter.createObject(); | 124 | var classElementInterpretation = model.getInterpretation(classElement); |
107 | // modelElementInterpretation.put(modelElement, true); | 125 | var modelElement = dseAdapter.createObject(); |
108 | // classElementInterpretation.put(modelElement, true); | 126 | modelElementInterpretation.put(modelElement, true); |
109 | // queryEngine.flushChanges(); | 127 | classElementInterpretation.put(modelElement, true); |
110 | // | 128 | var initialVersion = model.commit(); |
111 | // | 129 | queryEngine.flushChanges(); |
112 | // var states = dseAdapter.explore(); | 130 | |
113 | // System.out.println("states size: " + states.size()); | 131 | |
114 | // | 132 | var bestFirst = new BestFirstStoreManager(store); |
115 | // } | 133 | bestFirst.startExploration(initialVersion); |
134 | var resultStore = bestFirst.getSolutionStore(); | ||
135 | System.out.println("states size: " + resultStore.getSolutions().size()); | ||
136 | |||
137 | } | ||
116 | } | 138 | } |
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 index 6bcbd1c3..2d5a0f36 100644 --- 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 | |||
@@ -1,3 +1,8 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
1 | package tools.refinery.store.dse.tests; | 6 | package tools.refinery.store.dse.tests; |
2 | 7 | ||
3 | import tools.refinery.store.dse.transition.objectives.Criterion; | 8 | import tools.refinery.store.dse.transition.objectives.Criterion; |
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 index 77a23d62..f5d281aa 100644 --- 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 | |||
@@ -1,3 +1,8 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
1 | package tools.refinery.store.dse.tests; | 6 | package tools.refinery.store.dse.tests; |
2 | 7 | ||
3 | import tools.refinery.store.dse.transition.objectives.Objective; | 8 | import tools.refinery.store.dse.transition.objectives.Objective; |
diff --git a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyRandomCriterion.java b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyRandomCriterion.java new file mode 100644 index 00000000..71fd4403 --- /dev/null +++ b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyRandomCriterion.java | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.store.dse.tests; | ||
7 | |||
8 | import tools.refinery.store.dse.transition.objectives.Criterion; | ||
9 | import tools.refinery.store.dse.transition.objectives.CriterionCalculator; | ||
10 | import tools.refinery.store.model.Model; | ||
11 | |||
12 | import java.util.Random; | ||
13 | |||
14 | public class DummyRandomCriterion implements Criterion { | ||
15 | |||
16 | @SuppressWarnings("squid:S2245") | ||
17 | private static final Random random = new Random(9856654); | ||
18 | public DummyRandomCriterion() { | ||
19 | } | ||
20 | |||
21 | @Override | ||
22 | public CriterionCalculator createCalculator(Model model) { | ||
23 | return random::nextBoolean; | ||
24 | } | ||
25 | } | ||
diff --git a/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyRandomObjective.java b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyRandomObjective.java new file mode 100644 index 00000000..219e74c6 --- /dev/null +++ b/subprojects/store-dse/src/test/java/tools/refinery/store/dse/tests/DummyRandomObjective.java | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.store.dse.tests; | ||
7 | |||
8 | import tools.refinery.store.dse.transition.objectives.Objective; | ||
9 | import tools.refinery.store.dse.transition.objectives.ObjectiveCalculator; | ||
10 | import tools.refinery.store.model.Model; | ||
11 | |||
12 | import java.util.Random; | ||
13 | |||
14 | public class DummyRandomObjective implements Objective { | ||
15 | |||
16 | @SuppressWarnings("squid:S2245") | ||
17 | private static final Random random = new Random(9856654); | ||
18 | |||
19 | @Override | ||
20 | public ObjectiveCalculator createCalculator(Model model) { | ||
21 | return random::nextDouble; | ||
22 | } | ||
23 | } | ||