67 Options(std::vector<std::shared_ptr<storm::logic::Formula const>>
const& formulas);
122 struct UpdateDecisionDiagram {
123 UpdateDecisionDiagram() : updateDd(), assignedGlobalVariables() {
128 : updateDd(updateDd), assignedGlobalVariables(assignedGlobalVariables) {
136 std::set<storm::expressions::Variable> assignedGlobalVariables;
140 struct ActionDecisionDiagram {
141 ActionDecisionDiagram() : guardDd(), transitionsDd(), numberOfUsedNondeterminismVariables(0) {
145 ActionDecisionDiagram(storm::dd::DdManager<Type>
const& manager,
146 std::set<storm::expressions::Variable>
const& assignedGlobalVariables = std::set<storm::expressions::Variable>(),
147 uint_fast64_t numberOfUsedNondeterminismVariables = 0)
148 : guardDd(
manager.getBddZero()),
150 numberOfUsedNondeterminismVariables(numberOfUsedNondeterminismVariables),
151 assignedGlobalVariables(assignedGlobalVariables) {
155 ActionDecisionDiagram(storm::dd::Bdd<Type> guardDd, storm::dd::Add<Type, ValueType> transitionsDd,
156 std::set<storm::expressions::Variable>
const& assignedGlobalVariables = std::set<storm::expressions::Variable>(),
157 uint_fast64_t numberOfUsedNondeterminismVariables = 0)
159 transitionsDd(transitionsDd),
160 numberOfUsedNondeterminismVariables(numberOfUsedNondeterminismVariables),
161 assignedGlobalVariables(assignedGlobalVariables) {
165 void ensureContainsVariables(std::set<storm::expressions::Variable>
const& rowMetaVariables,
166 std::set<storm::expressions::Variable>
const& columnMetaVariables) {
167 guardDd.addMetaVariables(rowMetaVariables);
168 transitionsDd.addMetaVariables(rowMetaVariables);
169 transitionsDd.addMetaVariables(columnMetaVariables);
172 ActionDecisionDiagram(ActionDecisionDiagram
const& other) =
default;
173 ActionDecisionDiagram& operator=(ActionDecisionDiagram
const& other) =
default;
176 storm::dd::Bdd<Type> guardDd;
179 storm::dd::Add<Type, ValueType> transitionsDd;
182 uint_fast64_t numberOfUsedNondeterminismVariables;
185 std::set<storm::expressions::Variable> assignedGlobalVariables;
189 struct ModuleDecisionDiagram {
190 ModuleDecisionDiagram() : independentAction(), synchronizingActionToDecisionDiagramMap(), identity(), numberOfUsedNondeterminismVariables(0) {
194 ModuleDecisionDiagram(storm::dd::DdManager<Type>
const& manager)
196 synchronizingActionToDecisionDiagramMap(),
198 numberOfUsedNondeterminismVariables(0) {
202 ModuleDecisionDiagram(ActionDecisionDiagram
const& independentAction,
203 std::map<uint_fast64_t, ActionDecisionDiagram>
const& synchronizingActionToDecisionDiagramMap,
204 storm::dd::Add<Type, ValueType>
const& identity, uint_fast64_t numberOfUsedNondeterminismVariables = 0)
205 : independentAction(independentAction),
206 synchronizingActionToDecisionDiagramMap(synchronizingActionToDecisionDiagramMap),
208 numberOfUsedNondeterminismVariables(numberOfUsedNondeterminismVariables) {
212 ModuleDecisionDiagram(ModuleDecisionDiagram
const& other) =
default;
213 ModuleDecisionDiagram& operator=(ModuleDecisionDiagram
const& other) =
default;
215 bool hasSynchronizingAction(uint_fast64_t actionIndex) {
216 return synchronizingActionToDecisionDiagramMap.find(actionIndex) != synchronizingActionToDecisionDiagramMap.end();
219 std::set<uint_fast64_t> getSynchronizingActionIndices()
const {
220 std::set<uint_fast64_t> result;
221 for (
auto const& entry : synchronizingActionToDecisionDiagramMap) {
222 result.insert(entry.first);
228 ActionDecisionDiagram independentAction;
231 std::map<uint_fast64_t, ActionDecisionDiagram> synchronizingActionToDecisionDiagramMap;
234 storm::dd::Add<Type, ValueType> identity;
237 uint_fast64_t numberOfUsedNondeterminismVariables;
251 std::shared_ptr<storm::models::symbolic::Model<Type, ValueType>> buildInternal(storm::prism::Program
const& program,
Options const& options,
252 std::shared_ptr<storm::dd::DdManager<Type>>
const& manager);
254 template<storm::dd::DdType TypePrime,
typename ValueTypePrime>
257 static std::set<storm::expressions::Variable> equalizeAssignedGlobalVariables(
GenerationInformation const& generationInfo, ActionDecisionDiagram& action1,
258 ActionDecisionDiagram& action2);
260 static std::set<storm::expressions::Variable> equalizeAssignedGlobalVariables(
GenerationInformation const& generationInfo,
261 std::vector<ActionDecisionDiagram>& actionDds);
264 uint_fast64_t numberOfBinaryVariables, int_fast64_t value);
273 uint_fast64_t synchronizationActionIndex, uint_fast64_t nondeterminismVariableOffset);
275 static ActionDecisionDiagram combineCommandsToActionMarkovChain(
GenerationInformation& generationInfo, std::vector<ActionDecisionDiagram>& commandDds);
277 static ActionDecisionDiagram combineCommandsToActionMDP(
GenerationInformation& generationInfo, std::vector<ActionDecisionDiagram>& commandDds,
278 uint_fast64_t nondeterminismVariableOffset);
280 static ActionDecisionDiagram combineSynchronizingActions(ActionDecisionDiagram
const& action1, ActionDecisionDiagram
const& action2);
282 static ActionDecisionDiagram combineUnsynchronizedActions(
GenerationInformation const& generationInfo, ActionDecisionDiagram& action1,
286 static ActionDecisionDiagram combineUnsynchronizedActions(
GenerationInformation const& generationInfo, ActionDecisionDiagram& action1,
287 ActionDecisionDiagram& action2);
290 std::map<uint_fast64_t, uint_fast64_t>
const& synchronizingActionToOffsetMap);
296 static std::unordered_map<std::string, storm::models::symbolic::StandardRewardModel<Type, ValueType>> createRewardModelDecisionDiagrams(
297 std::vector<std::reference_wrapper<storm::prism::RewardModel const>>
const& selectedRewardModels,
SystemResult& system,