10template<storm::dd::DdType DdType,
typename ValueType>
16 choicePartition(
Partition<
DdType, ValueType>::createTrivialChoicePartition(model, initialStatePartition.getBlockVariables())),
17 stateSignatureRefiner(model.getManager(), this->
statePartition.getBlockVariable(), model.getRowVariables(), model.getColumnVariables(), true,
19 statePartitonHasBeenRefinedOnce(false) {
22 STORM_LOG_TRACE(
"Refining with respect to exit rates.");
23 auto exitRateVector = this->model.template as<storm::models::symbolic::MarkovAutomaton<DdType, ValueType>>()->getExitRateVector();
24 this->statePartition = stateSignatureRefiner.refine(this->statePartition, Signature<DdType, ValueType>(exitRateVector));
28template<storm::dd::DdType DdType,
typename ValueType>
42 if (newChoicePartition.
getNumberOfBlocks() == choicePartition.getNumberOfBlocks() && statePartitonHasBeenRefinedOnce) {
46 this->choicePartition = newChoicePartition;
50 if (this->choicePartition.storedAsBdd()) {
51 choicePartitionAsBdd = this->choicePartition.asBdd();
53 choicePartitionAsBdd = this->choicePartition.asAdd().notZero();
56 auto signatureStart = std::chrono::high_resolution_clock::now();
58 auto signatureEnd = std::chrono::high_resolution_clock::now();
63 auto refinementStart = std::chrono::high_resolution_clock::now();
65 statePartitonHasBeenRefinedOnce =
true;
66 auto refinementEnd = std::chrono::high_resolution_clock::now();
68 auto signatureTime = std::chrono::duration_cast<std::chrono::milliseconds>(signatureEnd - signatureStart).count();
69 auto refinementTime = std::chrono::duration_cast<std::chrono::milliseconds>(refinementEnd - refinementStart).count();
71 << (signatureTime + refinementTime) <<
"ms (signature: " << signatureTime <<
"ms, refinement: " << refinementTime
84template<storm::dd::DdType DdType,
typename ValueType>
86 return choicePartition;
89template<storm::dd::DdType DdType,
typename ValueType>
93 if (newStatePartition == this->statePartition) {
96 this->statePartition = newStatePartition;
101template<storm::dd::DdType DdType,
typename ValueType>
104 Partition<DdType, ValueType> newChoicePartition = this->signatureRefiner.refine(this->choicePartition, Signature<DdType, ValueType>(stateActionRewards));
105 if (newChoicePartition == this->choicePartition) {
108 this->choicePartition = newChoicePartition;
Bdd< LibraryType > existsAbstract(std::set< storm::expressions::Variable > const &metaVariables) const
Existentially abstracts from the given meta variables.
virtual bool refine(bisimulation::SignatureMode const &mode=bisimulation::SignatureMode::Eager) override
Refines the partition.
Partition< DdType, ValueType > const & getChoicePartition() const
Retrieves the current choice partition in the refinement process.
NondeterministicModelPartitionRefiner(storm::models::symbolic::NondeterministicModel< DdType, ValueType > const &model, Partition< DdType, ValueType > const &initialStatePartition, BisimulationOptions const &bisimulationOptions)
uint64_t getNumberOfBlocks() const
std::chrono::high_resolution_clock::duration totalSignatureTime
Partition< DdType, ValueType > internalRefine(SignatureComputer< DdType, ValueType > &stateSignatureComputer, SignatureRefiner< DdType, ValueType > &signatureRefiner, Partition< DdType, ValueType > const &oldPartition, Partition< DdType, ValueType > const &targetPartition, SignatureMode const &mode=SignatureMode::Eager)
Partition< DdType, ValueType > statePartition
PartitionRefiner(storm::models::symbolic::Model< DdType, ValueType > const &model, Partition< DdType, ValueType > const &initialStatePartition, BisimulationOptions const &bisimulationOptions)
SignatureRefiner< DdType, ValueType > signatureRefiner
SignatureComputer< DdType, ValueType > signatureComputer
Base class for all nondeterministic symbolic models.
#define STORM_LOG_INFO(message)
#define STORM_LOG_TRACE(message)