Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
DynamicStatePriorityQueue.h
Go to the documentation of this file.
1#pragma once
2
3#include <functional>
4#include <set>
5#include <unordered_map>
6#include <vector>
7
9
10namespace storm {
11namespace storage {
12template<typename ValueType>
13class FlexibleSparseMatrix;
14}
15
16namespace solver {
17namespace stateelimination {
18
20 bool operator()(std::pair<storm::storage::sparse::state_type, uint_fast64_t> const& first,
21 std::pair<storm::storage::sparse::state_type, uint_fast64_t> const& second) const {
22 return (first.second < second.second) || (first.second == second.second && first.first < second.first);
23 }
24};
25
26template<typename ValueType>
28 public:
29 typedef std::function<uint_fast64_t(
31 storm::storage::FlexibleSparseMatrix<ValueType> const& backwardTransitions, std::vector<ValueType> const& oneStepProbabilities)>
33
34 DynamicStatePriorityQueue(std::vector<std::pair<storm::storage::sparse::state_type, uint_fast64_t>> const& sortedStatePenaltyPairs,
36 storm::storage::FlexibleSparseMatrix<ValueType> const& backwardTransitions, std::vector<ValueType> const& oneStepProbabilities,
37 PenaltyFunctionType const& penaltyFunction);
38
39 virtual bool hasNext() const override;
40 virtual storm::storage::sparse::state_type pop() override;
41 virtual void update(storm::storage::sparse::state_type state) override;
42 virtual std::size_t size() const override;
43
44 private:
45 typedef std::set<std::pair<storm::storage::sparse::state_type, uint_fast64_t>, PriorityComparator> PriorityQueue;
46 typedef std::unordered_map<storm::storage::sparse::state_type, PriorityQueue::const_iterator> StatePriorityQueueEntryMap;
47
49 storm::storage::FlexibleSparseMatrix<ValueType> const& backwardTransitions;
50 std::vector<ValueType> const& oneStepProbabilities;
51 PriorityQueue priorityQueue;
52 StatePriorityQueueEntryMap stateToPriorityQueueEntry;
53 PenaltyFunctionType penaltyFunction;
54};
55
56} // namespace stateelimination
57} // namespace solver
58} // namespace storm
std::function< uint_fast64_t(storm::storage::sparse::state_type const &state, storm::storage::FlexibleSparseMatrix< ValueType > const &transitionMatrix, storm::storage::FlexibleSparseMatrix< ValueType > const &backwardTransitions, std::vector< ValueType > const &oneStepProbabilities)> PenaltyFunctionType
virtual void update(storm::storage::sparse::state_type state) override
virtual storm::storage::sparse::state_type pop() override
The flexible sparse matrix is used during state elimination.
LabParser.cpp.
Definition cli.cpp:18
bool operator()(std::pair< storm::storage::sparse::state_type, uint_fast64_t > const &first, std::pair< storm::storage::sparse::state_type, uint_fast64_t > const &second) const