12template<
typename ValueType>
18template<
typename ValueType,
typename SolutionType>
23template<
typename ValueType,
typename SolutionType>
29template<
typename ValueType,
typename SolutionType>
34template<
typename ValueType,
typename SolutionType>
37 : optimizationDirection(optimizationDirection), comparisonType(boundComparisonType), threshold(boundThreshold), relevantValueVector(relevantValues) {
41template<
typename ValueType,
typename SolutionType>
43 : optimizationDirection(optimizationDirection), relevantValueVector(relevantValues) {
47template<
typename ValueType,
typename SolutionType>
49 return static_cast<bool>(optimizationDirection);
52template<
typename ValueType,
typename SolutionType>
54 if (optimizationDirection) {
55 if (optimizationDirection == storm::solver::OptimizationDirection::Minimize) {
56 optimizationDirection = storm::solver::OptimizationDirection::Maximize;
58 optimizationDirection = storm::solver::OptimizationDirection::Minimize;
62 this->threshold = storm::utility::one<SolutionType>() - this->threshold.get();
65 switch (comparisonType.get()) {
82template<
typename ValueType,
typename SolutionType>
84 return optimizationDirection == OptimizationDirection::Minimize;
87template<
typename ValueType,
typename SolutionType>
89 return optimizationDirection.get();
92template<
typename ValueType,
typename SolutionType>
94 return comparisonType && threshold && relevantValueVector;
97template<
typename ValueType,
typename SolutionType>
102template<
typename ValueType,
typename SolutionType>
107template<
typename ValueType,
typename SolutionType>
109 return robustAgainstUncertainty;
112template<
typename ValueType,
typename SolutionType>
114 return threshold.get();
117template<
typename ValueType,
typename SolutionType>
119 return static_cast<bool>(relevantValueVector);
122template<
typename ValueType,
typename SolutionType>
124 return relevantValueVector.
get();
127template<
typename ValueType,
typename SolutionType>
129 return relevantValueVector.
get();
132template<
typename ValueType,
typename SolutionType>
134 if (relevantValueVector) {
135 relevantValueVector = relevantValueVector.get() % filter;
139template<
typename ValueType,
typename SolutionType>
141 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(uint64_t index) const
Retrieves the truth value of the bit at the given index and performs a bound check.
bool constexpr minimize(OptimizationDirection d)