Vita
fitness.h
Go to the documentation of this file.
1
13#if !defined(VITA_FITNESS_H)
14#define VITA_FITNESS_H
15
16#include <cmath>
17#include <iomanip>
18#include <iostream>
19#include <numeric>
20
21#include "utility/small_vector.h"
22#include "utility/utility.h"
23
24namespace vita
25{
26
35{
36public:
37 explicit with_size(std::size_t s) : size_(s) {}
38 std::size_t operator()() const { return size_; }
39
40private:
41 std::size_t size_;
42};
43
80template<class T>
82{
83public:
84 // Type alias and iterators.
85 using values_t = small_vector<T, 1>;
86 using value_type = typename values_t::value_type;
87 using iterator = typename values_t::iterator;
88 using const_iterator = typename values_t::const_iterator;
89
91 basic_fitness_t(std::initializer_list<T>);
92 basic_fitness_t(values_t);
93 basic_fitness_t(with_size, T = std::numeric_limits<T>::lowest());
94
95 std::size_t size() const;
96 T operator[](std::size_t) const;
97 T &operator[](std::size_t);
98
99 iterator begin();
100 const_iterator begin() const;
101 iterator end();
102 const_iterator end() const;
103
104 basic_fitness_t &operator+=(const basic_fitness_t &);
105 basic_fitness_t &operator-=(const basic_fitness_t &);
106 basic_fitness_t &operator*=(const basic_fitness_t &);
107
108 // Serialization.
109 bool load(std::istream &);
110 bool save(std::ostream &) const;
111
112private:
113 values_t vect_;
114};
115
116// ***********************************************************************
117// * Arithmetic operators *
118// ***********************************************************************
119template<class T> basic_fitness_t<T> operator+(basic_fitness_t<T>,
120 const basic_fitness_t<T> &);
121template<class T> basic_fitness_t<T> operator-(basic_fitness_t<T>,
122 const basic_fitness_t<T> &);
123template<class T> basic_fitness_t<T> operator*(basic_fitness_t<T>,
124 const basic_fitness_t<T> &);
125template<class T> basic_fitness_t<T> operator/(basic_fitness_t<T>, T);
126template<class T> basic_fitness_t<T> operator*(basic_fitness_t<T>, T);
127
128// ***********************************************************************
129// * Comparison operators *
130// ***********************************************************************
131template<class T> bool operator==(const basic_fitness_t<T> &,
132 const basic_fitness_t<T> &);
133template<class T> bool operator!=(const basic_fitness_t<T> &,
134 const basic_fitness_t<T> &);
135template<class T> bool operator>(const basic_fitness_t<T> &,
136 const basic_fitness_t<T> &);
137template<class T> bool operator<(const basic_fitness_t<T> &,
138 const basic_fitness_t<T> &);
139template<class T> bool operator>=(const basic_fitness_t<T> &,
140 const basic_fitness_t<T> &);
141template<class T> bool operator<=(const basic_fitness_t<T> &,
142 const basic_fitness_t<T> &);
143
144template<class T> bool almost_equal(const basic_fitness_t<T> &,
145 const basic_fitness_t<T> &, T = 0.00001);
146template<class T> bool dominating(const basic_fitness_t<T> &,
147 const basic_fitness_t<T> &);
148
149// ***********************************************************************
150// * Other functions *
151// ***********************************************************************
152template<class T> bool isfinite(const basic_fitness_t<T> &);
153template<class T> bool isnan(const basic_fitness_t<T> &);
154template<class T> bool isnonnegative(const basic_fitness_t<T> &);
155template<class T> bool issmall(const basic_fitness_t<T> &);
156
157template<class T> basic_fitness_t<T> abs(basic_fitness_t<T>);
158template<class T> basic_fitness_t<T> combine(const basic_fitness_t<T> &,
159 const basic_fitness_t<T> &);
160template<class T> double distance(const basic_fitness_t<T> &,
161 const basic_fitness_t<T> &);
162template<class T> basic_fitness_t<T> round_to(basic_fitness_t<T>);
163template<class T> basic_fitness_t<T> sqrt(basic_fitness_t<T>);
164
167
168#include "kernel/fitness.tcc"
169} // namespace vita
170
171#endif // include guard
A value assigned to an individual which reflects how well the individual solves the task.
Definition: fitness.h:82
Tag representing size.
Definition: fitness.h:35
The main namespace for the project.