#ifndef STORM_MODELCHECKER_EXPLORATION_EXPLORATION_DETAIL_BOUNDS_H_ #define STORM_MODELCHECKER_EXPLORATION_EXPLORATION_DETAIL_BOUNDS_H_ #include #include #include "src/solver/OptimizationDirection.h" #include "src/utility/constants.h" namespace storm { namespace modelchecker { namespace exploration_detail { template class ExplorationInformation; template class Bounds { public: typedef StateType ActionType; std::pair getBoundsForState(StateType const& state, ExplorationInformation const& explorationInformation) const; ValueType getLowerBoundForState(StateType const& state, ExplorationInformation const& explorationInformation) const; ValueType const& getLowerBoundForRowGroup(StateType const& rowGroup) const; ValueType getUpperBoundForState(StateType const& state, ExplorationInformation const& explorationInformation) const; ValueType const& getUpperBoundForRowGroup(StateType const& rowGroup) const; std::pair const& getBoundsForAction(ActionType const& action) const; ValueType const& getLowerBoundForAction(ActionType const& action) const; ValueType const& getUpperBoundForAction(ActionType const& action) const; ValueType const& getBoundForAction(storm::OptimizationDirection const& direction, ActionType const& action) const; ValueType getDifferenceOfStateBounds(StateType const& state, ExplorationInformation const& explorationInformation) const; void initializeBoundsForNextState(std::pair const& vals = std::pair(storm::utility::zero(), storm::utility::one())); void initializeBoundsForNextAction(std::pair const& vals = std::pair(storm::utility::zero(), storm::utility::one())); void setLowerBoundForState(StateType const& state, ExplorationInformation const& explorationInformation, ValueType const& value); void setLowerBoundForRowGroup(StateType const& group, ValueType const& value); void setUpperBoundForState(StateType const& state, ExplorationInformation const& explorationInformation, ValueType const& value); void setUpperBoundForRowGroup(StateType const& group, ValueType const& value); void setBoundsForAction(ActionType const& action, std::pair const& values); void setBoundsForState(StateType const& state, ExplorationInformation const& explorationInformation, std::pair const& values); void setBoundsForRowGroup(StateType const& rowGroup, std::pair const& values); bool setLowerBoundOfStateIfGreaterThanOld(StateType const& state, ExplorationInformation const& explorationInformation, ValueType const& newLowerValue); bool setUpperBoundOfStateIfLessThanOld(StateType const& state, ExplorationInformation const& explorationInformation, ValueType const& newUpperValue); private: std::vector> boundsPerState; std::vector> boundsPerAction; }; } } } #endif /* STORM_MODELCHECKER_EXPLORATION_EXPLORATION_DETAIL_BOUNDS_H_ */