You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
2.0 KiB
41 lines
2.0 KiB
#ifndef STORM_SOLVER_STATEELIMINATION_CONDITIONALSTATEELIMINATOR_H_
|
|
#define STORM_SOLVER_STATEELIMINATION_CONDITIONALSTATEELIMINATOR_H_
|
|
|
|
#include "src/solver/stateelimination/StateEliminator.h"
|
|
|
|
#include "src/storage/BitVector.h"
|
|
|
|
namespace storm {
|
|
namespace solver {
|
|
namespace stateelimination {
|
|
|
|
template<typename ValueType>
|
|
class ConditionalStateEliminator : public StateEliminator<ValueType> {
|
|
public:
|
|
enum class StateLabel { NONE, PHI, PSI };
|
|
|
|
ConditionalStateEliminator(storm::storage::FlexibleSparseMatrix<ValueType>& transitionMatrix, storm::storage::FlexibleSparseMatrix<ValueType>& backwardTransitions, std::vector<ValueType>& oneStepProbabilities, storm::storage::BitVector& phiStates, storm::storage::BitVector& psiStates);
|
|
|
|
// Instantiaton of Virtual methods
|
|
void updateValue(storm::storage::sparse::state_type const& state, ValueType const& loopProbability) override;
|
|
void updatePredecessor(storm::storage::sparse::state_type const& predecessor, ValueType const& probability, storm::storage::sparse::state_type const& state) override;
|
|
bool filterPredecessor(storm::storage::sparse::state_type const& state) override;
|
|
bool isFilterPredecessor() const override;
|
|
|
|
void setFilterPhi();
|
|
void setFilterPsi();
|
|
void setFilter(StateLabel const& stateLabel);
|
|
void unsetFilter();
|
|
|
|
private:
|
|
std::vector<ValueType>& oneStepProbabilities;
|
|
storm::storage::BitVector& phiStates;
|
|
storm::storage::BitVector& psiStates;
|
|
StateLabel filterLabel;
|
|
};
|
|
|
|
} // namespace stateelimination
|
|
} // namespace storage
|
|
} // namespace storm
|
|
|
|
#endif // STORM_SOLVER_STATEELIMINATION_CONDITIONALSTATEELIMINATOR_H_
|