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) {
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) {
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) {
165 ActionDecisionDiagram(ActionDecisionDiagram
const& other) =
default;
166 ActionDecisionDiagram& operator=(ActionDecisionDiagram
const& other) =
default;
175 uint_fast64_t numberOfUsedNondeterminismVariables;
178 std::set<storm::expressions::Variable> assignedGlobalVariables;
182 struct ModuleDecisionDiagram {
183 ModuleDecisionDiagram() : independentAction(), synchronizingActionToDecisionDiagramMap(), identity(), numberOfUsedNondeterminismVariables(0) {
189 synchronizingActionToDecisionDiagramMap(),
191 numberOfUsedNondeterminismVariables(0) {
195 ModuleDecisionDiagram(ActionDecisionDiagram
const& independentAction,
196 std::map<uint_fast64_t, ActionDecisionDiagram>
const& synchronizingActionToDecisionDiagramMap,
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;
230 uint_fast64_t numberOfUsedNondeterminismVariables;
236 class GenerationInformation;
244 std::shared_ptr<storm::models::symbolic::Model<Type, ValueType>> buildInternal(
storm::prism::Program const& program, Options
const& options,
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,