-
Notifications
You must be signed in to change notification settings - Fork 563
Description
Summary
Presently, Pyomo's new solver interface returns dual variables for variable bonds only if the NLP has an objective function. However, IPOPT returns dual variables not just when optimizing an objective function, but also when it returns EXIT: Converged to a point of local infeasibility. Problem may be infeasible. The dual variables in this case are extremely helpful for determining which variable bounds are causing the termination point to be a local minimizer for primal infeasibility.
I know these dual variables are getting returned by IPOPT, because they get loaded in when the suffixes ipopt_zL_out and ipopt_zU_out are created and the problem is solved through the old IPOPT interface. While it would be possible to manually add the function for primal infeasibility that IPOPT is minimizing in the restoration phase, it would also be extremely tedious because it involves creating slack variables for both the lower and upper bounds.
Information on your system
Pyomo version: 6.9.5
Python version: 3.12
Operating system: Windows 11
How Pyomo was installed (PyPI, conda, source): Some combination of IDAES and Watertap developer installations
Solver (if applicable): IPOPT