#pragma once #include #include #include #include #include "storm/solver/stateelimination/StatePriorityQueue.h" namespace storm { namespace storage { template class FlexibleSparseMatrix; } namespace solver { namespace stateelimination { struct PriorityComparator { bool operator()(std::pair const& first, std::pair const& second) const { return (first.second < second.second) || (first.second == second.second && first.first < second.first) ; } }; template class DynamicStatePriorityQueue : public StatePriorityQueue { public: typedef std::function const& transitionMatrix, storm::storage::FlexibleSparseMatrix const& backwardTransitions, std::vector const& oneStepProbabilities)> PenaltyFunctionType; DynamicStatePriorityQueue(std::vector> const& sortedStatePenaltyPairs, storm::storage::FlexibleSparseMatrix const& transitionMatrix, storm::storage::FlexibleSparseMatrix const& backwardTransitions, std::vector const& oneStepProbabilities, PenaltyFunctionType const& penaltyFunction); virtual bool hasNext() const override; virtual storm::storage::sparse::state_type pop() override; virtual void update(storm::storage::sparse::state_type state) override; virtual std::size_t size() const override; private: typedef std::set, PriorityComparator> PriorityQueue; typedef std::unordered_map StatePriorityQueueEntryMap; storm::storage::FlexibleSparseMatrix const& transitionMatrix; storm::storage::FlexibleSparseMatrix const& backwardTransitions; std::vector const& oneStepProbabilities; PriorityQueue priorityQueue; StatePriorityQueueEntryMap stateToPriorityQueueEntry; PenaltyFunctionType penaltyFunction; }; } } }