29 const Model& m_primal;
33 std::function<bool(
const Var&)> m_primal_variable_indicator;
34 std::function<bool(
const Ctr&)> m_primal_constraint_indicator;
35 std::function<bool(
const QCtr&)> m_primal_qconstraint_indicator;
38 std::vector<std::optional<Var>> m_dual_variables_for_constraints;
39 std::vector<std::optional<Var>> m_dual_variables_for_qconstraints;
40 std::vector<std::optional<Var>> m_dual_variables_for_lower_bounds;
41 std::vector<std::optional<Var>> m_dual_variables_for_upper_bounds;
42 std::vector<std::optional<std::variant<Ctr, QCtr>>> m_dual_constraints;
44 [[nodiscard]]
bool primal_is_a_linear_problem()
const;
46 void create_dual_variables();
47 [[nodiscard]] std::pair<double, double> bounds_for_dual_variable(idol::CtrType t_type)
const;
48 void create_dual_constraints();
54 const std::function<
bool(
const Var&)>& t_primal_variable_indicator = [](
const Var&) {
return true; },
55 const std::function<bool(
const Ctr&)>& t_primal_constraint_indicator = [](
const Ctr&) {
return true; },
56 const std::function<bool(
const QCtr&)>& t_primal_qconstraint_indicator = [](
const QCtr&) {
return true; });
59 const std::function<
bool(
const Var&)>& t_primal_variable_indicator = [](
const Var&) {
return true; },
60 const std::function<bool(
const Ctr&)>& t_primal_constraint_indicator = [](
const Ctr&) {
return true; },
61 const std::function<bool(
const QCtr&)>& t_primal_qconstraint_indicator = [](
const QCtr&) {
return true; });
65 void set_prefix(std::string t_prefix) { m_prefix = std::move(t_prefix); }
74 void add_coupling_variables(
Model& t_destination);
75 void add_coupling_constraints(
Model& t_destination);
84 void add_dual_variables(
Model& t_destination);
85 void add_dual_constraints(
Model& t_destination);
86 void add_dual_objective(
Model& t_destination);
94 void add_primal_variables(
idol::Model &t_destination);
95 void add_primal_constraints(
idol::Model &t_destination);
96 void add_primal_objective(
idol::Model &t_destination);
116 [[nodiscard]]
const Var& get_dual_var(
const Ctr& t_ctr)
const;
117 [[nodiscard]]
const Var& get_dual_var_lb(
const Var& t_var)
const;
118 [[nodiscard]]
const Var& get_dual_var_ub(
const Var& t_var)
const;
119 const std::variant<Ctr, QCtr>& get_dual_ctr(
const Var& t_var)
const;