繁体   English   中英

Python:使用CVXOPT进行二次编程

[英]Python: Using CVXOPT for quadratic programming

我正在使用CVXOPT进行二次编程,以使用均值方差优化来计算组合的最佳权重。 http://abel.ee.ucla.edu/cvxopt/userguide/coneprog.html#quadratic-programming中有一个很好的例子。 但是,参数采用正则化形式(根据作者)。 该示例是基本版本。 我正在寻找一个更复杂的问题,其中:

min:

x'Sx  

s.t.:

x'a >= g  
x'1 = 0  
x >= -Wb  
x <= c1 - Wb  

where:
x: active weights of assets (active weight = portfolio weight - benchmark weight)  
S: covariance matrix of asset returns  
a: expected stock excess returns  
g: target gain  
Wb: weights of assets in the benchmark  
c: upper limit (weight) of any asset in the portfolio  

假设所有变量都已计算或已知。

文档中提供的基本示例:

min:  

x'Sx  

s.t.  

p'x >= g  
1'x = 1

其中p是资产收益。

我不知道的内容(请参考http://abel.ee.ucla.edu/cvxopt/examples/book/portfolio.html上的代码以及上面的优化问题):

1.我认为这些参数设置了约束,但我不确定:

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)

2.我相信这是“规范形式”的最小化问题的一部分,我不确定这意味着什么:

mus = [ 10**(5.0*t/N-1.0) for t in xrange(N) ]

3. qp的参数是什么(solver.qp是二次优化器):

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

查看文档,我很确定mu * S(第一个参数)是要最小化的目标函数,而-pbar是返回值。 但是,这看起来像一个最大化问题(最大化负收益)。

我不知道,但是其他参数是如何使用的。

考虑到我的最小化问题和上述限制,我正在寻找使用优化器的帮助。

我阅读了文档,我认为您必须将函数与以下参数一起使用。 我假设x大小为n

P = S
q = (0,....0)

A = (1, ...... 1)
b = (0)

G从以下位置垂直堆叠

 -a
 +I_n
 -I_n

其中I_n是大小为nxn的单位矩阵。 相应的右侧h

  -g
  Wb
  ...
  Wb
  C1-Wb
  ...
  C1-Wb

即:1 -gnWbnC1-Wb

HTH。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM