Skip to content

Commit 761f78f

Browse files
committed
refactor: use specific cone type instead of general cone
1 parent e7964ea commit 761f78f

10 files changed

Lines changed: 44 additions & 32 deletions

File tree

include/pyoptinterface/core.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,9 +269,10 @@ enum class ConstraintType
269269
Linear,
270270
Quadratic,
271271
SOS,
272-
Cone,
272+
SecondOrderCone,
273+
ExponentialCone,
274+
SolverDefinedOrNL,
273275
Gurobi_General,
274-
COPT_ExpCone,
275276
COPT_NL,
276277
IPOPT_NL,
277278
Xpress_Nlp,

include/pyoptinterface/knitro_model.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,7 @@ class KNITROModel : public OnesideLinearConstraintMixin<KNITROModel>,
559559
size_t n_cons = 0;
560560
size_t n_lincons = 0;
561561
size_t n_quadcons = 0;
562-
size_t n_coniccons = 0;
562+
size_t n_soccons = 0;
563563
size_t n_nlcons = 0;
564564

565565
private:

include/pyoptinterface/mosek_model.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,8 @@ class MOSEKModel : public OnesideLinearConstraintMixin<MOSEKModel>,
169169

170170
std::vector<MSKint64t> add_variables_as_afe(const Vector<VariableIndex> &variables);
171171
ConstraintIndex add_variables_in_cone_constraint(const Vector<VariableIndex> &variables,
172-
MSKint64t domain_index, const char *name);
172+
MSKint64t domain_index, ConstraintType type,
173+
const char *name);
173174

174175
ConstraintIndex add_second_order_cone_constraint(const Vector<VariableIndex> &variables,
175176
const char *name, bool rotated = false);

lib/copt_model.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ ConstraintIndex COPTModel::add_second_order_cone_constraint(const Vector<Variabl
420420
const char *name, bool rotated)
421421
{
422422
IndexT index = m_cone_constraint_index.add_index();
423-
ConstraintIndex constraint_index(ConstraintType::Cone, index);
423+
ConstraintIndex constraint_index(ConstraintType::SecondOrderCone, index);
424424

425425
int N = variables.size();
426426
std::vector<int> ind_v(N);
@@ -452,7 +452,7 @@ ConstraintIndex COPTModel::add_exp_cone_constraint(const Vector<VariableIndex> &
452452
const char *name, bool dual)
453453
{
454454
IndexT index = m_exp_cone_constraint_index.add_index();
455-
ConstraintIndex constraint_index(ConstraintType::COPT_ExpCone, index);
455+
ConstraintIndex constraint_index(ConstraintType::ExponentialCone, index);
456456

457457
int N = variables.size();
458458
if (N != 3)
@@ -729,11 +729,11 @@ void COPTModel::delete_constraint(const ConstraintIndex &constraint)
729729
m_sos_constraint_index.delete_index(constraint.index);
730730
error = copt::COPT_DelSOSs(m_model.get(), 1, &constraint_row);
731731
break;
732-
case ConstraintType::Cone:
732+
case ConstraintType::SecondOrderCone:
733733
m_cone_constraint_index.delete_index(constraint.index);
734734
error = copt::COPT_DelCones(m_model.get(), 1, &constraint_row);
735735
break;
736-
case ConstraintType::COPT_ExpCone:
736+
case ConstraintType::ExponentialCone:
737737
m_exp_cone_constraint_index.delete_index(constraint.index);
738738
error = copt::COPT_DelExpCones(m_model.get(), 1, &constraint_row);
739739
break;
@@ -754,9 +754,9 @@ bool COPTModel::is_constraint_active(const ConstraintIndex &constraint)
754754
return m_quadratic_constraint_index.has_index(constraint.index);
755755
case ConstraintType::SOS:
756756
return m_sos_constraint_index.has_index(constraint.index);
757-
case ConstraintType::Cone:
757+
case ConstraintType::SecondOrderCone:
758758
return m_cone_constraint_index.has_index(constraint.index);
759-
case ConstraintType::COPT_ExpCone:
759+
case ConstraintType::ExponentialCone:
760760
return m_exp_cone_constraint_index.has_index(constraint.index);
761761
default:
762762
throw std::runtime_error("Unknown constraint type");
@@ -1300,9 +1300,9 @@ int COPTModel::_constraint_index(const ConstraintIndex &constraint)
13001300
return m_quadratic_constraint_index.get_index(constraint.index);
13011301
case ConstraintType::SOS:
13021302
return m_sos_constraint_index.get_index(constraint.index);
1303-
case ConstraintType::Cone:
1303+
case ConstraintType::SecondOrderCone:
13041304
return m_cone_constraint_index.get_index(constraint.index);
1305-
case ConstraintType::COPT_ExpCone:
1305+
case ConstraintType::ExponentialCone:
13061306
return m_exp_cone_constraint_index.get_index(constraint.index);
13071307
case ConstraintType::COPT_NL:
13081308
return m_nl_constraint_index.get_index(constraint.index);

lib/core_ext.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ NB_MODULE(core_ext, m)
3737
.value("Linear", ConstraintType::Linear)
3838
.value("Quadratic", ConstraintType::Quadratic)
3939
.value("SOS", ConstraintType::SOS)
40-
.value("Cone", ConstraintType::Cone);
40+
.value("SecondOrderCone", ConstraintType::SecondOrderCone)
41+
.value("ExponentialCone", ConstraintType::ExponentialCone);
4142

4243
nb::enum_<SOSType>(m, "SOSType").value("SOS1", SOSType::SOS1).value("SOS2", SOSType::SOS2);
4344

lib/knitro_model.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -362,15 +362,17 @@ 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::Cone, interval, name, &n_coniccons, setter);
365+
return _add_constraint_impl(ConstraintType::SecondOrderCone, interval, name, &n_soccons,
366+
setter);
366367
}
367368
else
368369
{
369370
auto setter = [this, &variables](const ConstraintIndex &constraint) {
370371
_set_second_order_cone_constraint(constraint, variables);
371372
};
372373
std::pair<double, double> interval = {0.0, get_infinity()};
373-
return _add_constraint_impl(ConstraintType::Cone, interval, name, &n_coniccons, setter);
374+
return _add_constraint_impl(ConstraintType::SecondOrderCone, interval, name, &n_soccons,
375+
setter);
374376
}
375377
}
376378

