embotech/ecos

ECOS fails for QP with large scale

Opened this issue · 0 comments

A CVXPY user ran into numerical issues with ECOS while solving a QP. The issue is described here:
https://github.com/cvxgrp/cvxpy/issues/261

Here's a script that generates the failing problem for ECOS:

scale = 1e3 # works for scale <= 1e2, fails for scale >= 1e3
import numpy as np
np.random.seed(1)
n = 10
mu = scale * np.abs(np.random.randn(n, 1))
Sigma = np.random.randn(n, n)
Sigma = (scale ** 2.) * Sigma.T.dot(Sigma)
from cvxpy import *
w = Variable(n)
gamma = 1.
ret = mu.T*w
risk = quad_form(w, Sigma)
prob = Problem(Maximize(ret - gamma/2.*risk))
expected_result = 1./gamma * np.dot(np.linalg.inv(Sigma), mu)

# prob.solve()

import ecos
# Get ECOS arguments.
data = prob.get_problem_data(ECOS)
# Call ECOS solver.
solver_output = ecos.solve(data["c"], data["G"], data["h"],
                           data["dims"], data["A"], data["b"])
# Unpack raw solver output.
prob.unpack_results(ECOS, solver_output)
print(w.value)
print(expected_result - w.value)