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.
47 lines
2.9 KiB
47 lines
2.9 KiB
#include "src/solver/stateelimination/LongRunAverageEliminator.h"
|
|
|
|
namespace storm {
|
|
namespace solver {
|
|
namespace stateelimination {
|
|
|
|
template<typename SparseModelType>
|
|
LongRunAverageEliminator<SparseModelType>::LongRunAverageEliminator(storm::storage::FlexibleSparseMatrix<ValueType>& transitionMatrix, storm::storage::FlexibleSparseMatrix<ValueType>& backwardTransitions, storm::modelchecker::StatePriorityQueue<ValueType>& priorityQueue, std::vector<ValueType>& stateValues, std::vector<ValueType>& averageTimeInStates) : StateEliminator<SparseModelType>(transitionMatrix, backwardTransitions), priorityQueue(priorityQueue), stateValues(stateValues), averageTimeInStates(averageTimeInStates) {
|
|
}
|
|
|
|
template<typename SparseModelType>
|
|
void LongRunAverageEliminator<SparseModelType>::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<typename SparseModelType>
|
|
void LongRunAverageEliminator<SparseModelType>::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<typename SparseModelType>
|
|
void LongRunAverageEliminator<SparseModelType>::updatePriority(storm::storage::sparse::state_type const& state) {
|
|
priorityQueue.update(state, StateEliminator<SparseModelType>::transitionMatrix, StateEliminator<SparseModelType>::backwardTransitions, stateValues);
|
|
}
|
|
|
|
template<typename SparseModelType>
|
|
bool LongRunAverageEliminator<SparseModelType>::filterPredecessor(storm::storage::sparse::state_type const& state) {
|
|
assert(false);
|
|
}
|
|
|
|
template<typename SparseModelType>
|
|
bool LongRunAverageEliminator<SparseModelType>::isFilterPredecessor() const {
|
|
return false;
|
|
}
|
|
|
|
|
|
template class LongRunAverageEliminator<storm::models::sparse::Dtmc<double>>;
|
|
|
|
#ifdef STORM_HAVE_CARL
|
|
template class LongRunAverageEliminator<storm::models::sparse::Dtmc<storm::RationalFunction>>;
|
|
#endif
|
|
|
|
} // namespace stateelimination
|
|
} // namespace storage
|
|
} // namespace storm
|