Hi,
I was pinged by @amontoison. I played around with UnoSolver.jl + MA57 and an AMPL version of your instance, and found out something interesting. I’m guessing something similar happens with IPOPT (the implementations, while not identical, are quite close).
During some iterations, the regularization loop behaves like this:
Testing factorization with regularization factors (0, 0)
Performing numerical factorization of the indefinite system
Expected inertia (54, 42, 0)
Estimated inertia (55, 41, 0)
Testing factorization with regularization factors (1.11111e-05, 0)
Performing numerical factorization of the indefinite system
Expected inertia (54, 42, 0)
Estimated inertia (55, 40, 1)
Testing factorization with regularization factors (8.88889e-05, 0)
Performing numerical factorization of the indefinite system
Expected inertia (54, 42, 0)
Estimated inertia (55, 41, 0)
Testing factorization with regularization factors (0.000711111, 0)
Performing numerical factorization of the indefinite system
Expected inertia (54, 42, 0)
Estimated inertia (55, 41, 0)
Testing factorization with regularization factors (0.00568889, 0)
Performing numerical factorization of the indefinite system
Expected inertia (54, 42, 0)
Estimated inertia (55, 41, 0)
Testing factorization with regularization factors (0.0455111, 0)
Performing numerical factorization of the indefinite system
Expected inertia (54, 42, 0)
Estimated inertia (54, 41, 1)
Testing factorization with regularization factors (0.364089, 0)
Performing numerical factorization of the indefinite system
Expected inertia (54, 42, 0)
Estimated inertia (54, 40, 2)
Testing factorization with regularization factors (2.91271, 0)
Performing numerical factorization of the indefinite system
Expected inertia (54, 42, 0)
Estimated inertia (54, 40, 2)
Testing factorization with regularization factors (23.3017, 0)
Performing numerical factorization of the indefinite system
Expected inertia (54, 42, 0)
Estimated inertia (54, 40, 2)
Testing factorization with regularization factors (2330.17, 0)
Performing numerical factorization of the indefinite system
Expected inertia (54, 42, 0)
Estimated inertia (54, 40, 2)
...
At the beginning, the estimated inertia contains one positive eigenvalue too many, which is not covered by the IPOPT regularization strategy (also implemented in Uno), so it dumbly tries to increase the primal reg coefficient. This then turns an estimated negative eigenvalue into an estimated zero eigenvalue! The IPOPT strategy always assumes that zero eigenvalues can be detected upfront, so the singularity test happens outside of the loop. In this case, it can never recover from singularity, and just keeps increasing the primal reg coefficient until it exceeds some large threshold (1e20).
Meanwhile, the inertia jumps around a bit. I’m guessing some pivots are so close to 0 that they constantly get misclassified.
Seems like a difficult instance numerically…