Skip to content

Commit

Permalink
visually separate different types of infeasibilities printed
Browse files Browse the repository at this point in the history
  • Loading branch information
Robbybp committed Dec 18, 2023
1 parent 9b8bf61 commit e3fe5c9
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions pyomo/contrib/pynumero/algorithms/solvers/callbacks.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,73 +150,85 @@ def __call__(
# previous iteration.
logger.info("")
logger.info(f"INFEASIBILITIES FOR ITERATION {iter_count}")
logger.info("------------------------------" + "-" * len(str(iter_count)))
logger.info("==============================" + "=" * len(str(iter_count)))

# TODO: Reduce repeated code here
i_max_xL = sorted_coords_x_L_viol[0]
if abs(x_L_viol[i_max_xL]) >= threshold:
logger.info("Lower bound violation")
logger.info("---------------------")
logger.info(self._get_header())
for i in sorted_coords_x_L_viol[: self._n_residuals]:
name = self._variable_names[i]
infeas = abs(x_L_viol[i])
infeas_str = f"{infeas:.2e}"
msg = infeas_str + " " + name
logger.info(msg)
logger.info("---------------------")

i_max_xU = sorted_coords_x_U_viol[0]
if abs(x_U_viol[i_max_xU]) >= threshold:
logger.info("Upper bound violation")
logger.info("---------------------")
logger.info(self._get_header())
for i in sorted_coords_x_U_viol[: self._n_residuals]:
name = self._variable_names[i]
infeas = abs(x_U_viol[i])
infeas_str = f"{infeas:.2e}"
msg = infeas_str + " " + name
logger.info(msg)
logger.info("---------------------")

i_max_compl_xL = sorted_coords_compl_x_L[0]
if abs(x_L_viol[i_max_compl_xL]) >= threshold:
logger.info("Lower bound complementarity")
logger.info("---------------------------")
logger.info(self._get_header())
for i in sorted_coords_compl_x_L[: self._n_residuals]:
name = self._variable_names[i]
infeas = abs(compl_x_L[i])
infeas_str = f"{infeas:.2e}"
msg = infeas_str + " " + name
logger.info(msg)
logger.info("---------------------------")

i_max_compl_xU = sorted_coords_compl_x_U[0]
if abs(x_U_viol[i_max_xU]) >= threshold:
logger.info("Upper bound complementarity")
logger.info("---------------------------")
logger.info(self._get_header())
for i in sorted_coords_compl_x_U[: self._n_residuals]:
name = self._variable_names[i]
infeas = abs(compl_x_U[i])
infeas_str = f"{infeas:.2e}"
msg = infeas_str + " " + name
logger.info(msg)
logger.info("---------------------------")

i_max_primal = sorted_coords_primal_infeas[0]
if abs(primal_infeas[i_max_primal]) >= threshold:
logger.info("Primal infeasibility")
logger.info("--------------------")
logger.info(self._get_header())
for i in sorted_coords_primal_infeas[: self._n_residuals]:
name = self._constraint_names[i]
infeas = abs(primal_infeas[i])
infeas_str = f"{infeas:.2e}"
msg = infeas_str + " " + name
logger.info(msg)
logger.info("--------------------")

i_max_dual = sorted_coords_dual_infeas[0]
if abs(dual_infeas[i_max_dual]) >= threshold:
logger.info("Dual infeasibility")
logger.info("------------------")
logger.info(self._get_header())
for i in sorted_coords_dual_infeas[: self._n_residuals]:
name = self._variable_names[i]
infeas = abs(dual_infeas[i])
infeas_str = f"{infeas:.2e}"
msg = infeas_str + " " + name
logger.info(msg)
logger.info("------------------")

logger.info("------------------------------" + "-" * len(str(iter_count)))
logger.info("==============================" + "=" * len(str(iter_count)))

0 comments on commit e3fe5c9

Please sign in to comment.