27 double t_rescaling_threshold);
36 : ctr(std::move(t_sub_problem_ctr)), rhs_pattern(std::move(t_pattern)) {}
40 std::variant<Ctr, QCtr> ctr;
48 std::list<Var> l1_epigraph_vars;
49 std::list<RhsFixation> rhs_fixations;
50 std::list<RowFixation> row_fixations;
58 [[nodiscard]]
const SubProblem& sub_problem(
const Var& t_var)
const;
60 [[nodiscard]]
unsigned int sub_problem_id(
const Var& t_var)
const;
62 SubProblem& sub_problem(
unsigned int t_sub_problem_id) {
return m_sub_problems[t_sub_problem_id]; }
64 [[nodiscard]]
const SubProblem& sub_problem(
unsigned int t_sub_problem_id)
const {
return m_sub_problems[t_sub_problem_id]; }
66 [[nodiscard]]
unsigned int n_sub_problems()
const {
return m_sub_problems.size(); }
68 auto sub_problems() {
return IteratorForward(m_sub_problems); }
70 [[nodiscard]]
auto sub_problems()
const {
return ConstIteratorForward(m_sub_problems); }
72 [[nodiscard]]
auto l1_epigraph_vars()
const {
return ConstIteratorForward(m_l1_epigraph_vars); }
74 [[nodiscard]]
bool has_penalized_constraints()
const {
return m_initial_penalty_parameters.has_value(); }
76 void initialize_penalty_parameters(
bool t_use_inverse_penalties);
78 bool update_penalty_parameters(
const std::vector<PrimalPoint>& t_primals, PenaltyUpdate& t_penalty_update);
80 void update(
unsigned int t_sub_problem_id,
const std::vector<PrimalPoint>& t_primals);
84 const double max_violation;
87 : variable(std::move(t_variable)), max_violation(t_max_violation), penalty(t_penalty) {}
92 std::optional<Annotation<double>> m_initial_penalty_parameters;
93 double m_rescaling_threshold;
95 std::vector<SubProblem> m_sub_problems;
96 Map<unsigned int, Var> m_l1_epigraph_vars;
98 [[nodiscard]]
unsigned int compute_n_sub_problems(
const Model& t_src_model)
const;
99 void initialize_sub_problems(
const Model& t_src_model,
unsigned int n_sub_problems);
100 void dispatch_vars(
const Model& t_src_model);
101 void dispatch_ctrs(
const Model& t_src_model);
102 void dispatch_ctr(
const Model& t_src_model,
const Ctr& t_ctr,
unsigned int t_sub_problem_id);
103 void dispatch_qctrs(
const Model& t_src_model);
104 void dispatch_qctr(
const Model& t_src_model,
const QCtr& t_ctr,
unsigned int t_sub_problem_id);
105 void dispatch_obj(
const Model& t_src_model);
106 void dispatch_obj(
const Model& t_src_model,
unsigned int t_sub_problem_id);
110 void set_penalty_in_all_sub_problems(
const Var& t_var,
double t_value);
111 bool rescale_penalty_parameters(std::list<CurrentPenalty>& t_penalties);
112 LinExpr<Var> add_l1_vars(
const Ctr& t_ctr, CtrType t_type,
unsigned int t_sub_problem_id);
113 LinExpr<Var> add_l1_vars(
const QCtr& t_ctr, CtrType t_type,
unsigned int t_sub_problem_id);
114 LinExpr<Var> add_l1_vars(
unsigned int t_ctr_id,
double t_initial_penalty_parameter, CtrType t_type,
unsigned int t_sub_problem_id);