0
$\begingroup$

I am trying to solve following large-scale quadratic fractional (QF) problem: \begin{equation} \begin{aligned} \min_{x\in\Re^{n\times1}} &\frac{x^\top H x + f^\top x + C_e}{x^\top R x}\\ \text{s.t.} &~~Ax\leq b \end{aligned} \end{equation} where $H$ and $R$ are both positive definite matrics. $C_e$ is a positive scalar. $n$ is around 5000.

By letting $z^2:=\frac{1}{x^\top R x}$, the original QF problem can be transferred into a non-convex QCQP problem: \begin{equation} \begin{aligned} \min_{\theta\in\Re^{n+1}} &\theta^\top \tilde{H} \theta\\ \text{s.t.} &~~\theta^\top\tilde{R}\theta=1\\ &~~\tilde{A}\theta\leq \tilde{b}\\ &~~\sigma^{-1}_{\text{vwap}} \leq z \end{aligned} \end{equation} where $\theta:=[y^\top,z]^\top$, $y=xz$ and solve it using some non-convex solver i.e. IPOPT.

Alternatively, I could transform the non-convex QCQP problem into a semi-definite programming (SDP) problem, such that: \begin{equation} \begin{aligned} \min_{X} &~tr(\tilde{H} X)\\ \text{s.t.} &~~tr(\tilde{R}X)=1\\ &~~tr(\tilde{A}_iX)\leq \tilde{b}_i\\ &~~ X\succeq 0 \end{aligned} \end{equation} and solve it using some SDP solver, i.e. MOSEK. I firstly tried to use MOSEK to solve this $5000\times 5000$ SDP problem, but it seems very slow.

I then tried to use IPOPT (ver 3.12.9). By providing the Jacobian & Hessian informations and a feasible initial guess $x_0$, IPOPT could solve my problem very fast in most of the time. However, sometimes IPOPT iterations stucks for more than 10 mins! Because it keeps

"Reallocating memory for MA57: lfact"

I am wondering, is there any efficient and robust way to solve my optimization problem?

$\endgroup$
1
  • $\begingroup$ You are welcome to send the problem to MOSEK support. 5000x5000 is normally in the huge and hard range for any solver, unless it is very sparse or there is some other reason for it to be easy. $\endgroup$ Commented Dec 6, 2021 at 10:13

1 Answer 1

0
$\begingroup$

The IPOPT memory reallocating problem can be solved by setting

options.ipopt.ma57_automatic_scaling = 'yes';

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .