二次优化-投资组合最大化问题中Amat、bvec参数设置疑问
quadprog中Amat与bvec的构造逻辑说明
solve.QP是quadprog包的核心求解函数,它适配的二次规划问题规则为:
最小化 $-\frac{1}{2} d^T b + b^T D b$
约束条件满足 $A^T b \geq b_0$
其中meq参数用于指定前meq个约束为等式约束,剩余约束默认是大于等于的不等式约束。
你场景中总共设置了6个约束,对应了矩阵的6行、bvec的6个取值,每个约束的含义如下:
- 第1个约束(等式):4个资产的权重之和为1,即 $w_1 + w_2 + w_3 + w_4 = 1$,对应bvec第一个值为1,约束系数行是
c(1,1,1,1) - 第2个约束(等式):组合期望收益等于目标值8%,即 $mu_1 w_1 + mu_2 w_2 + mu_3 w_3 + mu_4 w_4 = 8$,对应bvec第二个值为m0=8,约束系数行是mu的4个元素
- 第3-6个约束(不等式):要求不允许卖空,每个资产权重非负,即 $w_i \geq 0, i=1,2,3,4$,对应bvec第3到6个值都是0,每个约束的系数行只有对应资产位置为1,其余为0,比如第3个约束对应
c(1,0,0,0),第4个对应c(0,1,0,0),以此类推。
代码中先按行填充生成了6行4列的矩阵,每一行正好对应上述6个约束的系数,再转置得到4行6列的Amat,完全符合solve.QP对Amat的格式要求:行数等于变量数(资产数4),列数等于约束数(6)。
参数meq=2就是指定前两个约束为等式约束,和我们的问题设定完全匹配。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

