idol
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 mutable std::optional<Annotation<unsigned int>> m_stages;
20 Map<Ctr, LinExpr<Var, LinExpr<Var>>> m_uncertain_mat_coeff;
21 LinExpr<Ctr, LinExpr<Var>> m_uncertain_rhs;
22 LinExpr<Var, LinExpr<Var>> m_uncertain_obj;
23 std::unique_ptr<Model> m_uncertainty_set;
24public:
25 explicit Description(const Model& t_uncertainty_set) : m_uncertainty_set(t_uncertainty_set.clone()) {}
26
27 Description(Description&&) = default;
28
29 [[nodiscard]] const Annotation<unsigned int>& stage_annotation() const;
30
31 void set_stage(const Var& t_var, unsigned int t_stage);
32
33 unsigned int stage(const Var& t_var) const;
34
35 unsigned int stage(const Ctr& t_var) const;
36
37 const Model& uncertainty_set() const { return *m_uncertainty_set; }
38
39 auto uncertain_mat_coeffs() const { return ConstIteratorForward(m_uncertain_mat_coeff); }
40
41 auto uncertain_rhs() const { return m_uncertain_rhs; }
42
43 auto uncertain_obj() const { return m_uncertain_obj; }
44
45 const LinExpr<Var>& uncertain_mat_coeff(const Ctr& t_ctr, const Var& t_var) const;
46
47 const LinExpr<Var, LinExpr<Var>>& uncertain_mat_coeffs(const Ctr& t_ctr) const;
48
49 const LinExpr<Var>& uncertain_rhs(const Ctr& t_ctr) const;
50
51 const LinExpr<Var>& uncertain_obj(const Var& t_var) const;
52
53 void set_uncertain_mat_coeff(const Ctr& t_ctr, const Var& t_var, const LinExpr<Var>& t_coeff) {
54 m_uncertain_mat_coeff[t_ctr].set(t_var, t_coeff);
55 }
56
57 void set_uncertain_rhs(const Ctr& t_ctr, const LinExpr<Var>& t_rhs) {
58 m_uncertain_rhs.set(t_ctr, t_rhs);
59 }
60
61 void set_uncertain_obj(const Var& t_var, const LinExpr<Var>& t_obj) {
62 m_uncertain_obj.set(t_var, t_obj);
63 }
64
65 void set_uncertain_obj(LinExpr<Var, LinExpr<Var>> t_obj) {
66 m_uncertain_obj = std::move(t_obj);
67 }
68
69 void set_uncertain_rhs(LinExpr<Ctr, LinExpr<Var>> t_rhs) {
70 m_uncertain_rhs = std::move(t_rhs);
71 }
72
73 class View {
74 const Description& m_description;
75 const Model& m_deterministic_model;
76 public:
77 View(const Model& t_deterministic_model, const Description& t_description);
78
79 [[nodiscard]] const Description& description() const { return m_description; }
80
81 [[nodiscard]] const Model& deterministic_model() const { return m_deterministic_model; }
82 };
83};
84
85namespace idol {
86
87 std::ostream &operator<<(std::ostream &t_os, const idol::Robust::Description::View &t_view);
88
89}
90
91#endif //IDOL_DESCRIPTION_H