aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstStoreManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstStoreManager.java')
-rw-r--r--subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstStoreManager.java71
1 files changed, 71 insertions, 0 deletions
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
new file mode 100644
index 00000000..d1fd7884
--- /dev/null
+++ b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/strategy/BestFirstStoreManager.java
@@ -0,0 +1,71 @@
1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.dse.strategy;
7
8import org.eclipse.collections.api.block.procedure.Procedure;
9import tools.refinery.store.dse.transition.DesignSpaceExplorationStoreAdapter;
10import tools.refinery.store.dse.transition.VersionWithObjectiveValue;
11import tools.refinery.store.dse.transition.statespace.ActivationStore;
12import tools.refinery.store.dse.transition.statespace.EquivalenceClassStore;
13import tools.refinery.store.dse.transition.statespace.ObjectivePriorityQueue;
14import tools.refinery.store.dse.transition.statespace.SolutionStore;
15import tools.refinery.store.dse.transition.statespace.internal.ActivationStoreImpl;
16import tools.refinery.store.dse.transition.statespace.internal.FastEquivalenceClassStore;
17import tools.refinery.store.dse.transition.statespace.internal.ObjectivePriorityQueueImpl;
18import tools.refinery.store.dse.transition.statespace.internal.SolutionStoreImpl;
19import tools.refinery.store.map.Version;
20import tools.refinery.store.model.ModelStore;
21import tools.refinery.store.statecoding.StateCoderStoreAdapter;
22
23public class BestFirstStoreManager {
24 ModelStore modelStore;
25 ObjectivePriorityQueue objectiveStore;
26 ActivationStore activationStore;
27 SolutionStore solutionStore;
28 EquivalenceClassStore equivalenceClassStore;
29
30 public BestFirstStoreManager(ModelStore modelStore) {
31 this.modelStore = modelStore;
32 DesignSpaceExplorationStoreAdapter storeAdapter =
33 modelStore.getAdapter(DesignSpaceExplorationStoreAdapter.class);
34
35 objectiveStore = new ObjectivePriorityQueueImpl(storeAdapter.getObjectives());
36 Procedure<VersionWithObjectiveValue> whenAllActivationsVisited = x -> objectiveStore.remove(x);
37 activationStore = new ActivationStoreImpl(storeAdapter.getTransformations().size(), whenAllActivationsVisited);
38 solutionStore = new SolutionStoreImpl(1);
39 equivalenceClassStore = new FastEquivalenceClassStore(modelStore.getAdapter(StateCoderStoreAdapter.class)) {
40 @Override
41 protected void delegate(VersionWithObjectiveValue version, int[] emptyActivations, boolean accept) {
42 objectiveStore.submit(version);
43 activationStore.markNewAsVisited(version, emptyActivations);
44 if(accept) {
45 solutionStore.submit(version);
46 }
47 }
48 };
49 }
50
51 ObjectivePriorityQueue getObjectiveStore() {
52 return objectiveStore;
53 }
54
55 ActivationStore getActivationStore() {
56 return activationStore;
57 }
58
59 SolutionStore getSolutionStore() {
60 return solutionStore;
61 }
62
63 EquivalenceClassStore getEquivalenceClassStore() {
64 return equivalenceClassStore;
65 }
66
67 public void startExploration(Version initial) {
68 BestFirstExplorer bestFirstExplorer = new BestFirstExplorer(this, modelStore.createModelForState(initial), 1);
69 bestFirstExplorer.explore();
70 }
71}