67 Options(std::vector<std::shared_ptr<storm::logic::Formula const>>
const& formulas);
115 struct UpdateDecisionDiagram {
116 UpdateDecisionDiagram() : updateDd(), assignedGlobalVariables() {
121 : updateDd(updateDd), assignedGlobalVariables(assignedGlobalVariables) {
129 std::set<storm::expressions::Variable> assignedGlobalVariables;
133 struct ActionDecisionDiagram {
134 ActionDecisionDiagram() : guardDd(), transitionsDd(), numberOfUsedNondeterminismVariables(0) {
138 ActionDecisionDiagram(storm::dd::DdManager<Type>
const& manager,
139 std::set<storm::expressions::Variable>
const& assignedGlobalVariables = std::set<storm::expressions::Variable>(),
140 uint_fast64_t numberOfUsedNondeterminismVariables = 0)
141 : guardDd(
manager.getBddZero()),
143 numberOfUsedNondeterminismVariables(numberOfUsedNondeterminismVariables),
144 assignedGlobalVariables(assignedGlobalVariables) {
148 ActionDecisionDiagram(storm::dd::Bdd<Type> guardDd, storm::dd::Add<Type, ValueType> transitionsDd,
149 std::set<storm::expressions::Variable>
const& assignedGlobalVariables = std::set<storm::expressions::Variable>(),
150 uint_fast64_t numberOfUsedNondeterminismVariables = 0)
152 transitionsDd(transitionsDd),
153 numberOfUsedNondeterminismVariables(numberOfUsedNondeterminismVariables),
154 assignedGlobalVariables(assignedGlobalVariables) {
158 void ensureContainsVariables(std::set<storm::expressions::Variable>
const& rowMetaVariables,
159 std::set<storm::expressions::Variable>
const& columnMetaVariables) {
160 guardDd.addMetaVariables(rowMetaVariables);
161 transitionsDd.addMetaVariables(rowMetaVariables);
162 transitionsDd.addMetaVariables(columnMetaVariables);
165 ActionDecisionDiagram(ActionDecisionDiagram
const& other) =
default;
166 ActionDecisionDiagram& operator=(ActionDecisionDiagram
const& other) =
default;
169 storm::dd::Bdd<Type> guardDd;
172 storm::dd::Add<Type, ValueType> transitionsDd;
175 uint_fast64_t numberOfUsedNondeterminismVariables;
178 std::set<storm::expressions::Variable> assignedGlobalVariables;
182 struct ModuleDecisionDiagram {
183 ModuleDecisionDiagram() : independentAction(), synchronizingActionToDecisionDiagramMap(), identity(), numberOfUsedNondeterminismVariables(0) {
187 ModuleDecisionDiagram(storm::dd::DdManager<Type>
const& manager)
189 synchronizingActionToDecisionDiagramMap(),
191 numberOfUsedNondeterminismVariables(0) {
195 ModuleDecisionDiagram(ActionDecisionDiagram
const& independentAction,
196 std::map<uint_fast64_t, ActionDecisionDiagram>
const& synchronizingActionToDecisionDiagramMap,
197 storm::dd::Add<Type, ValueType>
const& identity, uint_fast64_t numberOfUsedNondeterminismVariables = 0)
198 : independentAction(independentAction),
199 synchronizingActionToDecisionDiagramMap(synchronizingActionToDecisionDiagramMap),
201 numberOfUsedNondeterminismVariables(numberOfUsedNondeterminismVariables) {
205 ModuleDecisionDiagram(ModuleDecisionDiagram
const& other) =
default;
206 ModuleDecisionDiagram& operator=(ModuleDecisionDiagram
const& other) =
default;
208 bool hasSynchronizingAction(uint_fast64_t actionIndex) {
209 return synchronizingActionToDecisionDiagramMap.find(actionIndex) != synchronizingActionToDecisionDiagramMap.end();
212 std::set<uint_fast64_t> getSynchronizingActionIndices()
const {
213 std::set<uint_fast64_t> result;
214 for (
auto const& entry : synchronizingActionToDecisionDiagramMap) {
215 result.insert(entry.first);
221 ActionDecisionDiagram independentAction;
224 std::map<uint_fast64_t, ActionDecisionDiagram> synchronizingActionToDecisionDiagramMap;
227 storm::dd::Add<Type, ValueType> identity;
230 uint_fast64_t numberOfUsedNondeterminismVariables;
244 std::shared_ptr<storm::models::symbolic::Model<Type, ValueType>> buildInternal(storm::prism::Program
const& program,
Options const& options,
245 std::shared_ptr<storm::dd::DdManager<Type>>
const& manager);
247 template<storm::dd::DdType TypePrime,
typename ValueTypePrime>
250 static std::set<storm::expressions::Variable> equalizeAssignedGlobalVariables(
GenerationInformation const& generationInfo, ActionDecisionDiagram& action1,
251 ActionDecisionDiagram& action2);
253 static std::set<storm::expressions::Variable> equalizeAssignedGlobalVariables(
GenerationInformation const& generationInfo,
254 std::vector<ActionDecisionDiagram>& actionDds);
257 uint_fast64_t numberOfBinaryVariables, int_fast64_t value);
266 uint_fast64_t synchronizationActionIndex, uint_fast64_t nondeterminismVariableOffset);
268 static ActionDecisionDiagram combineCommandsToActionMarkovChain(
GenerationInformation& generationInfo, std::vector<ActionDecisionDiagram>& commandDds);
270 static ActionDecisionDiagram combineCommandsToActionMDP(
GenerationInformation& generationInfo, std::vector<ActionDecisionDiagram>& commandDds,
271 uint_fast64_t nondeterminismVariableOffset);
273 static ActionDecisionDiagram combineSynchronizingActions(ActionDecisionDiagram
const& action1, ActionDecisionDiagram
const& action2);
275 static ActionDecisionDiagram combineUnsynchronizedActions(
GenerationInformation const& generationInfo, ActionDecisionDiagram& action1,
279 static ActionDecisionDiagram combineUnsynchronizedActions(
GenerationInformation const& generationInfo, ActionDecisionDiagram& action1,
280 ActionDecisionDiagram& action2);
283 std::map<uint_fast64_t, uint_fast64_t>
const& synchronizingActionToOffsetMap);
289 static std::unordered_map<std::string, storm::models::symbolic::StandardRewardModel<Type, ValueType>> createRewardModelDecisionDiagrams(
290 std::vector<std::reference_wrapper<storm::prism::RewardModel const>>
const& selectedRewardModels,
SystemResult& system,