Skip to content

New solver interface doesn't return bound dual variables from IPOPT's restoration phase #3807

@dallan-keylogic

Description

@dallan-keylogic

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions