19template<
typename ModelType>
21 std::vector<std::shared_ptr<storm::logic::Formula const>>
const& formulas,
24 if (!formulas.empty()) {
27 options.setType(type);
34template<
typename ModelType>
36 std::vector<std::shared_ptr<storm::logic::Formula const>>
const& formulas,
39 if (!formulas.empty()) {
42 options.setType(type);
49template<
typename ValueType>
55 storm::exceptions::NotSupportedException,
"Bisimulation minimization is currently only available for DTMCs, CTMCs and MDPs.");
58 model->reduceToStateBasedRewards();
61 return performDeterministicSparseBisimulationMinimization<storm::models::sparse::Dtmc<ValueType>>(
62 model->template as<storm::models::sparse::Dtmc<ValueType>>(), formulas, type);
64 return performDeterministicSparseBisimulationMinimization<storm::models::sparse::Ctmc<ValueType>>(
65 model->template as<storm::models::sparse::Ctmc<ValueType>>(), formulas, type);
67 return performNondeterministicSparseBisimulationMinimization<storm::models::sparse::Mdp<ValueType>>(
68 model->template as<storm::models::sparse::Mdp<ValueType>>(), formulas, type);
72template<storm::dd::DdType DdType,
typename ValueType,
typename ExportValueType = ValueType>
73typename std::enable_if<DdType == storm::dd::DdType::Sylvan || std::is_same<ValueType, double>::value,
74 std::shared_ptr<storm::models::Model<ExportValueType>>>::type
76 std::vector<std::shared_ptr<storm::logic::Formula const>>
const& formulas,
82 storm::exceptions::NotSupportedException,
"Symbolic bisimulation minimization is currently only available for DTMCs, CTMCs, MDPs and MAs.");
84 "Currently only strong bisimulation is supported.");
86 std::shared_ptr<storm::models::Model<ExportValueType>> result;
87 model->getManager().execute([&]() {
89 model->reduceToStateBasedRewards();
98template<storm::dd::DdType DdType,
typename ValueType,
typename ExportValueType = ValueType>
99typename std::enable_if<DdType != storm::dd::DdType::Sylvan && !std::is_same<ValueType, double>::value,
100 std::shared_ptr<storm::models::Model<ExportValueType>>>::type
102 std::vector<std::shared_ptr<storm::logic::Formula const>>
const&,
107 "Symbolic bisimulation minimization is not supported for this combination of DD library and value type.");
void compute(bisimulation::SignatureMode const &mode=bisimulation::SignatureMode::Eager)
Performs partition refinement until a fixpoint has been reached.
std::shared_ptr< storm::models::Model< ExportValueType > > getQuotient(storm::dd::bisimulation::QuotientFormat const "ientFormat) const
Retrieves the quotient model after the bisimulation decomposition was computed.
Base class for all sparse models.
Base class for all symbolic models.
std::shared_ptr< ModelType > getQuotient() const
Retrieves the quotient of the model under the computed bisimulation.
void computeBisimulationDecomposition()
Computes the decomposition of the model into bisimulation equivalence classes.
This class represents the decomposition of a deterministic model into its bisimulation quotient.
This class represents the decomposition of a nondeterministic model into its bisimulation quotient.
#define STORM_LOG_THROW(cond, exception, message)
std::shared_ptr< ModelType > performDeterministicSparseBisimulationMinimization(std::shared_ptr< ModelType > model, std::vector< std::shared_ptr< storm::logic::Formula const > > const &formulas, storm::storage::BisimulationType type)
std::shared_ptr< storm::models::sparse::Model< ValueType > > performBisimulationMinimization(std::shared_ptr< storm::models::sparse::Model< ValueType > > const &model, std::vector< std::shared_ptr< storm::logic::Formula const > > const &formulas, storm::storage::BisimulationType type=storm::storage::BisimulationType::Strong)
std::shared_ptr< ModelType > performNondeterministicSparseBisimulationMinimization(std::shared_ptr< ModelType > model, std::vector< std::shared_ptr< storm::logic::Formula const > > const &formulas, storm::storage::BisimulationType type)