我们在Pyomo + Mosek (商业)中提出了一个QP优化问题。
不料,莫塞克抱怨二次系数不是PSD。
Error: rescode.err_obj_q_not_psd(1295): The quadratic coefficient matrix in the objective is not positive semidefinite as expected for a minimization problem.最小可重现性示例:
import pyomo.kernel as pmo
import numpy as np; np.random.seed(1)
n = 5
Q1 = np.random.randn(n, n)
Q1 = Q1.T @ Q1 # theoretically always PSD
m = 5
A1 = np.random.randn(m, n)
b1 = np.random.randn(m)
problem = pmo.block()
problem.x = pmo.variable_list()
for i in range(n):
problem.x.append(pmo.variable())
problem.OBJ = pmo.objective(expr = problem.x @ Q1 @ problem.x, sense = pmo.minimize)
problem.cons = pmo.constraint_list()
tmp_lhs = A1 @ problem.x
for i in range(len(b1)):
problem.cons.append(pmo.constraint(expr= tmp_lhs[i] <= b1[i]))
opt = pmo.SolverFactory("mosek")
opt.solve(problem)我们认为Q1是PSD的原因:
帮帮忙!
发布于 2021-05-14 13:53:47
2021年2月,我在公共关系中修复了这个错误。但是,目前的版本(V5.7.3)似乎还没有修复。您可以做两件事(对于这两件事,您都需要知道在哪里安装了pyomo,可以在python中使用print(pyomo.__file__)找到这个问题):
python3.8/site-packages/pyomo/solvers/plugins/solvers/mosek_direct.py,那么只需要将第253行从mosek_qexp = (qsubi, qsubj, qvals)更改为mosek_qexp = (qsubi, qsubj, qvals)第二种选择应该更快。
很抱歉给您带来不便。为什么发行版还没有这个修复程序,这有点让人困惑,但我将向回购的维护人员提出这个问题。
https://stackoverflow.com/questions/67534386
复制相似问题