JuliaSmoothOptimizers / NLPModels.jl

Data Structures for Optimization Models
Other
171 stars 35 forks source link

Constraint evaluation behavior for unconstrained problems #464

Open tmigot opened 3 months ago

tmigot commented 3 months ago

This is a corner case, where we should probably on the behavior.

We have several ways to access the constraints function: cons!/cons, cons_nln and cons_lin, and objcons. How should these behave when applied on an unconstrained problems? I see 3 options:

A related question is: How should objcons react to this situation?

Connected to https://github.com/JuliaSmoothOptimizers/NLPModelsTest.jl/issues/26 and https://github.com/JuliaSmoothOptimizers/CUTEst.jl/pull/327

dpo commented 3 months ago

If a solver tries to solve an unconstrained problem and, in doing so, evaluates the constraints, there is a serious issue with that solver. We should not encourage that kind of behavior. I think cons!() should return an error in that case.

For objcons, the solution I see is easy: we should have objcons <=> obj for unconstrained problems.

tmigot commented 3 months ago

I agree with the first point, let's add a new error for unconstrained problem when we call the constraints, and error for linear and nonlinear constraints too.

I have a more mixed opinion on the objcons. Shouldn't this return an error too? Because it is obj and cons, in my mind this function is just trying to optimize both call depening on the models but essentially it is "similar" to call both functions. What I am trying to say if that it feels misleading to call objcons and irgnoring cons.

If we keep the version ignoring cons, then we need to update the docstring that right now says:

Evaluate ``f(x)`` and ``c(x)`` at `x`.

https://github.com/JuliaSmoothOptimizers/NLPModels.jl/blob/bfd4ceafec9ad6f58cbf11a4a88f2e61767ce701/src/nlp/api.jl#L117C1-L117C39

dpo commented 3 months ago

Yes I think objcons should also error if the problem is unconstrained.