Ultra 0.9.4
Loading...
Searching...
No Matches
decision_vector.h
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_DECISION_VECTOR_H)
14#define ULTRA_DECISION_VECTOR_H
15
16#include "kernel/individual.h"
17
18#include <concepts>
19#include <cstddef>
20#include <utility>
21#include <vector>
22
23namespace ultra
24{
25
27enum class dv_param_kind : unsigned char { real, integer };
28
40template<class Coord>
41struct decision_vector
42{
45 {
46 Coord coord;
48 };
49
50 decision_vector() = default;
51 decision_vector(std::vector<double> vs, std::vector<coordinate> cs)
52 : values(std::move(vs)), coords(std::move(cs))
53 {}
54
55 std::vector<double> values {};
56 std::vector<coordinate> coords {};
57
58 [[nodiscard]] bool empty() const noexcept { return values.empty(); }
59 [[nodiscard]] std::size_t size() const noexcept { return values.size(); }
60
61 [[nodiscard]] bool is_valid() const noexcept
62 {
63 return values.size() == coords.size();
64 }
65};
66
68template<class DV>
69concept DecisionVector = requires(DV dv, const DV cdv)
70{
71 typename DV::coordinate;
72
73 { dv.values } -> std::same_as<std::vector<double> &>;
74 { cdv.values } -> std::same_as<const std::vector<double> &>;
75
76 { dv.coords } -> std::same_as<std::vector<typename DV::coordinate> &>;
77 { cdv.coords } -> std::same_as<const std::vector<typename DV::coordinate> &>;
78
79 { cdv.empty() } -> std::convertible_to<bool>;
80 { cdv.size() } -> std::convertible_to<std::size_t>;
81};
82
84template<class T>
85concept DecisionVectorExtractable = requires(const T &t)
86{
87 { extract_decision_vector(t) } -> DecisionVector;
88};
89
91template<class I> using decision_vector_t =
92 std::remove_cvref_t<
93 decltype(extract_decision_vector(std::declval<const I &>()))>;
94
96template<class I>
99 && std::copy_constructible<I>
101 && requires(I &ind, const decision_vector_t<I> &dv)
102 {
103 ind.apply_decision_vector(dv);
104 };
105
106} // namespace ultra
107
108#endif // include guard
Checks whether a type supports decision vector extraction.
Definition decision_vector.h:85
Checks whether a type models a concrete decision-vector representation.
Definition decision_vector.h:69
Definition individual.h:93
Supports numerical optimisation via decision-vector perturbation.
Definition decision_vector.h:97
STL namespace.
Definition integer.h:33
std::remove_cvref_t< decltype(extract_decision_vector(std::declval< const I & >()))> decision_vector_t
Concrete decision-vector type associated with I.
Definition decision_vector.h:91
dv_param_kind
Original scalar category used when writing back an optimised value.
Definition decision_vector.h:27
Metadata describing one optimisable parameter.
Definition decision_vector.h:45
Coord coord
identifies the parameter within the source object
Definition decision_vector.h:46
dv_param_kind kind
determines scalar write-back format
Definition decision_vector.h:47