当我尝试使用 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 文件。