@@ -521,8 +523,8 @@ void KNITROModel::delete_constraint(const ConstraintIndex &constraint)
521523
case ConstraintType::Quadratic:
522524
n_quadcons--;
523525
break;
524-
case ConstraintType::Cone:
525-
n_coniccons--;
526+
case ConstraintType::SecondOrderCone:
527+
n_soccons--;
526528
break;
527529
case ConstraintType::KNITRO_NL:
528530
n_nlcons--;
@@ -1027,7 +1029,7 @@ void KNITROModel::_reset_state()
10271029
n_cons = 0;
10281030
n_lincons = 0;
10291031
n_quadcons = 0;
1030-
n_coniccons = 0;
1032+
n_soccons = 0;
10311033
n_nlcons = 0;
10321034
m_soc_aux_cons.clear();
10331035
m_con_sense_flags.clear();

lib/knitro_model_ext.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ NB_MODULE(knitro_model_ext, m)
4747
.def_ro("n_cons", &KNITROModel::n_cons)
4848
.def_ro("n_lincons", &KNITROModel::n_lincons)
4949
.def_ro("n_quadcons", &KNITROModel::n_quadcons)
50-
.def_ro("n_coniccons", &KNITROModel::n_coniccons)
50+
.def_ro("n_soccons", &KNITROModel::n_soccons)
5151
.def_ro("n_nlcons", &KNITROModel::n_nlcons)
5252

