Skip to content

Commit 87a7ebe

Browse files
committed
Bump version and add more user-friendly API for parameters
1 parent 117d383 commit 87a7ebe

File tree

4 files changed

+72
-2
lines changed

4 files changed

+72
-2
lines changed

include/pyoptinterface/ipopt_model.hpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ struct IpoptModel
9797
const std::vector<VariableIndex> &xs,
9898
const std::vector<ParameterIndex> &ps,
9999
ConstraintSense sense, const std::vector<double> &rhss);
100+
NLConstraintIndex add_nl_constraint(const FunctionIndex &k,
101+
const std::vector<VariableIndex> &xs,
102+
const std::vector<double> &ps,
103+
ConstraintSense sense, const std::vector<double> &rhss);
100104
NLConstraintIndex add_nl_constraint(const FunctionIndex &k,
101105
const std::vector<VariableIndex> &xs, ConstraintSense sense,
102106
const std::vector<double> &rhss);
@@ -106,6 +110,11 @@ struct IpoptModel
106110
const std::vector<ParameterIndex> &ps,
107111
ConstraintSense sense, const std::vector<double> &lbs,
108112
const std::vector<double> &ubs);
113+
NLConstraintIndex add_nl_constraint(const FunctionIndex &k,
114+
const std::vector<VariableIndex> &xs,
115+
const std::vector<double> &ps,
116+
ConstraintSense sense, const std::vector<double> &lbs,
117+
const std::vector<double> &ubs);
109118
NLConstraintIndex add_nl_constraint(const FunctionIndex &k,
110119
const std::vector<VariableIndex> &xs, ConstraintSense sense,
111120
const std::vector<double> &lbs,
@@ -114,7 +123,10 @@ struct IpoptModel
114123
void add_nl_expression(const NLConstraintIndex &constraint, const FunctionIndex &k,
115124
const std::vector<VariableIndex> &xs,
116125
const std::vector<ParameterIndex> &ps);
117-
void add_nl_expression(const NLConstraintIndex &constraint,const FunctionIndex &k,
126+
void add_nl_expression(const NLConstraintIndex &constraint, const FunctionIndex &k,
127+
const std::vector<VariableIndex> &xs,
128+
const std::vector<double> &ps);
129+
void add_nl_expression(const NLConstraintIndex &constraint, const FunctionIndex &k,
118130
const std::vector<VariableIndex> &xs);
119131

120132
void add_nl_objective(const FunctionIndex &k, const std::vector<VariableIndex> &xs,

lib/ipopt_model.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,21 @@ NLConstraintIndex IpoptModel::add_nl_constraint(const FunctionIndex &k,
321321
return nlcon;
322322
}
323323

324+
NLConstraintIndex IpoptModel::add_nl_constraint(const FunctionIndex &k,
325+
const std::vector<VariableIndex> &xs,
326+
const std::vector<double> &ps,
327+
ConstraintSense sense,
328+
const std::vector<double> &rhss)
329+
{
330+
std::vector<ParameterIndex> real_ps;
331+
real_ps.reserve(ps.size());
332+
for (auto p : ps)
333+
{
334+
real_ps.push_back(add_parameter(p));
335+
}
336+
return add_nl_constraint(k, xs, real_ps, sense, rhss);
337+
}
338+
324339
NLConstraintIndex IpoptModel::add_nl_constraint(const FunctionIndex &k,
325340
const std::vector<VariableIndex> &xs,
326341
ConstraintSense sense,
@@ -356,6 +371,19 @@ NLConstraintIndex IpoptModel::add_nl_constraint(const FunctionIndex &k,
356371
return nlcon;
357372
}
358373

374+
NLConstraintIndex IpoptModel::add_nl_constraint(
375+
const FunctionIndex &k, const std::vector<VariableIndex> &xs, const std::vector<double> &ps,
376+
ConstraintSense sense, const std::vector<double> &lbs, const std::vector<double> &ubs)
377+
{
378+
std::vector<ParameterIndex> real_ps;
379+
real_ps.reserve(ps.size());
380+
for (auto p : ps)
381+
{
382+
real_ps.push_back(add_parameter(p));
383+
}
384+
return add_nl_constraint(k, xs, real_ps, sense, lbs, ubs);
385+
}
386+
359387
NLConstraintIndex IpoptModel::add_nl_constraint(const FunctionIndex &k,
360388
const std::vector<VariableIndex> &xs,
361389
ConstraintSense sense,
@@ -377,6 +405,19 @@ void IpoptModel::add_nl_expression(const NLConstraintIndex &constraint, const Fu
377405
m_function_model.add_nl_constraint(k, xs, ps, constraint.index);
378406
}
379407

408+
void IpoptModel::add_nl_expression(const NLConstraintIndex &constraint, const FunctionIndex &k,
409+
const std::vector<VariableIndex> &xs,
410+
const std::vector<double> &ps)
411+
{
412+
std::vector<ParameterIndex> real_ps;
413+
real_ps.reserve(ps.size());
414+
for (auto p : ps)
415+
{
416+
real_ps.push_back(add_parameter(p));
417+
}
418+
add_nl_expression(constraint, k, xs, real_ps);
419+
}
420+
380421
void IpoptModel::add_nl_expression(const NLConstraintIndex &constraint, const FunctionIndex &k,
381422
const std::vector<VariableIndex> &xs)
382423
{

lib/ipopt_model_ext.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,11 @@ NB_MODULE(ipopt_model_ext, m)
124124
const std::vector<ParameterIndex> &, ConstraintSense,
125125
const std::vector<double> &>(&IpoptModel::add_nl_constraint),
126126
nb::arg("f"), nb::arg("x"), nb::arg("p"), nb::arg("sense"), nb::arg("rhs"))
127+
.def("add_nl_constraint",
128+
nb::overload_cast<const FunctionIndex &, const std::vector<VariableIndex> &,
129+
const std::vector<double> &, ConstraintSense,
130+
const std::vector<double> &>(&IpoptModel::add_nl_constraint),
131+
nb::arg("f"), nb::arg("x"), nb::arg("p"), nb::arg("sense"), nb::arg("rhs"))
127132
.def("add_nl_constraint",
128133
nb::overload_cast<const FunctionIndex &, const std::vector<VariableIndex> &,
129134
ConstraintSense, const std::vector<double> &,
@@ -136,12 +141,24 @@ NB_MODULE(ipopt_model_ext, m)
136141
&IpoptModel::add_nl_constraint),
137142
nb::arg("f"), nb::arg("x"), nb::arg("p"), nb::arg("sense"), nb::arg("lb"),
138143
nb::arg("ub"))
144+
.def("add_nl_constraint",
145+
nb::overload_cast<const FunctionIndex &, const std::vector<VariableIndex> &,
146+
const std::vector<double> &, ConstraintSense,
147+
const std::vector<double> &, const std::vector<double> &>(
148+
&IpoptModel::add_nl_constraint),
149+
nb::arg("f"), nb::arg("x"), nb::arg("p"), nb::arg("sense"), nb::arg("lb"),
150+
nb::arg("ub"))
139151

140152
.def("add_nl_expression",
141153
nb::overload_cast<const NLConstraintIndex &, const FunctionIndex &,
142154
const std::vector<VariableIndex> &,
143155
const std::vector<ParameterIndex> &>(&IpoptModel::add_nl_expression),
144156
nb::arg("constraint"), nb::arg("f"), nb::arg("x"), nb::arg("p"))
157+
.def("add_nl_expression",
158+
nb::overload_cast<const NLConstraintIndex &, const FunctionIndex &,
159+
const std::vector<VariableIndex> &, const std::vector<double> &>(
160+
&IpoptModel::add_nl_expression),
161+
nb::arg("constraint"), nb::arg("f"), nb::arg("x"), nb::arg("p"))
145162
.def("add_nl_expression",
146163
nb::overload_cast<const NLConstraintIndex &, const FunctionIndex &,
147164
const std::vector<VariableIndex> &>(&IpoptModel::add_nl_expression),

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "scikit_build_core.build"
44

55
[project]
66
name = "pyoptinterface"
7-
version = "0.2.1"
7+
version = "0.3.0.dev0"
88
description = "Python interface to multiple optimization solvers"
99
readme = "README.md"
1010
requires-python = ">=3.8"

0 commit comments

Comments
 (0)