我有下面的代码工作了有效边界的资产组合:界约束忽略Matlab的
lb=Bounds(:,1);
ub=Bounds(:,2);
P = Portfolio('AssetList', AssetList,'LowerBound', lb, 'UpperBound', ub, 'Budget', 1);
P = P.estimateAssetMoments(AssetReturns)
[Passetmean, Passetcovar] = P.getAssetMoments
pwgt = P.estimateFrontier(20);
[prsk, pret] = P.estimatePortMoments(pwgt);
它工作正常,除了它忽略约束在一定程度上(结果如下)的事实。我如何将约束设置为硬约束 - 即防止它忽略零的上界?例如,当我将上限和下限设置为零(即我不想将某个特定资产包含在投资组合中)时,我仍然可以获得该资产的计算投资组合权重的值,尽管非常小部分优化组合。 下界(LB),上限(UB),以及投资组合权重的一个(pwgt)载列如下:
lb ub pwgt(:,1)
0 0 1.06685493772574e-16
0 0 4.17200995972422e-16
0 0 0
0 0 2.76688394418301e-16
0 0 3.39138439553466e-16
0.192222222222222 0.252222222222222 0.192222222222222
0.0811111111111111 0.141111111111111 0.105624956477606
0.0912121212121212 0.151212121212121 0.0912121212121212
0.0912121212121212 0.151212121212121 0.0912121212121212
0.0306060606060606 0.0906060606060606 0.0306060606060606
0.0306060606060606 0.0906060606060606 0.0306060606060606
0.121515151515152 0.181515151515152 0.181515151515152
0.0508080808080808 0.110808080808081 0.110808080808081
0.00367003367003366 0.0636700336700337 0.0388531580005063
0.00367003367003366 0.0636700336700337 0.0636700336700338
0.00367003367003366 0.0636700336700337 0.0636700336700337
0 0 0
0 0 0
0 0 1.29236898960272e-16
我可以使用类似:pwgt=floor(pwgt*1000)/1000;
,但有没有更好的解决方案比这个?