@@ -203,7 +203,7 @@ VariableIndex KNITROModel::add_variable(VariableDomain domain, double lb, double
203203 _set_name (knitro::KN_set_var_name, indexVar, name);
204204 }
205205
206- n_vars ++;
206+ m_n_vars ++;
207207 _mark_dirty ();
208208
209209 return variable;
@@ -304,7 +304,7 @@ void KNITROModel::delete_variable(const VariableIndex &variable)
304304 _set_value<KNINT, int >(knitro::KN_set_var_type, indexVar, KN_VARTYPE_CONTINUOUS);
305305 _set_value<KNINT, double >(knitro::KN_set_var_lobnd, indexVar, -get_infinity ());
306306 _set_value<KNINT, double >(knitro::KN_set_var_upbnd, indexVar, get_infinity ());
307- n_vars --;
307+ m_n_vars --;
308308 _mark_dirty ();
309309}
310310
@@ -330,7 +330,7 @@ ConstraintIndex KNITROModel::add_linear_constraint(const ScalarAffineFunction &f
330330 auto setter = [this , &function](const ConstraintIndex &constraint) {
331331 _set_linear_constraint (constraint, function);
332332 };
333- return _add_constraint_impl (ConstraintType::Linear, interval, name, &n_lincons, setter);
333+ return _add_constraint_impl (ConstraintType::Linear, interval, name, setter);
334334}
335335
336336ConstraintIndex KNITROModel::add_quadratic_constraint (const ScalarQuadraticFunction &function,
@@ -349,7 +349,7 @@ ConstraintIndex KNITROModel::add_quadratic_constraint(const ScalarQuadraticFunct
349349 auto setter = [this , &function](const ConstraintIndex &constraint) {
350350 _set_quadratic_constraint (constraint, function);
351351 };
352- return _add_constraint_impl (ConstraintType::Quadratic, interval, name, &n_quadcons, setter);
352+ return _add_constraint_impl (ConstraintType::Quadratic, interval, name, setter);
353353}
354354
355355ConstraintIndex KNITROModel::add_second_order_cone_constraint (
@@ -362,17 +362,15 @@ ConstraintIndex KNITROModel::add_second_order_cone_constraint(
362362 _set_second_order_cone_constraint_rotated (constraint, variables);
363363 };
364364 std::pair<double , double > interval = {0.0 , get_infinity ()};
365- return _add_constraint_impl (ConstraintType::SecondOrderCone, interval, name, &n_soccons,
366- setter);
365+ return _add_constraint_impl (ConstraintType::SecondOrderCone, interval, name, setter);
367366 }
368367 else
369368 {
370369 auto setter = [this , &variables](const ConstraintIndex &constraint) {
371370 _set_second_order_cone_constraint (constraint, variables);
372371 };
373372 std::pair<double , double > interval = {0.0 , get_infinity ()};
374- return _add_constraint_impl (ConstraintType::SecondOrderCone, interval, name, &n_soccons,
375- setter);
373+ return _add_constraint_impl (ConstraintType::SecondOrderCone, interval, name, setter);
376374 }
377375}
378376
@@ -389,7 +387,7 @@ ConstraintIndex KNITROModel::add_single_nl_constraint(ExpressionGraph &graph,
389387 m_pending_outputs[&graph].cons .push_back (constraint);
390388 m_need_to_add_callbacks = true ;
391389 };
392- return _add_constraint_impl (ConstraintType::NL, interval, name, &n_nlcons, setter);
390+ return _add_constraint_impl (ConstraintType::NL, interval, name, setter);
393391}
394392
395393ConstraintIndex KNITROModel::add_single_nl_constraint_sense_rhs (ExpressionGraph &graph,
@@ -514,24 +512,7 @@ void KNITROModel::delete_constraint(const ConstraintIndex &constraint)
514512 _set_value<KNINT, double >(knitro::KN_set_con_lobnd, indexCon, -get_infinity ());
515513 _set_value<KNINT, double >(knitro::KN_set_con_upbnd, indexCon, get_infinity ());
516514
517- n_cons--;
518- switch (constraint.type )
519- {
520- case ConstraintType::Linear:
521- n_lincons--;
522- break ;
523- case ConstraintType::Quadratic:
524- n_quadcons--;
525- break ;
526- case ConstraintType::SecondOrderCone:
527- n_soccons--;
528- break ;
529- case ConstraintType::NL:
530- n_nlcons--;
531- break ;
532- default :
533- break ;
534- }
515+ m_n_cons_map[constraint.type ]--;
535516
536517 auto it = m_soc_aux_cons.find (indexCon);
537518 if (it != m_soc_aux_cons.end ())
@@ -1007,6 +988,29 @@ bool KNITROModel::empty() const
1007988 return m_kc == nullptr ;
1008989}
1009990
991+ size_t KNITROModel::get_num_vars () const
992+ {
993+ return m_n_vars;
994+ }
995+
996+ size_t KNITROModel::get_num_cons (std::optional<ConstraintType> type) const
997+ {
998+ if (!type.has_value ())
999+ {
1000+ size_t total = 0 ;
1001+ for (const auto &[_, count] : m_n_cons_map)
1002+ {
1003+ total += count;
1004+ }
1005+ return total;
1006+ }
1007+ else
1008+ {
1009+ auto it = m_n_cons_map.find (type.value ());
1010+ return it != m_n_cons_map.end () ? it->second : 0 ;
1011+ }
1012+ }
1013+
10101014int KNITROModel::get_solve_status () const
10111015{
10121016 _check_dirty ();
@@ -1025,12 +1029,8 @@ void KNITROModel::_check_dirty() const
10251029void KNITROModel::_reset_state ()
10261030{
10271031 m_kc.reset ();
1028- n_vars = 0 ;
1029- n_cons = 0 ;
1030- n_lincons = 0 ;
1031- n_quadcons = 0 ;
1032- n_soccons = 0 ;
1033- n_nlcons = 0 ;
1032+ m_n_vars = 0 ;
1033+ m_n_cons_map.clear ();
10341034 m_soc_aux_cons.clear ();
10351035 m_con_sense_flags.clear ();
10361036 m_obj_flag = 0 ;
0 commit comments