Skip to content

Potential regression in the QP solver of HiGHS 1.14.0 #2960

@stephane-caron

Description

@stephane-caron

In the continuous integration pipeline of qpsolvers, we have noticed a regression from HiGHS 1.14.0 on solving a small dense QP problem.

The test fails e.g. in this run (I reproduced it locally on my computer as well):

======================================================================
FAIL: test_highs_tolerances (tests.test_highs.TestHiGHS)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/work/qpsolvers/qpsolvers/tests/test_highs.py", line 37, in test_highs_tolerances
    self.assertIsNotNone(x)
AssertionError: unexpectedly None

The corresponding test only checks whether the solver returns a (primal vector in its) solution:

def test_highs_tolerances(self):
    problem = get_sd3310_problem()
    x = highs_solve_qp(
        problem.P, problem.q, problem.G, problem.h, problem.A, problem.b,
        time_limit=0.1,
        primal_feasibility_tolerance=1e-1,
        dual_feasibility_tolerance=1e-1,
    )
    self.assertIsNotNone(x)

The corresponding problem is:

def get_sd3310_problem() -> Problem:
    """
    Get a small dense problem with 3 optimization variables, 3 inequality
    constraints, 1 equality constraint and 0 box constraint.
    """
    M = np.array([[1.0, 2.0, 0.0], [-8.0, 3.0, 2.0], [0.0, 1.0, 1.0]])
    P = np.dot(M.T, M)  # this is a positive definite matrix
    q = np.dot(np.array([3.0, 2.0, 3.0]), M).reshape((3,))
    G = np.array([[1.0, 2.0, 1.0], [2.0, 0.0, 1.0], [-1.0, 2.0, -1.0]])
    h = np.array([3.0, 2.0, -2.0]).reshape((3,))
    A = np.array([1.0, 1.0, 1.0])
    b = np.array([1.0])
    return Problem(P, q, G, h, A, b)

The test does not fail when we the version range of the dependency to highspy = ">=1.5.3,<1.14.0", which suggests highspy 1.14.0 may have a regression there.

Hoping this report helps!

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions