16template<
typename ValueType>
22template<
typename ValueType,
typename SolutionType>
27template<
typename ValueType,
typename SolutionType>
33template<
typename ValueType,
typename SolutionType>
38template<
typename ValueType,
typename SolutionType>
41 : optimizationDirection(optimizationDirection), comparisonType(boundComparisonType), threshold(boundThreshold), relevantValueVector(relevantValues) {
45template<
typename ValueType,
typename SolutionType>
47 : optimizationDirection(optimizationDirection), relevantValueVector(relevantValues) {
51template<
typename ValueType,
typename SolutionType>
53 return static_cast<bool>(optimizationDirection);
56template<
typename ValueType,
typename SolutionType>
58 if (optimizationDirection) {
59 if (optimizationDirection == storm::solver::OptimizationDirection::Minimize) {
60 optimizationDirection = storm::solver::OptimizationDirection::Maximize;
62 optimizationDirection = storm::solver::OptimizationDirection::Minimize;
66 this->threshold = storm::utility::one<SolutionType>() - this->threshold.get();
69 switch (comparisonType.get()) {
86template<
typename ValueType,
typename SolutionType>
88 return optimizationDirection == OptimizationDirection::Minimize;
91template<
typename ValueType,
typename SolutionType>
93 return optimizationDirection.get();
96template<
typename ValueType,
typename SolutionType>
98 return comparisonType && threshold && relevantValueVector;
101template<
typename ValueType,
typename SolutionType>
106template<
typename ValueType,
typename SolutionType>
111template<
typename ValueType,
typename SolutionType>
113 return robustAgainstUncertainty;
116template<
typename ValueType,
typename SolutionType>
118 return threshold.get();
121template<
typename ValueType,
typename SolutionType>
123 return static_cast<bool>(relevantValueVector);
126template<
typename ValueType,
typename SolutionType>
128 return relevantValueVector.
get();
131template<
typename ValueType,
typename SolutionType>
133 return relevantValueVector.
get();
136template<
typename ValueType,
typename SolutionType>
138 if (relevantValueVector) {
139 relevantValueVector = relevantValueVector.get() % filter;
143template<
typename ValueType,
typename SolutionType>
145 relevantValueVector = std::move(values);
bool boundIsStrict() 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(uint_fast64_t index) const
Retrieves the truth value of the bit at the given index and performs a bound check.
bool constexpr minimize(OptimizationDirection d)