#include "src/solver/stateelimination/LongRunAverageEliminator.h" namespace storm { namespace solver { namespace stateelimination { template LongRunAverageEliminator::LongRunAverageEliminator(storm::storage::FlexibleSparseMatrix& transitionMatrix, storm::storage::FlexibleSparseMatrix& backwardTransitions, storm::modelchecker::StatePriorityQueue& priorityQueue, std::vector& stateValues, std::vector& averageTimeInStates) : StateEliminator(transitionMatrix, backwardTransitions), priorityQueue(priorityQueue), stateValues(stateValues), averageTimeInStates(averageTimeInStates) { } template void LongRunAverageEliminator::updateValue(storm::storage::sparse::state_type const& state, ValueType const& loopProbability) { stateValues[state] = storm::utility::simplify(loopProbability * stateValues[state]); averageTimeInStates[state] = storm::utility::simplify(loopProbability * averageTimeInStates[state]); } template void LongRunAverageEliminator::updatePredecessor(storm::storage::sparse::state_type const& predecessor, ValueType const& probability, storm::storage::sparse::state_type const& state) { stateValues[predecessor] = storm::utility::simplify(stateValues[predecessor] + storm::utility::simplify(probability * stateValues[state])); averageTimeInStates[predecessor] = storm::utility::simplify(averageTimeInStates[predecessor] + storm::utility::simplify(probability * averageTimeInStates[state])); } template void LongRunAverageEliminator::updatePriority(storm::storage::sparse::state_type const& state) { priorityQueue.update(state, StateEliminator::transitionMatrix, StateEliminator::backwardTransitions, stateValues); } template bool LongRunAverageEliminator::filterPredecessor(storm::storage::sparse::state_type const& state) { assert(false); } template bool LongRunAverageEliminator::isFilterPredecessor() const { return false; } template class LongRunAverageEliminator>; #ifdef STORM_HAVE_CARL template class LongRunAverageEliminator>; #endif } // namespace stateelimination } // namespace storage } // namespace storm