我有以下代码计算资产组合的有效边界:
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;
,但没有比这更优雅的解决方案了吗?