#include "src/solver/stateelimination/ConditionalStateEliminator.h" #include "src/utility/macros.h" #include "src/utility/constants.h" namespace storm { namespace solver { namespace stateelimination { template ConditionalStateEliminator::ConditionalStateEliminator(storm::storage::FlexibleSparseMatrix& transitionMatrix, storm::storage::FlexibleSparseMatrix& backwardTransitions, std::vector& oneStepProbabilities, storm::storage::BitVector& phiStates, storm::storage::BitVector& psiStates) : StateEliminator(transitionMatrix, backwardTransitions), oneStepProbabilities(oneStepProbabilities), phiStates(phiStates), psiStates(psiStates), filterLabel(StateLabel::NONE) { } template void ConditionalStateEliminator::updateValue(storm::storage::sparse::state_type const& state, ValueType const& loopProbability) { oneStepProbabilities[state] = storm::utility::simplify(loopProbability * oneStepProbabilities[state]); } template void ConditionalStateEliminator::updatePredecessor(storm::storage::sparse::state_type const& predecessor, ValueType const& probability, storm::storage::sparse::state_type const& state) { oneStepProbabilities[predecessor] = storm::utility::simplify(oneStepProbabilities[predecessor] * storm::utility::simplify(probability * oneStepProbabilities[state])); } template bool ConditionalStateEliminator::filterPredecessor(storm::storage::sparse::state_type const& state) { // TODO find better solution than flag switch (filterLabel) { case StateLabel::PHI: return phiStates.get(state); case StateLabel::PSI: return psiStates.get(state); default: STORM_LOG_ASSERT(false, "Specific state not set."); return false; } } template bool ConditionalStateEliminator::isFilterPredecessor() const { return true; } template void ConditionalStateEliminator::setFilterPhi() { filterLabel = StateLabel::PHI; } template void ConditionalStateEliminator::setFilterPsi() { filterLabel = StateLabel::PSI; } template void ConditionalStateEliminator::setFilter(StateLabel const& stateLabel) { filterLabel = stateLabel; } template void ConditionalStateEliminator::unsetFilter() { filterLabel = StateLabel::NONE; } template class ConditionalStateEliminator; #ifdef STORM_HAVE_CARL template class ConditionalStateEliminator; template class ConditionalStateEliminator; #endif } // namespace stateelimination } // namespace storage } // namespace storm