#pragma once #include #include #include #include "storm/storage/sparse/StateType.h" #include "storm/adapters/RationalFunctionAdapter.h" #include "storm/settings/modules/EliminationSettings.h" namespace storm { namespace solver { namespace stateelimination { class StatePriorityQueue; } } namespace storage { class BitVector; template class FlexibleSparseMatrix; template class SparseMatrix; } namespace utility { namespace stateelimination { using namespace storm::solver::stateelimination; bool eliminationOrderNeedsDistances(storm::settings::modules::EliminationSettings::EliminationOrder const& order); bool eliminationOrderNeedsForwardDistances(storm::settings::modules::EliminationSettings::EliminationOrder const& order); bool eliminationOrderNeedsReversedDistances(storm::settings::modules::EliminationSettings::EliminationOrder const& order); bool eliminationOrderIsPenaltyBased(storm::settings::modules::EliminationSettings::EliminationOrder const& order); bool eliminationOrderIsStatic(storm::settings::modules::EliminationSettings::EliminationOrder const& order); template uint_fast64_t estimateComplexity(ValueType const& value); #ifdef STORM_HAVE_CARL template<> uint_fast64_t estimateComplexity(storm::RationalFunction const& value); #endif template uint_fast64_t computeStatePenalty(storm::storage::sparse::state_type const& state, storm::storage::FlexibleSparseMatrix const& transitionMatrix, storm::storage::FlexibleSparseMatrix const& backwardTransitions, std::vector const& oneStepProbabilities); template uint_fast64_t computeStatePenaltyRegularExpression(storm::storage::sparse::state_type const& state, storm::storage::FlexibleSparseMatrix const& transitionMatrix, storm::storage::FlexibleSparseMatrix const& backwardTransitions, std::vector const& oneStepProbabilities); template std::shared_ptr createStatePriorityQueue(boost::optional> const& stateDistances, storm::storage::FlexibleSparseMatrix const& transitionMatrix, storm::storage::FlexibleSparseMatrix const& backwardTransitions, std::vector const& oneStepProbabilities, storm::storage::BitVector const& states); std::shared_ptr createStatePriorityQueue(storm::storage::BitVector const& states); std::shared_ptr createStatePriorityQueue(std::vector const& states); template std::vector getDistanceBasedPriorities(storm::storage::SparseMatrix const& transitionMatrix, storm::storage::SparseMatrix const& transitionMatrixTransposed, storm::storage::BitVector const& initialStates, std::vector const& oneStepProbabilities, bool forward, bool reverse); template std::vector getStateDistances(storm::storage::SparseMatrix const& transitionMatrix, storm::storage::SparseMatrix const& transitionMatrixTransposed, storm::storage::BitVector const& initialStates, std::vector const& oneStepProbabilities, bool forward); } } }