blob: 02634a02d1b8d677ff4f424f2190bbf8c400ade3 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
/*
* SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
*
* SPDX-License-Identifier: EPL-2.0
*/
package tools.refinery.store.dse.strategy;
import tools.refinery.store.dse.transition.DesignSpaceExplorationStoreAdapter;
import tools.refinery.store.dse.transition.VersionWithObjectiveValue;
import tools.refinery.store.dse.transition.statespace.ActivationStore;
import tools.refinery.store.dse.transition.statespace.EquivalenceClassStore;
import tools.refinery.store.dse.transition.statespace.ObjectivePriorityQueue;
import tools.refinery.store.dse.transition.statespace.SolutionStore;
import tools.refinery.store.dse.transition.statespace.internal.ActivationStoreImpl;
import tools.refinery.store.dse.transition.statespace.internal.FastEquivalenceClassStore;
import tools.refinery.store.dse.transition.statespace.internal.ObjectivePriorityQueueImpl;
import tools.refinery.store.dse.transition.statespace.internal.SolutionStoreImpl;
import tools.refinery.store.map.Version;
import tools.refinery.store.model.ModelStore;
import tools.refinery.store.statecoding.StateCoderStoreAdapter;
import tools.refinery.visualization.statespace.VisualizationStore;
import tools.refinery.visualization.statespace.internal.VisualizationStoreImpl;
import java.util.function.Consumer;
public class BestFirstStoreManager {
ModelStore modelStore;
ObjectivePriorityQueue objectiveStore;
ActivationStore activationStore;
SolutionStore solutionStore;
EquivalenceClassStore equivalenceClassStore;
VisualizationStore visualizationStore;
public BestFirstStoreManager(ModelStore modelStore, int maxNumberOfSolutions) {
this.modelStore = modelStore;
DesignSpaceExplorationStoreAdapter storeAdapter =
modelStore.getAdapter(DesignSpaceExplorationStoreAdapter.class);
objectiveStore = new ObjectivePriorityQueueImpl(storeAdapter.getObjectives());
Consumer<VersionWithObjectiveValue> whenAllActivationsVisited = x -> objectiveStore.remove(x);
activationStore = new ActivationStoreImpl(storeAdapter.getTransformations().size(), whenAllActivationsVisited);
solutionStore = new SolutionStoreImpl(maxNumberOfSolutions);
equivalenceClassStore = new FastEquivalenceClassStore(modelStore.getAdapter(StateCoderStoreAdapter.class)) {
@Override
protected void delegate(VersionWithObjectiveValue version, int[] emptyActivations, boolean accept) {
throw new UnsupportedOperationException("This equivalence storage is not prepared to resolve symmetries!");
}
};
visualizationStore = new VisualizationStoreImpl();
}
public ModelStore getModelStore() {
return modelStore;
}
ObjectivePriorityQueue getObjectiveStore() {
return objectiveStore;
}
ActivationStore getActivationStore() {
return activationStore;
}
public SolutionStore getSolutionStore() {
return solutionStore;
}
EquivalenceClassStore getEquivalenceClassStore() {
return equivalenceClassStore;
}
public VisualizationStore getVisualizationStore() {
return visualizationStore;
}
public void startExploration(Version initial) {
BestFirstExplorer bestFirstExplorer = new BestFirstExplorer(this, modelStore.createModelForState(initial), 1);
bestFirstExplorer.explore();
}
}
|