27 changed files with 585 additions and 24 deletions
-
16src/storm/abstraction/AbstractionInformation.cpp
-
8src/storm/abstraction/AbstractionInformation.h
-
48src/storm/abstraction/ExplicitQuantiativeResultMinMax.cpp
-
54src/storm/abstraction/ExplicitQuantitativeResult.cpp
-
31src/storm/abstraction/ExplicitQuantitativeResult.h
-
61src/storm/abstraction/ExplicitQuantitativeResultMinMax.cpp
-
32src/storm/abstraction/ExplicitQuantitativeResultMinMax.h
-
9src/storm/abstraction/MenuGameAbstractor.cpp
-
2src/storm/abstraction/MenuGameAbstractor.h
-
177src/storm/abstraction/MenuGameRefiner.cpp
-
5src/storm/abstraction/MenuGameRefiner.h
-
5src/storm/abstraction/jani/AutomatonAbstractor.cpp
-
5src/storm/abstraction/jani/AutomatonAbstractor.h
-
5src/storm/abstraction/jani/EdgeAbstractor.cpp
-
5src/storm/abstraction/jani/EdgeAbstractor.h
-
5src/storm/abstraction/jani/JaniMenuGameAbstractor.cpp
-
5src/storm/abstraction/jani/JaniMenuGameAbstractor.h
-
5src/storm/abstraction/prism/CommandAbstractor.cpp
-
5src/storm/abstraction/prism/CommandAbstractor.h
-
5src/storm/abstraction/prism/ModuleAbstractor.cpp
-
5src/storm/abstraction/prism/ModuleAbstractor.h
-
5src/storm/abstraction/prism/PrismMenuGameAbstractor.cpp
-
5src/storm/abstraction/prism/PrismMenuGameAbstractor.h
-
89src/storm/modelchecker/abstraction/GameBasedMdpModelChecker.cpp
-
7src/storm/modelchecker/abstraction/GameBasedMdpModelChecker.h
-
5src/storm/models/symbolic/StochasticTwoPlayerGame.cpp
-
5src/storm/models/symbolic/StochasticTwoPlayerGame.h
@ -0,0 +1,48 @@ |
|||||
|
#include "storm/abstraction/ExplicitQuantitativeResultMinMax.h"
|
||||
|
|
||||
|
namespace storm { |
||||
|
namespace abstraction { |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
ExplicitQuantitativeResultMinMax<ValueType>::ExplicitQuantitativeResultMinMax(uint64_t numberOfStates) = default; |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
ExplicitQuantitativeResult<ValueType> const& ExplicitQuantitativeResultMinMax<ValueType>::getMin() const { |
||||
|
return min; |
||||
|
} |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
ExplicitQuantitativeResult<ValueType>& ExplicitQuantitativeResultMinMax<ValueType>::getMin() { |
||||
|
return min; |
||||
|
} |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
ExplicitQuantitativeResult<ValueType> const& ExplicitQuantitativeResultMinMax<ValueType>::getMax() const { |
||||
|
return max; |
||||
|
} |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
ExplicitQuantitativeResult<ValueType>& ExplicitQuantitativeResultMinMax<ValueType>::getMax() { |
||||
|
return max; |
||||
|
} |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
ExplicitQuantitativeResult<ValueType> const& ExplicitQuantitativeResultMinMax<ValueType>::get(storm::OptimizationDirection const& dir) const { |
||||
|
if (dir == storm::OptimizationDirection::Minimize) { |
||||
|
return this->getMin(); |
||||
|
} else { |
||||
|
return this->getMax(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
ExplicitQuantitativeResult<ValueType>& ExplicitQuantitativeResultMinMax<ValueType>::get(storm::OptimizationDirection const& dir) { |
||||
|
if (dir == storm::OptimizationDirection::Minimize) { |
||||
|
return this->getMin(); |
||||
|
} else { |
||||
|
return this->getMax(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,54 @@ |
|||||
|
#include "storm/abstraction/ExplicitQuantitativeResult.h"
|
||||
|
|
||||
|
#include "storm/storage/BitVector.h"
|
||||
|
|
||||
|
#include "storm/utility/macros.h"
|
||||
|
#include "storm/exceptions/InvalidArgumentException.h"
|
||||
|
|
||||
|
namespace storm { |
||||
|
namespace abstraction { |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
ExplicitQuantitativeResult<ValueType>::ExplicitQuantitativeResult(uint64_t numberOfStates) : values(numberOfStates) { |
||||
|
// Intentionally left empty.
|
||||
|
} |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
std::vector<ValueType> const& ExplicitQuantitativeResult<ValueType>::getValues() const { |
||||
|
return values; |
||||
|
} |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
std::vector<ValueType>& ExplicitQuantitativeResult<ValueType>::getValues() { |
||||
|
return values; |
||||
|
} |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
void ExplicitQuantitativeResult<ValueType>::setValue(uint64_t state, ValueType const& value) { |
||||
|
values[state] = value; |
||||
|
} |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
std::pair<ValueType, ValueType> ExplicitQuantitativeResult<ValueType>::getRange(storm::storage::BitVector const& states) const { |
||||
|
STORM_LOG_THROW(!states.empty(), storm::exceptions::InvalidArgumentException, "Expected non-empty set of states."); |
||||
|
|
||||
|
auto stateIt = states.begin(); |
||||
|
std::pair<ValueType, ValueType> result = std::make_pair(values[*stateIt], values[*stateIt]); |
||||
|
++stateIt; |
||||
|
|
||||
|
while (stateIt != states.end()) { |
||||
|
if (values[*stateIt] < result.first) { |
||||
|
result.first = values[*stateIt]; |
||||
|
} else if (values[*stateIt] < result.first) { |
||||
|
result.second = values[*stateIt]; |
||||
|
} |
||||
|
|
||||
|
++stateIt; |
||||
|
} |
||||
|
|
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
template class ExplicitQuantitativeResult<double>; |
||||
|
} |
||||
|
} |
@ -0,0 +1,31 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include <cstdint> |
||||
|
#include <vector> |
||||
|
|
||||
|
namespace storm { |
||||
|
namespace storage { |
||||
|
class BitVector; |
||||
|
} |
||||
|
|
||||
|
namespace abstraction { |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
class ExplicitQuantitativeResult { |
||||
|
public: |
||||
|
ExplicitQuantitativeResult() = default; |
||||
|
ExplicitQuantitativeResult(uint64_t numberOfStates); |
||||
|
|
||||
|
std::vector<ValueType> const& getValues() const; |
||||
|
std::vector<ValueType>& getValues(); |
||||
|
void setValue(uint64_t state, ValueType const& value); |
||||
|
|
||||
|
std::pair<ValueType, ValueType> getRange(storm::storage::BitVector const& states) const; |
||||
|
|
||||
|
private: |
||||
|
std::vector<ValueType> values; |
||||
|
}; |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
|
@ -0,0 +1,61 @@ |
|||||
|
#include "storm/abstraction/ExplicitQuantitativeResultMinMax.h"
|
||||
|
|
||||
|
namespace storm { |
||||
|
namespace abstraction { |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
ExplicitQuantitativeResultMinMax<ValueType>::ExplicitQuantitativeResultMinMax(uint64_t numberOfStates) : min(numberOfStates), max(numberOfStates) { |
||||
|
// Intentionally left empty.
|
||||
|
} |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
ExplicitQuantitativeResult<ValueType> const& ExplicitQuantitativeResultMinMax<ValueType>::getMin() const { |
||||
|
return min; |
||||
|
} |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
ExplicitQuantitativeResult<ValueType>& ExplicitQuantitativeResultMinMax<ValueType>::getMin() { |
||||
|
return min; |
||||
|
} |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
ExplicitQuantitativeResult<ValueType> const& ExplicitQuantitativeResultMinMax<ValueType>::getMax() const { |
||||
|
return max; |
||||
|
} |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
ExplicitQuantitativeResult<ValueType>& ExplicitQuantitativeResultMinMax<ValueType>::getMax() { |
||||
|
return max; |
||||
|
} |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
void ExplicitQuantitativeResultMinMax<ValueType>::setMin(ExplicitQuantitativeResult<ValueType>&& newMin) { |
||||
|
min = std::move(newMin); |
||||
|
} |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
void ExplicitQuantitativeResultMinMax<ValueType>::setMax(ExplicitQuantitativeResult<ValueType>&& newMax) { |
||||
|
max = std::move(newMax); |
||||
|
} |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
ExplicitQuantitativeResult<ValueType> const& ExplicitQuantitativeResultMinMax<ValueType>::get(storm::OptimizationDirection const& dir) const { |
||||
|
if (dir == storm::OptimizationDirection::Minimize) { |
||||
|
return this->getMin(); |
||||
|
} else { |
||||
|
return this->getMax(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
ExplicitQuantitativeResult<ValueType>& ExplicitQuantitativeResultMinMax<ValueType>::get(storm::OptimizationDirection const& dir) { |
||||
|
if (dir == storm::OptimizationDirection::Minimize) { |
||||
|
return this->getMin(); |
||||
|
} else { |
||||
|
return this->getMax(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
template class ExplicitQuantitativeResultMinMax<double>; |
||||
|
} |
||||
|
} |
@ -0,0 +1,32 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include "storm/abstraction/ExplicitQuantitativeResult.h" |
||||
|
|
||||
|
#include "storm/solver/OptimizationDirection.h" |
||||
|
|
||||
|
namespace storm { |
||||
|
namespace abstraction { |
||||
|
|
||||
|
template<typename ValueType> |
||||
|
class ExplicitQuantitativeResultMinMax { |
||||
|
public: |
||||
|
ExplicitQuantitativeResultMinMax() = default; |
||||
|
ExplicitQuantitativeResultMinMax(uint64_t numberOfStates); |
||||
|
|
||||
|
ExplicitQuantitativeResult<ValueType> const& getMin() const; |
||||
|
ExplicitQuantitativeResult<ValueType>& getMin(); |
||||
|
ExplicitQuantitativeResult<ValueType> const& getMax() const; |
||||
|
ExplicitQuantitativeResult<ValueType>& getMax(); |
||||
|
ExplicitQuantitativeResult<ValueType> const& get(storm::OptimizationDirection const& dir) const; |
||||
|
ExplicitQuantitativeResult<ValueType>& get(storm::OptimizationDirection const& dir); |
||||
|
|
||||
|
void setMin(ExplicitQuantitativeResult<ValueType>&& newMin); |
||||
|
void setMax(ExplicitQuantitativeResult<ValueType>&& newMax); |
||||
|
|
||||
|
private: |
||||
|
ExplicitQuantitativeResult<ValueType> min; |
||||
|
ExplicitQuantitativeResult<ValueType> max; |
||||
|
}; |
||||
|
|
||||
|
} |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue