A C++ Framework for Optimization
Loading...
Searching...
No Matches
Description.h
1//
2// Created by henri on 28.11.24.
3//
4
5#ifndef IDOL_DESCRIPTION_H
6#define IDOL_DESCRIPTION_H
7
8#include <optional>
9#include "idol/mixed-integer/modeling/annotations/Annotation.h"
10#include "idol/mixed-integer/modeling/constraints/Ctr.h"
11#include "idol/mixed-integer/modeling/expressions/AffExpr.h"
12#include "idol/mixed-integer/modeling/models/Model.h"
13
14namespace idol::Robust {
15 class Description;
16}
17
19 Map<Ctr, LinExpr<Var, LinExpr<Var>>> m_uncertain_mat_coeff;
20 LinExpr<Ctr, LinExpr<Var>> m_uncertain_rhs;
21 LinExpr<Var, LinExpr<Var>> m_uncertain_obj;
22 std::unique_ptr<Model> m_uncertainty_set;
23public:
24 explicit Description(const Model& t_uncertainty_set) : m_uncertainty_set(t_uncertainty_set.clone()) {}
25
26 Description(Description&&) = default;
27
28 const Model& uncertainty_set() const { return *m_uncertainty_set; }
29
30 auto uncertain_mat_coeffs() const { return ConstIteratorForward(m_uncertain_mat_coeff); }
31
32 auto uncertain_rhs() const { return m_uncertain_rhs; }
33
34 auto uncertain_obj() const { return m_uncertain_obj; }
35
36 const LinExpr<Var>& uncertain_mat_coeff(const Ctr& t_ctr, const Var& t_var) const;
37
38 const LinExpr<Var, LinExpr<Var>>& uncertain_mat_coeffs(const Ctr& t_ctr) const;
39
40 const LinExpr<Var>& uncertain_rhs(const Ctr& t_ctr) const;
41
42 const LinExpr<Var>& uncertain_obj(const Var& t_var) const;
43
44 void set_uncertain_mat_coeff(const Ctr& t_ctr, const Var& t_var, const LinExpr<Var>& t_coeff) {
45 m_uncertain_mat_coeff[t_ctr].set(t_var, t_coeff);
46 }
47
48 void set_uncertain_rhs(const Ctr& t_ctr, const LinExpr<Var>& t_rhs) {
49 m_uncertain_rhs.set(t_ctr, t_rhs);
50 }
51
52 void set_uncertain_obj(const Var& t_var, const LinExpr<Var>& t_obj) {
53 m_uncertain_obj.set(t_var, t_obj);
54 }
55
56 void set_uncertain_obj(LinExpr<Var, LinExpr<Var>> t_obj) {
57 m_uncertain_obj = std::move(t_obj);
58 }
59
60 void set_uncertain_rhs(LinExpr<Ctr, LinExpr<Var>> t_rhs) {
61 m_uncertain_rhs = std::move(t_rhs);
62 }
63
64 class View {
65 const Description& m_description;
66 const Model& m_deterministic_model;
67 public:
68 View(const Model& t_deterministic_model, const Description& t_description);
69
70 [[nodiscard]] const Description& description() const { return m_description; }
71
72 [[nodiscard]] const Model& deterministic_model() const { return m_deterministic_model; }
73 };
74};
75
76namespace idol {
77
78 std::ostream &operator<<(std::ostream &t_os, const idol::Robust::Description::View &t_view);
79
80}
81
82#endif //IDOL_DESCRIPTION_H