13template<
typename ValueType>
19template<
typename ValueType,
typename SolutionType>
24template<
typename ValueType,
typename SolutionType>
30template<
typename ValueType,
typename SolutionType>
35template<
typename ValueType,
typename SolutionType>
38 : optimizationDirection(optimizationDirection), comparisonType(boundComparisonType), threshold(boundThreshold), relevantValueVector(relevantValues) {
42template<
typename ValueType,
typename SolutionType>
44 : optimizationDirection(optimizationDirection), relevantValueVector(relevantValues) {
48template<
typename ValueType,
typename SolutionType>
50 return static_cast<bool>(optimizationDirection);
53template<
typename ValueType,
typename SolutionType>
55 if (optimizationDirection) {
56 if (optimizationDirection == storm::solver::OptimizationDirection::Minimize) {
57 optimizationDirection = storm::solver::OptimizationDirection::Maximize;
59 optimizationDirection = storm::solver::OptimizationDirection::Minimize;
63 this->threshold = storm::utility::one<SolutionType>() - this->threshold.get();
66 switch (comparisonType.get()) {
83template<
typename ValueType,
typename SolutionType>
85 return optimizationDirection == OptimizationDirection::Minimize;
88template<
typename ValueType,
typename SolutionType>
90 STORM_LOG_THROW(optimizationDirection.has_value(), storm::exceptions::InvalidPropertyException,
"Optimization direction not set.");
91 return optimizationDirection.get();
94template<
typename ValueType,
typename SolutionType>
96 return comparisonType && threshold && relevantValueVector;
99template<
typename ValueType,
typename SolutionType>
104template<
typename ValueType,
typename SolutionType>
109template<
typename ValueType,
typename SolutionType>
111 return uncertaintyResolutionMode;
114template<
typename ValueType,
typename SolutionType>
116 return threshold.get();
119template<
typename ValueType,
typename SolutionType>
121 return static_cast<bool>(relevantValueVector);
124template<
typename ValueType,
typename SolutionType>
126 return relevantValueVector.
get();
129template<
typename ValueType,
typename SolutionType>
131 return relevantValueVector.
get();
134template<
typename ValueType,
typename SolutionType>
136 if (relevantValueVector) {
137 relevantValueVector = relevantValueVector.get() % filter;
141template<
typename ValueType,
typename SolutionType>
143 relevantValueVector = std::move(values);
bool boundIsStrict() const
UncertaintyResolutionMode getUncertaintyResolutionMode() const
bool boundIsALowerBound() const
void oneMinus()
Flips the comparison type, the direction, and computes the new threshold as 1 - old threshold.
SolutionType const & thresholdValue() const
bool hasRelevantValues() const
void restrictRelevantValues(storm::storage::BitVector const &filter)
storm::storage::BitVector & relevantValues()
void setRelevantValues(storm::storage::BitVector &&values)
bool hasDirection() const
OptimizationDirection direction() const
A bit vector that is internally represented as a vector of 64-bit values.
bool get(uint64_t index) const
Retrieves the truth value of the bit at the given index and performs a bound check.
#define STORM_LOG_THROW(cond, exception, message)
bool constexpr minimize(OptimizationDirection d)
UncertaintyResolutionMode