15template<storm::dd::DdType Type>
17 std::set<storm::expressions::Variable>
const& rowMetaVariables,
18 std::set<storm::expressions::Variable>
const& columnMetaVariables) {
20 <<
" non-zero(s), " << initialStates.
getNonZeroCount() <<
" initial states).");
22 auto start = std::chrono::high_resolution_clock::now();
27 uint_fast64_t iteration = 0;
34 if (!newReachableStates.
isZero()) {
38 reachableStates |= newReachableStates;
42 <<
" reachable states found.");
45 auto end = std::chrono::high_resolution_clock::now();
46 STORM_LOG_TRACE(
"Reachability computation completed in " << iteration <<
" iterations ("
47 << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() <<
"ms).");
49 return {reachableStates, iteration};
52template<storm::dd::DdType Type>
54 storm::dd::Bdd<Type> const& transitions, std::set<storm::expressions::Variable>
const& rowMetaVariables,
55 std::set<storm::expressions::Variable>
const& columnMetaVariables) {
56 STORM_LOG_TRACE(
"Computing backwards reachable states: transition matrix BDD has "
58 <<
" initial states).");
60 auto start = std::chrono::high_resolution_clock::now();
65 uint_fast64_t iteration = 0;
72 if (!newReachableStates.
isZero()) {
76 reachableStates |= newReachableStates;
80 <<
" reachable states found.");
83 auto end = std::chrono::high_resolution_clock::now();
84 STORM_LOG_TRACE(
"Backward reachability computation completed in " << iteration <<
" iterations ("
85 << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() <<
"ms).");
87 return reachableStates;
90template<storm::dd::DdType Type>
93 std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>>
const& rowColumnMetaVariablePairs) {
94 return ddManager.
getIdentity(rowColumnMetaVariablePairs,
false);
99 std::set<storm::expressions::Variable>
const& rowMetaVariables,
100 std::set<storm::expressions::Variable>
const& columnMetaVariables);
103 std::set<storm::expressions::Variable>
const& rowMetaVariables, std::set<storm::expressions::Variable>
const& columnMetaVariables);
108 std::set<storm::expressions::Variable>
const& rowMetaVariables,
109 std::set<storm::expressions::Variable>
const& columnMetaVariables);
113 std::set<storm::expressions::Variable>
const& rowMetaVariables,
114 std::set<storm::expressions::Variable>
const& columnMetaVariables);
118 std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>>
const& rowColumnMetaVariablePairs);
121 std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>>
const& rowColumnMetaVariablePairs);
Bdd< LibraryType > inverseRelationalProduct(Bdd< LibraryType > const &relation, std::set< storm::expressions::Variable > const &rowMetaVariables, std::set< storm::expressions::Variable > const &columnMetaVariables) const
Computes the inverse relational product of the current BDD and the given BDD representing a relation.
bool isZero() const
Retrieves whether this DD represents the constant zero function.
virtual uint_fast64_t getNonZeroCount() const override
Retrieves the number of encodings that are mapped to a non-zero value.
virtual uint_fast64_t getNodeCount() const override
Retrieves the number of nodes necessary to represent the DD.
Bdd< LibraryType > relationalProduct(Bdd< LibraryType > const &relation, std::set< storm::expressions::Variable > const &rowMetaVariables, std::set< storm::expressions::Variable > const &columnMetaVariables) const
Computes the relational product of the current BDD and the given BDD representing a relation.
Add< LibraryType, ValueType > getIdentity(storm::expressions::Variable const &variable) const
Retrieves the ADD representing the identity of the meta variable, i.e., a function that maps all lega...
#define STORM_LOG_TRACE(message)
storm::dd::Bdd< Type > computeBackwardsReachableStates(storm::dd::Bdd< Type > const &initialStates, storm::dd::Bdd< Type > const &constraintStates, storm::dd::Bdd< Type > const &transitions, std::set< storm::expressions::Variable > const &rowMetaVariables, std::set< storm::expressions::Variable > const &columnMetaVariables)
std::pair< storm::dd::Bdd< Type >, uint64_t > computeReachableStates(storm::dd::Bdd< Type > const &initialStates, storm::dd::Bdd< Type > const &transitions, std::set< storm::expressions::Variable > const &rowMetaVariables, std::set< storm::expressions::Variable > const &columnMetaVariables)
storm::dd::Bdd< Type > getRowColumnDiagonal(storm::dd::DdManager< Type > const &ddManager, std::vector< std::pair< storm::expressions::Variable, storm::expressions::Variable > > const &rowColumnMetaVariablePairs)