資産のポートフォリオの効率的なフロンティアを解決する次のコードがあります。
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) の 1 つを以下に示します。
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;
、しかし、これよりもエレガントなソリューションはありませんか?