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);