首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么solve.QP返回不可行的解决方案

为什么solve.QP返回不可行的解决方案
EN

Stack Overflow用户
提问于 2014-09-20 09:28:24
回答 1查看 447关注 0票数 1

我想在R中尝试一个均值方差优化的例子,在开始时,我使用了这个简单的例子:

代码语言:javascript
复制
> data(edhec)
> col.mean <- colMeans(edhec)
> Dmat <- cov(edhec)
> Amat <- matrix(1,nrow=nrow(Dmat))
> Amat <- cbind(Amat,col.mean)
> Amat <- cbind(Amat,diag(nrow(Dmat)))
> bvec <- c(1,0.005,rep(0,nrow(Dmat)))
> sol <- solve.QP(Dmat = 2*Dmat,dvec = 0.5*col.mean,Amat = Amat,bvec = bvec,meq = 1)
> sol$solution
 [1]  8.882101e-17  0.000000e+00  6.661437e-01  1.990021e-17  1.900749e-15 -3.685111e-17  2.419712e-16  3.338563e-01
 [9] -3.903081e-16  7.237917e-18  1.093498e-15  0.000000e+00  1.243608e-15
> 

然而,这一解决办法似乎不可行。有两个负数与约束之一相矛盾:

代码语言:javascript
复制
> Amat
                            col.mean                          
Convertible Arbitrage  1 0.006408553 1 0 0 0 0 0 0 0 0 0 0 0 0
CTA Global             1 0.006489474 0 1 0 0 0 0 0 0 0 0 0 0 0
Distressed Securities  1 0.007953289 0 0 1 0 0 0 0 0 0 0 0 0 0
Emerging Markets       1 0.008246053 0 0 0 1 0 0 0 0 0 0 0 0 0
Equity Market Neutral  1 0.006002632 0 0 0 0 1 0 0 0 0 0 0 0 0
Event Driven           1 0.007622368 0 0 0 0 0 1 0 0 0 0 0 0 0
Fixed Income Arbitrage 1 0.004230921 0 0 0 0 0 0 1 0 0 0 0 0 0
Global Macro           1 0.007672368 0 0 0 0 0 0 0 1 0 0 0 0 0
Long/Short Equity      1 0.007759868 0 0 0 0 0 0 0 0 1 0 0 0 0
Merger Arbitrage       1 0.006784868 0 0 0 0 0 0 0 0 0 1 0 0 0
Relative Value         1 0.006701316 0 0 0 0 0 0 0 0 0 0 1 0 0
Short Selling          1 0.004161184 0 0 0 0 0 0 0 0 0 0 0 1 0
Funds of Funds         1 0.005918421 0 0 0 0 0 0 0 0 0 0 0 0 1

第一列对应于加权和的约束为1,第二列是目标返回约束。其余的列完全相同,不包括负重。对于solve.QP的帮助,这些约束称为A^T b>= b_0。转置的Amat看起来像

代码语言:javascript
复制
> t(Amat)
         Convertible Arbitrage  CTA Global Distressed Securities Emerging Markets Equity Market Neutral Event Driven
                   1.000000000 1.000000000           1.000000000      1.000000000           1.000000000  1.000000000
col.mean           0.006408553 0.006489474           0.007953289      0.008246053           0.006002632  0.007622368
                   1.000000000 0.000000000           0.000000000      0.000000000           0.000000000  0.000000000
                   0.000000000 1.000000000           0.000000000      0.000000000           0.000000000  0.000000000
                   0.000000000 0.000000000           1.000000000      0.000000000           0.000000000  0.000000000
                   0.000000000 0.000000000           0.000000000      1.000000000           0.000000000  0.000000000
                   0.000000000 0.000000000           0.000000000      0.000000000           1.000000000  0.000000000
                   0.000000000 0.000000000           0.000000000      0.000000000           0.000000000  1.000000000
                   0.000000000 0.000000000           0.000000000      0.000000000           0.000000000  0.000000000
                   0.000000000 0.000000000           0.000000000      0.000000000           0.000000000  0.000000000
                   0.000000000 0.000000000           0.000000000      0.000000000           0.000000000  0.000000000
                   0.000000000 0.000000000           0.000000000      0.000000000           0.000000000  0.000000000
                   0.000000000 0.000000000           0.000000000      0.000000000           0.000000000  0.000000000
                   0.000000000 0.000000000           0.000000000      0.000000000           0.000000000  0.000000000
                   0.000000000 0.000000000           0.000000000      0.000000000           0.000000000  0.000000000
         Fixed Income Arbitrage Global Macro Long/Short Equity Merger Arbitrage Relative Value Short Selling
                    1.000000000  1.000000000       1.000000000      1.000000000    1.000000000   1.000000000
col.mean            0.004230921  0.007672368       0.007759868      0.006784868    0.006701316   0.004161184
                    0.000000000  0.000000000       0.000000000      0.000000000    0.000000000   0.000000000
                    0.000000000  0.000000000       0.000000000      0.000000000    0.000000000   0.000000000
                    0.000000000  0.000000000       0.000000000      0.000000000    0.000000000   0.000000000
                    0.000000000  0.000000000       0.000000000      0.000000000    0.000000000   0.000000000
                    0.000000000  0.000000000       0.000000000      0.000000000    0.000000000   0.000000000
                    0.000000000  0.000000000       0.000000000      0.000000000    0.000000000   0.000000000
                    1.000000000  0.000000000       0.000000000      0.000000000    0.000000000   0.000000000
                    0.000000000  1.000000000       0.000000000      0.000000000    0.000000000   0.000000000
                    0.000000000  0.000000000       1.000000000      0.000000000    0.000000000   0.000000000
                    0.000000000  0.000000000       0.000000000      1.000000000    0.000000000   0.000000000
                    0.000000000  0.000000000       0.000000000      0.000000000    1.000000000   0.000000000
                    0.000000000  0.000000000       0.000000000      0.000000000    0.000000000   1.000000000
                    0.000000000  0.000000000       0.000000000      0.000000000    0.000000000   0.000000000
         Funds of Funds
            1.000000000
col.mean    0.005918421
            0.000000000
            0.000000000
            0.000000000
            0.000000000
            0.000000000
            0.000000000
            0.000000000
            0.000000000
            0.000000000
            0.000000000
            0.000000000
            0.000000000
            1.000000000

向量b0似乎也是正确的:

代码语言:javascript
复制
> bvec
 [1] 1.000 0.005 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
> 

问题是,为什么solve.QP返回一个不可行的解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-20 10:14:36

在浮点表示范围内,+/-3e-16的数值为零.在你的解中基本上有两个非零的权重,它们都是正的。

你可能会对此感兴趣:

关于浮点算法,每个计算机科学家应该知道什么?

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

https://stackoverflow.com/questions/25947313

复制
相关文章

相似问题

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