BUG: optimize.linprog TestLinprogIPSparse.test_bug_6139 使用 OpenBLAS 时因已过时的内部点求解器而失败
import numpy as np from scipy.optimize import linprog from numpy.testing import assert_allclose, assert_equal
def _assert_success(res, desired_fun=None, desired_x=None, rtol=1e-8, atol=1e-8): if not res.success: raise AssertionError(f"linprog status {res.status}, message: {res.message}") assert_equal(res.status, 0) if desired_fun is not None: assert_allclose(res.fun, desired_fun, err_msg="converged to an unexpected objective value", rtol=rtol, atol=atol) if desired_x is not None: assert_allclose(res.x, desired_x, err_msg="converged to an unexpected solution", rtol=rtol, atol=atol)
c = np.array([1, 1, 1]) A_eq = np.array([[1., 0., 0.], [-1000., 0., -1000.]]) b_eq = np.array([5.00000000e+00, -1.00000000e+04]) A_ub = -np.array([[0., 1000000., 1010000.]]) b_ub = -np.array([10000000.]) bounds = (None, None)
method = "interior-point"
method = "highs" # passes
method = "highs-ipm" # passes
options = {"sparse": True, "cholesky": False, "sym_pos": False}
res = linprog(c, A_ub, b_ub, A_eq, b_eq, bounds, method=method, options=options) print(f"result fun: {res.fun}") print(f"result x: {res.x}")
_assert_success(res, …
内容来源: scipy/scipy