anpcpp 0.1.0
Analytic Network Process computational library
Loading...
Searching...
No Matches
ratings.hpp
Go to the documentation of this file.
1
6#pragma once
7
8#include <cstddef>
9#include <optional>
10#include <string>
11#include <utility>
12#include <variant>
13#include <vector>
14
15#include "anpcpp/matrix.hpp"
16
17namespace anpcpp {
18
24 std::string id;
26 std::string label;
28 double value = 0.0;
29};
30
33
36
39 double constant = 1.0;
40};
41
48
56 std::vector<std::pair<double, double>> knots;
57};
58
63 std::variant<IdentityInterpreter,
68
75[[nodiscard]] std::vector<std::optional<double>> apply_score_interpreter(
76 const ScoreInterpreter& interpreter,
77 const std::vector<std::optional<double>>& raw);
78
86public:
88 enum class Mode { Categorical, Numeric };
89
91 RatingsPrioritizer() = default;
92
97 explicit RatingsPrioritizer(std::vector<std::string> alternatives);
98
100 [[nodiscard]] std::size_t size() const noexcept {
101 return alternatives_.size();
102 }
104 [[nodiscard]] bool empty() const noexcept { return alternatives_.empty(); }
106 [[nodiscard]] const std::vector<std::string>& alternatives() const noexcept {
107 return alternatives_;
108 }
109
111 [[nodiscard]] bool has_alternative(const std::string& name) const;
116 [[nodiscard]] std::size_t index_of(const std::string& name) const;
117
123 void add_alternative(const std::string& name, bool ignore_existing = false);
124
130 void remove_alternative(const std::string& name,
131 bool ignore_missing = false);
132
134 [[nodiscard]] Mode mode() const noexcept { return mode_; }
136 void set_mode(Mode mode) { mode_ = mode; }
137
139 [[nodiscard]] const std::vector<RatingCategory>& categories() const noexcept {
140 return categories_;
141 }
146 void set_categories(std::vector<RatingCategory> categories);
147
149 [[nodiscard]] const ScoreInterpreter& interpreter() const noexcept {
150 return interpreter_;
151 }
154 interpreter_ = std::move(interpreter);
155 }
156
163 void set_rating(const std::string& alt, const std::string& category_id);
165 void clear_rating(const std::string& alt);
167 [[nodiscard]] std::optional<std::string> rating(
168 const std::string& alt) const;
169
174 void set_value(const std::string& alt, double raw);
176 void clear_value(const std::string& alt);
178 [[nodiscard]] std::optional<double> value(const std::string& alt) const;
179
185 [[nodiscard]] Vector scores() const;
186
192 [[nodiscard]] Vector priorities() const;
193
194private:
195 [[nodiscard]] std::optional<double> intensity_at(std::size_t i) const;
196 [[nodiscard]] const RatingCategory* find_category(
197 const std::string& id) const;
198
199 std::vector<std::string> alternatives_;
200 Mode mode_ = Mode::Numeric;
201 std::vector<RatingCategory> categories_;
202 std::vector<std::optional<std::string>> categorical_;
203 std::vector<std::optional<double>> numeric_;
204 ScoreInterpreter interpreter_ = IdentityInterpreter{};
205};
206
207} // namespace anpcpp
Ratings table over named alternatives for one (wrt node, dest cluster).
Definition ratings.hpp:85
const std::vector< std::string > & alternatives() const noexcept
Definition ratings.hpp:106
RatingsPrioritizer()=default
Default-constructs an empty numeric ratings table.
std::size_t size() const noexcept
Definition ratings.hpp:100
const ScoreInterpreter & interpreter() const noexcept
Definition ratings.hpp:149
void set_mode(Mode mode)
Sets storage mode (does not clear the other mode's data).
Definition ratings.hpp:136
RatingsPrioritizer(std::vector< std::string > alternatives)
Constructs a table with the given alternative names.
void set_value(const std::string &alt, double raw)
Sets a numeric raw value for alt.
void set_interpreter(ScoreInterpreter interpreter)
Sets the numeric score interpreter.
Definition ratings.hpp:153
std::optional< double > value(const std::string &alt) const
Mode
How alternative ratings are stored.
Definition ratings.hpp:88
std::size_t index_of(const std::string &name) const
const std::vector< RatingCategory > & categories() const noexcept
Definition ratings.hpp:139
void clear_rating(const std::string &alt)
Clears the categorical rating for alt.
void set_categories(std::vector< RatingCategory > categories)
Replaces the category list.
void set_rating(const std::string &alt, const std::string &category_id)
Sets a categorical rating for alt.
bool has_alternative(const std::string &name) const
Mode mode() const noexcept
Definition ratings.hpp:134
void clear_value(const std::string &alt)
Clears the numeric value for alt.
std::optional< std::string > rating(const std::string &alt) const
void remove_alternative(const std::string &name, bool ignore_missing=false)
Removes an alternative and its rating.
Vector priorities() const
L1-normalized priorities over present (non-missing) scores.
bool empty() const noexcept
Definition ratings.hpp:104
Vector scores() const
Intensity scores in [0, 1] (missing → 0).
void add_alternative(const std::string &name, bool ignore_existing=false)
Appends an alternative with a missing rating.
One-dimensional array of doubles with element-wise arithmetic.
Definition matrix.hpp:34
Dense row-major vectors and matrices.
Analytic Network Process computational library.
Definition eigen.hpp:14
std::variant< IdentityInterpreter, DivideByMaxInterpreter, DivideByConstantInterpreter, MinMaxNormalizeInterpreter, PiecewiseLinearInterpreter > ScoreInterpreter
Declarative raw-value → [0, 1] interpreter (JSON-serializable).
Definition ratings.hpp:67
std::vector< std::optional< double > > apply_score_interpreter(const ScoreInterpreter &interpreter, const std::vector< std::optional< double > > &raw)
Apply interpreter to a column of optional raw values.
Divide each raw value by a fixed positive constant.
Definition ratings.hpp:38
Divide each raw value by the max among present values.
Definition ratings.hpp:35
Pass-through interpreter (values already in [0, 1]).
Definition ratings.hpp:32
Map the column's [min, max] onto [0, 1].
Definition ratings.hpp:47
Piecewise-linear map from raw value to [0, 1] via sorted knots.
Definition ratings.hpp:54
std::vector< std::pair< double, double > > knots
Knots (x, y); sorted by x ascending on use.
Definition ratings.hpp:56
A named rating category with an associated score in [0, 1].
Definition ratings.hpp:22
std::string id
Stable id used in rating assignments (e.g.
Definition ratings.hpp:24
double value
Score in [0, 1].
Definition ratings.hpp:28
std::string label
Display label (e.g.
Definition ratings.hpp:26