1

当我尝试使用 python 中的 cvxopt 包中的solvers.qp 解决二次规划问题时,它会在几秒钟后杀死我的内核。

该软件包的文档位于http://cvxopt.org/userguide/coneprog.html#cvxopt.solvers.qp。如果我从该页面运行示例代码:

from math import sqrt
from cvxopt import matrix
from cvxopt.solvers import qp

# Problem data.
n = 4
S = matrix([[ 4e-2,  6e-3, -4e-3,    0.0 ],
        [ 6e-3,  1e-2,  0.0,     0.0 ],
        [-4e-3,  0.0,   2.5e-3,  0.0 ],
        [ 0.0,   0.0,   0.0,     0.0 ]])
pbar = matrix([.12, .10, .07, .03])
G = matrix(0.0, (n,n))
G[::n+1] = -1.0 
h = matrix(0.0, (n,1))
A = matrix(1.0, (1,n))
b = matrix(1.0)

# Compute trade-off.
N = 100
mus = [ 10**(5.0*t/N-1.0) for t in range(N) ]

portfolios = [ qp(mu*S, -pbar, G, h, A, b)['x'] for mu in mus ]

大约 2 秒后,我从 python 得到以下回复:

内核似乎意外死亡。使用“重新启动内核”继续使用此控制台。

内核似乎意外死亡。使用“重新启动内核”继续使用此控制台。

内核似乎意外死亡。使用“重新启动内核”继续使用此控制台。

...

我也不明白这个 ['x'] 选项是什么意思。但是,即使我不考虑它,它也会给我内核“意外”的死亡。我还尝试了肯定有解决方案的 qp 问题。就像 x^2+y^2 在没有约束或非负约束下......无论我做什么,它都会杀死我的内核。可能是什么问题呢?

也许重要的是要说,

  • 我使用 Ubuntu 16
  • 我使用 Python 3.5
  • 我使用 cvxopt 1.1.9
  • 包 cvxopt 也使用 C 文件。
4

1 回答 1

0

您可以从终端运行脚本以获取此错误的原因。

当我收到此错误时,原因是Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so. 我使用 conda 所以这是我的解决方案:

conda config --add channels conda-forge
conda install -f cvxopt
于 2018-05-30T02:34:44.530 回答