5353
.def("add_variable", &KNITROModel::add_variable,

lib/mosek_model.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -581,13 +581,13 @@ std::vector<MSKint64t> MOSEKModel::add_variables_as_afe(const Vector<VariableInd
581581

582582
ConstraintIndex MOSEKModel::add_variables_in_cone_constraint(const Vector<VariableIndex> &variables,
583583
MSKint64t domain_index,
584-
const char *name)
584+
ConstraintType type, const char *name)
585585
{
586586
auto N = variables.size();
587587

588588
IndexT index = m_acc_index.size();
589589
m_acc_index.push_back(true);
590-
ConstraintIndex constraint_index(ConstraintType::Cone, index);
590+
ConstraintIndex constraint_index(type, index);
591591

592592
// afe part
593593
std::vector<MSKint64t> afe_index = add_variables_as_afe(variables);
@@ -630,7 +630,8 @@ ConstraintIndex MOSEKModel::add_second_order_cone_constraint(const Vector<Variab
630630
}
631631
check_error(error);
632632

633-
auto con = add_variables_in_cone_constraint(variables, domain_index, name);
633+
auto con = add_variables_in_cone_constraint(variables, domain_index,
634+
ConstraintType::SecondOrderCone, name);
634635

635636
return con;
636637
}
@@ -657,7 +658,8 @@ ConstraintIndex MOSEKModel::add_exp_cone_constraint(const Vector<VariableIndex>
657658
}
658659
check_error(error);
659660

660-
auto con = add_variables_in_cone_constraint(variables, domain_index, name);
661+
auto con = add_variables_in_cone_constraint(variables, domain_index,
662+
ConstraintType::ExponentialCone, name);
661663

662664
return con;
663665
}
@@ -676,7 +678,8 @@ void MOSEKModel::delete_constraint(const ConstraintIndex &constraint)
676678
m_linear_quadratic_constraint_index.delete_index(constraint.index);
677679
error = mosek::MSK_removecons(m_model.get(), 1, &constraint_row);
678680
break;
679-
case ConstraintType::Cone: {
681+
case ConstraintType::SecondOrderCone:
682+
case ConstraintType::ExponentialCone: {
680683
m_acc_index[constraint.index] = false;
681684
// ACC cannot be deleted, we just set its domain to R^n (no constraint)
682685
// get the dimension of this ACC
@@ -1387,7 +1390,8 @@ MSKint32t MOSEKModel::_constraint_index(const ConstraintIndex &constraint)
13871390
case ConstraintType::Quadratic:
13881391
return m_linear_quadratic_constraint_index.get_index(constraint.index);
13891392
break;
1390-
case ConstraintType::Cone:
1393+
case ConstraintType::SecondOrderCone:
1394+
case ConstraintType::ExponentialCone:
13911395
return m_acc_index[constraint.index] ? constraint.index : -1;
13921396
break;
13931397
default:

lib/xpress_model.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -888,7 +888,7 @@ ConstraintIndex Model::add_second_order_cone_constraint(const Vector<VariableInd
888888
}
889889
ConstraintIndex constraint_index =
890890
add_quadratic_constraint(quadconstr, ConstraintSense::GreaterEqual, 0.0, name);
891-
constraint_index.type = ConstraintType::Cone;
891+
constraint_index.type = ConstraintType::SecondOrderCone;
892892
return constraint_index;
893893
}
894894

@@ -917,7 +917,7 @@ ConstraintIndex Model::add_exp_cone_constraint(const Vector<VariableIndex> &vari
917917
// Add affine part
918918
auto constraint_index =
919919
add_linear_constraint_from_var(variables[0], ConstraintSense::GreaterEqual, 0.0);
920-
constraint_index.type = ConstraintType::Xpress_Nlp; // Fix constraint type
920+
constraint_index.type = ConstraintType::ExponentialCone; // Fix constraint type
921921

922922
int nnz = 0;
923923
const int *types = {};
@@ -1269,7 +1269,8 @@ void Model::delete_constraint(ConstraintIndex constraint)
12691269
switch (constraint.type)
12701270
{
12711271
case ConstraintType::Quadratic:
1272-
case ConstraintType::Cone:
1272+
case ConstraintType::SecondOrderCone:
1273+
case ConstraintType::ExponentialCone:
12731274
case ConstraintType::Xpress_Nlp:
12741275
--m_quad_nl_constr_num;
12751276
[[fallthrough]];
@@ -1294,7 +1295,8 @@ bool Model::is_constraint_active(ConstraintIndex constraint)
12941295
{
12951296
case ConstraintType::Linear:
12961297
case ConstraintType::Quadratic:
1297-
case ConstraintType::Cone:
1298+
case ConstraintType::SecondOrderCone:
1299+
case ConstraintType::ExponentialCone:
12981300
case ConstraintType::Xpress_Nlp:
12991301
return m_constraint_index.has_index(constraint.index);
13001302
case ConstraintType::SOS:
@@ -1474,7 +1476,8 @@ int Model::_constraint_index(ConstraintIndex constraint)
14741476
{
14751477
case ConstraintType::Linear:
14761478
case ConstraintType::Quadratic:
1477-
case ConstraintType::Cone:
1479+
case ConstraintType::SecondOrderCone:
1480+
case ConstraintType::ExponentialCone:
14781481
case ConstraintType::Xpress_Nlp:
14791482
return m_constraint_index.get_index(constraint.index);
14801483
case ConstraintType::SOS:

src/pyoptinterface/_src/knitro.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -346,8 +346,8 @@ def number_of_constraints(
346346
return self.n_lincons
347347
elif constraint_type == ConstraintType.Quadratic:
348348
return self.n_quadcons
349-
elif constraint_type == ConstraintType.Cone:
350-
return self.n_coniccons
349+
elif constraint_type == ConstraintType.SecondOrderCone:
350+
return self.n_soccons
351351
elif constraint_type == ConstraintType.KNITRO_NL:
352352
return self.n_nlcons
353353
else:

0 commit comments

Comments
 (0)