# Termination Criteria of Solver in Pyomo

I am solving a nonlinear optimization problem using Pyomo with Ipopt as solver. The solver exits with the status:
EXIT: Optimal Solution Found.

This I can cross check by testing:results.solver.termination_condition == TerminationCondition.optimal, which returns True. I was now curious to check, whether the solution is globally or locally optimal. However, for both of the statements below, I get a False return.

results.solver.termination_condition == TerminationCondition.globallyOptimal results.solver.termination_condition == TerminationCondition.locallyOptimal

I don't understand, why is it False for both of these statements. Would anyone having previous experience with Pyomo help me out ?

A bit of background information on accessing solver status and termination conditions in Pyomo can be found here.

Thanks.

• One possible explanation could be here, where it says that Ipopt does not know if a solution is a local or a global optimal solution. So, I am guessing, it could be that Ipopt guarantees neither about the solution being global nor about it being local. It could be either. Jul 4 '19 at 6:23

If the IPOPT termination condition is Optimal Solution Found then the returned solution is locally optimal. IPOPT is, by design, not a global solver and therefore does not have any built-in infrastructure for checking if a solution is global vs. local. However, if you know certain features of your problem, like if it is convex, then you as the user might be able to prove that you're getting the globally optimal solution on your specific problem (but there is no automated infrastructure in IPOPT or Pyomo for doing this).