12template<storm::dd::DdType Type>
14 std::set<storm::expressions::Variable>
const& rowMetaVariables,
15 std::set<storm::expressions::Variable>
const& columnMetaVariables) {
17 <<
" non-zero(s), " << initialStates.
getNonZeroCount() <<
" initial states).");
19 auto start = std::chrono::high_resolution_clock::now();
24 uint_fast64_t iteration = 0;
31 if (!newReachableStates.
isZero()) {
35 reachableStates |= newReachableStates;
39 <<
" reachable states found.");
42 auto end = std::chrono::high_resolution_clock::now();
43 STORM_LOG_TRACE(
"Reachability computation completed in " << iteration <<
" iterations ("
44 << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() <<
"ms).");
46 return {reachableStates, iteration};
49template<storm::dd::DdType Type>
51 storm::dd::Bdd<Type> const& transitions, std::set<storm::expressions::Variable>
const& rowMetaVariables,
52 std::set<storm::expressions::Variable>
const& columnMetaVariables) {
53 STORM_LOG_TRACE(
"Computing backwards reachable states: transition matrix BDD has "
55 <<
" initial states).");
57 auto start = std::chrono::high_resolution_clock::now();
62 uint_fast64_t iteration = 0;
69 if (!newReachableStates.
isZero()) {
73 reachableStates |= newReachableStates;
77 <<
" reachable states found.");
80 auto end = std::chrono::high_resolution_clock::now();
81 STORM_LOG_TRACE(
"Backward reachability computation completed in " << iteration <<
" iterations ("
82 << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() <<
"ms).");
84 return reachableStates;
87template<storm::dd::DdType Type>
90 std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>>
const& rowColumnMetaVariablePairs) {
91 return ddManager.
getIdentity(rowColumnMetaVariablePairs,
false);
96 std::set<storm::expressions::Variable>
const& rowMetaVariables,
97 std::set<storm::expressions::Variable>
const& columnMetaVariables);
100 std::set<storm::expressions::Variable>
const& rowMetaVariables, std::set<storm::expressions::Variable>
const& columnMetaVariables);
105 std::set<storm::expressions::Variable>
const& rowMetaVariables,
106 std::set<storm::expressions::Variable>
const& columnMetaVariables);
110 std::set<storm::expressions::Variable>
const& rowMetaVariables,
111 std::set<storm::expressions::Variable>
const& columnMetaVariables);
115 std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>>
const& rowColumnMetaVariablePairs);
118 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)