21template<
typename ModelType,
typename BlockDataType>
49 Options(ModelType
const&
model, std::vector<std::shared_ptr<storm::logic::Formula const>>
const& formulas,
ValueType const& tolerance);
74 STORM_LOG_WARN_COND(!discounted,
"Weak bisimulation does not preserve discounted properties.");
90 return this->discounted;
94 return this->keepRewards;
98 this->keepRewards = keepRewards;
102 return static_cast<bool>(optimalityType);
115 return optimalityType.value();
133 std::optional<OptimizationDirection> optimalityType;
137 bool keepRewards =
false;
144 bool bounded =
false;
148 bool discounted =
false;
173 void addToRespectedAtomicPropositions(std::vector<std::shared_ptr<storm::logic::AtomicExpressionFormula const>>
const&
expressions,
174 std::vector<std::shared_ptr<storm::logic::AtomicLabelFormula const>>
const& labels);
storm::storage::SparseMatrix< ValueType > backwardTransitions
virtual void buildQuotient()=0
Builds the quotient model based on the previously computed equivalence classes (stored in the blocks ...
virtual void refinePartitionBasedOnSplitter(bisimulation::Block< BlockDataType > &splitter, std::vector< bisimulation::Block< BlockDataType > * > &splitterVector)=0
Refines the partition by considering the given splitter.
storm::utility::ConstantsComparator< ValueType > comparator
std::shared_ptr< ModelType > getQuotient() const
Retrieves the quotient of the model under the computed bisimulation.
std::shared_ptr< ModelType > quotient
void performPartitionRefinement()
Performs the partition refinement on the model and thereby computes the equivalence classes under str...
virtual void splitInitialPartitionBasedOnRewards()
Splits the initial partition based on the (unique) reward model of the current model.
virtual void splitInitialPartitionBasedOnActionRewards(std::vector< std::set< ValueType > > const &rewardVector)
Splits the initial partition based on the given vector of action rewards.
BisimulationDecomposition(ModelType const &model, Options const &options)
Decomposes the given model into equivalence classes of a bisimulation.
storm::storage::bisimulation::Partition< BlockDataType > partition
void computeBisimulationDecomposition()
Computes the decomposition of the model into bisimulation equivalence classes.
ModelType::ValueType ValueType
ModelType::RewardModelType RewardModelType
void extractDecompositionBlocks()
Constructs the blocks of the decomposition object based on the current partition.
virtual std::pair< storm::storage::BitVector, storm::storage::BitVector > getStatesWithProbability01()=0
Computes the set of states with probability 0/1 for satisfying phi until psi.
virtual ~BisimulationDecomposition()=default
virtual void initializeMeasureDrivenPartition()
Creates the measure-driven initial partition for reaching psi states from phi states.
virtual void initializeLabelBasedPartition()
Initializes the initial partition based on all respected labels.
virtual void initialize()
A function that can initialize auxiliary data structures.
A class that holds a possibly non-square matrix in the compressed row storage format.
#define STORM_LOG_ASSERT(cond, message)
#define STORM_LOG_WARN_COND(cond, message)
solver::OptimizationDirection OptimizationDirection
static const bool IsExact
void preserveFormula(storm::logic::Formula const &formula)
Changes the options in a way that the given formula is preserved.
static Options preservingAllLabels(ValueType const &tolerance)
Creates an object representing the options necessary to obtain the quotient that respects all atomic ...
bool measureDrivenInitialPartition
void setType(BisimulationType t)
Sets the bisimulation type.
ValueType getTolerance() const
std::optional< storm::storage::BitVector > phiStates
void setKeepRewards(bool keepRewards)
bool buildQuotient
A flag that governs whether the quotient model is actually built or only the decomposition is compute...
Options(ModelType const &model, storm::logic::Formula const &formula, ValueType const &tolerance)
Creates an object representing the options necessary to obtain the quotient while still preserving th...
bool isOptimizationDirectionSet() const
bool getKeepRewards() const
std::optional< std::set< std::string > > respectedAtomicPropositions
An optional set of strings that indicate which of the atomic propositions of the model are to be resp...
BisimulationType getType() const
std::optional< storm::storage::BitVector > psiStates
OptimizationDirection getOptimizationDirection() const
void setTolerance(ValueType value)
bool getDiscounted() const