首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyomo + Mosek问题:系数矩阵不是半正定的

Pyomo + Mosek问题:系数矩阵不是半正定的
EN

Stack Overflow用户
提问于 2021-05-14 12:30:18
回答 1查看 293关注 0票数 0

我们在Pyomo + Mosek (商业)中提出了一个QP优化问题。

不料,莫塞克抱怨二次系数不是PSD。

代码语言:javascript
复制
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.

最小可重现性示例:

代码语言:javascript
复制
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的原因:

  • 的所有特征值都是正的
  • CPLEX(商业)能够解决它

帮帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-14 13:53:47

2021年2月,我在公共关系中修复了这个错误。但是,目前的版本(V5.7.3)似乎还没有修复。您可以做两件事(对于这两件事,您都需要知道在哪里安装了pyomo,可以在python中使用print(pyomo.__file__)找到这个问题):

  1. 克隆了Pyomo存储库(主分支),并将其用作您的pyomo安装。提示:您可以使用pip安装pyomo,然后将pyomo安装(在env/lib/site-packages/pyomo中的某个地方)替换为一个符号链接--回购克隆。#救生艇

  1. ,如果您有Pyomo5.7.3,那么您可以自己进行修复。如果您转到file:python3.8/site-packages/pyomo/solvers/plugins/solvers/mosek_direct.py,那么只需要将第253行从mosek_qexp = (qsubi, qsubj, qvals)更改为mosek_qexp = (qsubi, qsubj, qvals)

第二种选择应该更快。

很抱歉给您带来不便。为什么发行版还没有这个修复程序,这有点让人困惑,但我将向回购的维护人员提出这个问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67534386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档