Skip to content

Commit 99cf2b2

Browse files
committed
Restrict ipopt to only accept minimization problem
1 parent d45555a commit 99cf2b2

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

include/pyoptinterface/ipopt_model.hpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,16 @@ struct IpoptModel
106106
}
107107

108108
template <typename T>
109-
void set_objective(const T &expr, bool clear_nl = false)
109+
void set_objective(const T &expr, ObjectiveSense sense = ObjectiveSense::Minimize,
110+
bool clear_nl = false)
110111
{
112+
if (sense != ObjectiveSense::Minimize)
113+
{
114+
throw std::runtime_error(
115+
"Currently Ipopt only supports ObjectiveSense::Minimize, please negate the "
116+
"objective manually if you intend to maximize the objective");
117+
}
118+
111119
m_lq_model.set_objective(expr);
112120
if (clear_nl)
113121
{

lib/ipopt_model_ext.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,15 +131,15 @@ NB_MODULE(ipopt_model_ext, m)
131131
.def("add_objective", &IpoptModel::add_objective<double>)
132132

133133
.def("set_objective", &IpoptModel::set_objective<ExprBuilder>, nb::arg("expr"),
134-
nb::arg("clear_nl") = false)
134+
nb::arg("sense") = ObjectiveSense::Minimize, nb::arg("clear_nl") = false)
135135
.def("set_objective", &IpoptModel::set_objective<ScalarQuadraticFunction>, nb::arg("expr"),
136-
nb::arg("clear_nl") = false)
136+
nb::arg("sense") = ObjectiveSense::Minimize, nb::arg("clear_nl") = false)
137137
.def("set_objective", &IpoptModel::set_objective<ScalarAffineFunction>, nb::arg("expr"),
138-
nb::arg("clear_nl") = false)
138+
nb::arg("sense") = ObjectiveSense::Minimize, nb::arg("clear_nl") = false)
139139
.def("set_objective", &IpoptModel::set_objective<VariableIndex>, nb::arg("expr"),
140-
nb::arg("clear_nl") = false)
140+
nb::arg("sense") = ObjectiveSense::Minimize, nb::arg("clear_nl") = false)
141141
.def("set_objective", &IpoptModel::set_objective<double>, nb::arg("expr"),
142-
nb::arg("clear_nl") = false)
142+
nb::arg("sense") = ObjectiveSense::Minimize, nb::arg("clear_nl") = false)
143143

144144
.def("_add_nl_objective", &IpoptModel::_add_nl_objective)
145145

0 commit comments

Comments
 (0)