14template <
class Number>
37 std::unique_ptr<NumberSet<Number>>
clone()
const override {
return std::make_unique<NumberInterval>(*
this); }
44 inline void resetValues(
const std::set<Number> &numbers)
override {
45 if (numbers.size() == 1) {
46 _min = *numbers.begin();
47 _max = *numbers.begin();
48 }
else if (numbers.size() == 2) {
49 _min = std::min(*numbers.begin(), *++numbers.begin());
50 _max = std::max(*numbers.begin(), *++numbers.begin());
54 "NumberInterval::resetValues: NumberInterval constructor takes exactly"
55 " one or two values");
60 std::ostringstream ss;
61 ss << _min <<
"-" << _max;
65 inline bool isEmpty()
const override {
return false; }
66 inline bool isFinite()
const override {
return _max == _min; }
68 size_t size()
const override {
75 inline Number
getMin()
const override {
return _min; }
76 inline Number
getMax()
const override {
return _max; }
78 std::set<Number>
getAll()
const override {
86 std::uniform_real_distribution<Number> distr(_min, _max);
90 std::vector<Number> result;
96 result.push_back((_max + _min) / 2);
102 Number distance = (_max - _min) / (n - 1);
103 for (
size_t i = 0; i < (n - 1); ++i) {
104 result.push_back(_min + distance * i);
107 result.push_back(_max);
110 std::shuffle(std::begin(result), std::end(result), rng);
116 std::set<Number> result;
128 Number distance = (_max - _min) / (n - 1);
129 for (
size_t i = 0; i < (n - 1); ++i) {
130 result.insert(_min + distance * i);
138 Number
getMedian()
const override {
return (_max + _min) / 2; }
Class describing an interval.
Definition: NumberInterval.h:15
bool isEmpty() const override
Indicates if the set is empty.
Definition: NumberInterval.h:65
bool includes(const NumberInterval< Number > &other) const
Check if the other interval is fully included in this interval.
Definition: NumberInterval.h:156
std::unique_ptr< NumberSet< Number > > clone() const override
Create a copy of a NumberSet.
Definition: NumberInterval.h:37
void resetValues(const std::set< Number > &numbers) override
Setter for NumberInterval.
Definition: NumberInterval.h:44
Number getMin() const override
Get the smallest number in the set.
Definition: NumberInterval.h:75
Number getMedian() const override
Get the median of the set.
Definition: NumberInterval.h:138
bool operator==(const NumberSet< Number > &rhs) const override
Comparison operator.
Definition: NumberInterval.h:140
bool isInterval() const override
Function to distinguish between NumberSetFinite and NumberInterval.
Definition: NumberInterval.h:67
NumberInterval()
Default Constructor: Create a range which only contains 0.
Definition: NumberInterval.h:20
std::set< Number > uniformSampleSet(size_t n, Random &rng) const override
Sample up to n points from the set.
Definition: NumberInterval.h:115
NumberInterval(Number val)
Create a range which only contains given value.
Definition: NumberInterval.h:25
size_t size() const override
Get size of set.
Definition: NumberInterval.h:68
std::set< Number > getAll() const override
Get all numbers in the set.
Definition: NumberInterval.h:78
Number getMax() const override
Get the largest number in the set.
Definition: NumberInterval.h:76
bool overlaps(const NumberInterval< Number > &other) const
Check if this and another interval overlap.
Definition: NumberInterval.h:149
std::vector< Number > uniformSample(size_t n, Random &rng) const override
Sample n points from the set.
Definition: NumberInterval.h:89
bool isFinite() const override
Indicates if the set is finite.
Definition: NumberInterval.h:66
NumberInterval(Number min, Number max)
Create a range with given bounds.
Definition: NumberInterval.h:31
std::string to_string() const override
Get a string representation of the set.
Definition: NumberInterval.h:59
Number getRandom(Random &rng) const override
Get a random number in the set.
Definition: NumberInterval.h:85
Virtual class describing a finite or infinite set of numbers.
Definition: NumberSet.h:22
virtual Number getMin() const =0
Get the smallest number in the set.
virtual Number getMax() const =0
Get the largest number in the set.
virtual bool isInterval() const =0
Function to distinguish between NumberSetFinite and NumberInterval.
Class for random algorithms.
Definition: Random.h:22
static void exception(const Exception e)
Handle an exception derived by std::exception.
Definition: ExceptionHandler.h:63
This is the main namespace of AutoPas.
Definition: AutoPasDecl.h:32