1

I have a polytope described by a set of inequalities and equalities that are given as numpy arrays. These arrays will usually be quite large, as they describe the LP-relaxation of an MIPLIB problem. I want to compute the analytic center of this polytope. If possible, I'd like to do this directly from my Python code. However, I am also open to solutions that (for instance) write the polytope description to an MPS file and use another tool to compute the analytic center.

So far, I have tried implementing a primal-dual newton algorithm as described in "Interior-Point Algorithm: Theory and Analysis" by Yinyu Ye. However, this method is much too slow. Another approach I tried was using a path-following interior-point method with a vanishing objective. To this end, I used linprog from scipy. However, evaluation on simple examples shows that method="interior-point" gives an interior point that is different from the analytic center, even when I set options={"resolve": False, "rr": False, "autoscale": False} to prevent modifications to the polytope description. Using method="highs-ipm" will give a vertex solution.

I'd be happy to hear about any ideas.

FooBar
  • 334
  • 2
  • 10

1 Answers1

3

If you polytope is described as { x | a_i^T x <= b_i } then finding the analytic center amounts to minimizing function f(x) = - sum_i log(b_i - a_i^T x).

Function f is convex and self-concordant. I would recommend applying damped Newton steps, which should converge in a few iterations. The main computational effort will be solving the Newton linear system.

For a description of Newton's method with damped steps see section 9.5.2 in https://web.stanford.edu/~boyd/cvxbook/ (Convex Optimization, Boyd and Vandenberghe) or https://francisbach.com/self-concordant-analysis-newton/ or

F_G
  • 131
  • 2