Skip to main content

Module infeasibility_saddle

Module infeasibility_saddle 

Source
Expand description

Testing a local-infeasibility verdict for a nearby point with less violation.

§Why this exists

Infeasible_Problem_Detected claims the solve stopped at a local minimizer of the constraint violation. Every gate that issues it checks that claim to first order only: the gradient of the violation vanishes, or a step along its negative does not help (IpoptCq::infeasibility_descent_available). A first-order test cannot tell a minimizer from a saddle or a maximizer, and nonconvex models have saddles of the violation that the iterates are attracted to.

Vanderbei discs is the measured case. It places 12 discs subject to tangency equalities (x_i - x_j)^2 + (y_i - y_j)^2 = (r_i + r_j)^2. A solve that perturbs the trajectory (a different FERAL ordering, mc64 scaling, or a different symbolic analysis) can end with discs 8 and 9 at the same centre. There the row cons1[9,8] reads 0 = 4. Its gradient with respect to the centres is exactly zero, and the radii sit on their lower bound of 1, so every first-order test passes and the solve reports infeasibility. Upstream Ipopt 3.14.19 with MUMPS reports the same verdict at default options. But separating the two discs by delta lowers that row’s violation to 4 - |delta|^2: the point is a maximizer of the violation along every separating direction.

§What is tested

The max-norm violation theta(x) = max_i dist(g_i(x), [g_l_i, g_u_i]), at seeded random points near the verdict’s point and clipped into the variable box. If one of them has less violation, beyond a margin that evaluation noise cannot reach, the verdict’s point is not a local minimizer of theta.

The norm is deliberate. At the discs point the ℓ₁ violation is locally minimal: moving one disc breaks its satisfied tangency rows at first order, and the sum of those exceeds the second-order gain on the coincident pair. Under the max norm those first-order breaks stay below the violated row’s 4.0 for small steps, so the gain shows. A random probe can therefore refute a degenerate row’s minimality without knowing which row it is.

§Direction

The probe changes no verdict by itself. It only decides whether the second-opinion ladder spends one more solve, started from the point the probe found, and that solve is promoted only if it converges, which no infeasible model can do. A genuinely infeasible model whose verdict point is a strict local minimizer of theta produces no escape point and pays nothing; one whose verdict point is a saddle pays one re-solve and keeps its verdict. Any failure to evaluate declines to produce a point.

Structs§

SaddleEscape
A point near a local-infeasibility verdict’s point with less max-norm violation, showing the verdict’s point is not a local minimizer of it.

Constants§

SADDLE_ESCAPE_RUNG_LABEL
The second-opinion rung that re-solves from SaddleEscape::x.

Functions§

infeasibility_saddle_escape
Probe near x_verdict for a point with less max-norm constraint violation.