主要内容

이번역페이지는최신내용을담고있지않습니다。최신내용을영문으로보려면여기를클릭하십시오。

2혼합정수차계획법포트폴리오최적화:문제기반

이예제에서는문제기반접근법을사용하여혼합정수차2계획법(MIQP)포트폴리오최적화문제를푸는방법을보여줍니다。이문제의요점은국소적으로MIQP문제의근삿값을구하는일련의혼합정수선형계획법(MILP)문제를반복적으로푸는것입니다。솔버기반접근법은2혼합정수차계획법포트폴리오최적화:솔버기반항목을참조하십시오。

문제개요

马科维茨가증명한바와같이(“投资组合选择,”j .金融卷7,问题1,第91 - 77页,1952年3月),많은포트폴리오최적화문제를2차계획법문제로표현할수있습니다。N개의자산으로구성된집합이있고 x 가자산 에대한투자를나타내는포트폴리오를선택하려한다고가정해보겠습니다。각자산의평균수익으로구성된벡터 r 과수익의공분산행렬 를아는경우,지정된위험회피수준 λ 에대해위험조정후예상수익을극대화합니다。

马克斯 x r T x - λ x T x

quadprog솔버는이2차계획법문제를해결합니다。하지만일반2차계획법문제외에도,다음과같이다양한방법으로포트폴리오를제한하려할수있습니다。

  • 포트폴리오에포함된자산이개를넘지않으며,M < = N임。

  • 포트폴리오에포함된자산이최소개이며,0 < m <= m임。

  • 반연속제약조건포함(즉 x 0 이거나일부고정된비율 f n > 0 f 一个 x f n 에대해 f n x f 一个 x 임)。

quadprog에는이러한제약조건을포함시킬수없습니다。이경우의어려운점은제약조건의특성이이산적이라는것입니다。뿐만아니라,혼합정수선형계획법솔버는이산제약조건은처리하지만2차목적함수를처리하지는않습니다。

이예제에서는제약조건을충족하고차2목적함수를점점근사화하는일련의MILP문제를생성합니다。이기법은이예제에서는효과가있지만,다른문제또는제약조건유형에는적용되지않을수있습니다。

제약조건을모델링하는것으로시작합니다。

이산제약조건모델링하기

x 는자산할당비율로구성된벡터로,각 에대해 0 x 1 입니다。포트폴리오에서자산의개수를모델링하려면 x 0 일때 v 0 이고 x > 0 일때 v 1 이되는표시변수 v 가필요합니다。이제한을충족하는변수를가져오려면 v 벡터를이진변수로설정하고다음선형제약조건을적용하십시오。

v f n x v f 一个 x

이부등식은모두 x v 0이가동시에정확히되도록하고,또한 x > 0 일때마다 f n x f 一个 x 가되도록합니다。

또한포트폴리오에있는자산의개수에제약조건를적용하려면다음선형제약조건을적용하십시오。

v

목적함수및연속선형근사

처음정식화할때는목적함수값을최대화하려고시도할수있습니다。그러나모든优化工具箱™솔버는목적함수를최소화합니다。따라서다음과같이음을취한목적함수의최소화문제로정식화하십시오。

最小值 x λ x T x - r T x

이목적함수는비선형적입니다。MILP솔버를사용하려면선형목적함수가필요합니다。이문제를선형목적함수와비선형제약조건이있는문제로다시정식화하기위한표준기법이있습니다。2차항을나타내기위해여유변수 z 를사용합니다。

最小值 x z λ z - r T x 这样 x T x - z 0 z 0

MILP근삿값을반복적으로구할때새로운선형제약조건을포함시킵니다。이러한조건각각은현재점근처에국소적으로비선형제약조건을근사화합니다。특히 x x 0 + δ 의경우(여기서 x 0 은상수벡터이고 δ 제는변수벡터임)약조건에대한1차테일러근사는다음과같습니다。

x T x - z x 0 T x 0 + 2 x 0 T δ - z + O | δ | 2

δ x - x 0 으로바꾸면다음과같은식이됩니다。

x T x - z - x 0 T x 0 + 2 x 0 T x - z + O | x - x 0 | 2

각각의중간해 x k 에대해 x z 에서새로운선형제약조건을다음과같이위표현식의선형부분으로추가합니다。

- x k T x k + 2 x k T x - z 0

이는 一个 x b 형식을가지며,여기서 一个 2 x k T 이고 z 항의승수는 - 1 이며 b x k T x k 입니다。

문제에새로운선형제약조건을추가하는이방법을평면절단방법이라고합니다。자세한내용은j·e·凯利。《求解凸程序的切割平面法》。j . Soc。工业上。达成。数学。8卷,第4号,第712 - 703页,1960年12月을참조하십시오。

MATLAB®문제정식화

최적화문제를표현하려면다음을수행하십시오。

  • 변수가나타내는대상결정

  • 이러한변수의하한과상한표현

  • 선형등식과선형부등식의표현식지정

문제에대한데이터를불러옵니다。이데이터에는벡터r에225개의예상수익과225×225행렬에수익의공분산이포함되어있습니다。이데이터는포트폴리오최적화를위한차2계획법예제에있는데이터와동일합니다。

负载port5r = mean_return;Q = Correlation .* (stdDev_return * stdDev_return');

자산개수를N으로설정합니다。

N =长度(r);

문제변수,제약조건,목적함수만들기

자산할당비율을나타내는연속변수xvars,연관된xvars가0또는순양수인지여부를나타내는이진변수vvars,양의스칼라인 z 변수를나타내는zvar을만듭니다。

xvars = optimvar (“xvars”N 1下界的0,“UpperBound”1);vvars = optimvar (“vvars”N 1“类型”“整数”下界的0,“UpperBound”1);zvar = optimvar (“zvar”, 1下界的, 0);

문제에서모든2 n + 1개변수의하한은0입니다。xvars변수와yvars변수의상한은1이고zvar에는상한이없습니다。

100年해의자산개수가에서150사이의값이되도록설정합니다。이제약조건을다음과같은형식으로문제에포함시킵니다。

v

이때다음과같이두개의선형제약조건을작성합니다。

v

v

M = 150;m = 100;qpprob = optimproblem (“ObjectiveSense”“最大化”);qppro . constraints .mconstr = sum(vars) <= M;qpprob.Constraints。米constr2 = sum(vvars) >= m;

반연속제약조건을포함시킵니다。자산에서0이아닌최소비율은각자산유형에대해0.001이고,최대비율은0.05라고가정하겠습니다。

fmin = 0.001;fmax = 0.05;

부등식 x f 一个 x v f n v x 를포함시킵니다。

qppro . constraints .fmaxconstr = xvars <= fmax* vars;qppro . constraints .fminconstr = fmin* vars <= xvars;

포트폴리오가100%투자되는제약조건을포함시킵니다。즉, x 1 입니다。

qppro . constraints .allin = sum(xvars) == 1;

위험회피계수 λ One hundred.으로설정합니다。

λ= 100;

목적함수 r T x - λ z 를정의하여문제에포함시킵니다。

qpprob。Objective = r'*xvars - lambda*zvar;

문제풀기

문제를반복적으로풀려면먼저어떤선형화도아직반영하지않는현재제약조건으로문제를풀어보십시오。

选择= optimoptions (@intlinprog,“显示”“关闭”);抑制迭代显示[xLinInt, fval exitFlagInt、输出]=解决(qpprob,“选项”、选择);

반복의중지조건을준비합니다。여유변수 z 내가실제2차값의0.01%에있을때중지합니다。

thediff = 1的军医;iter = 1;%迭代计数器资产= xLinInt.xvars;truequadratic =资产' * Q *资产;zslack = xLinInt.zvar;

플로팅을위해계산된실제2차변수와여유변수의내역을유지합니다。디폴트값보다더엄격한허용오차를설정하여반복이올바른해로수렴하도록합니다。

历史= [truequadratic, zslack];选择= optimoptions(选项,“LPOptimalityTolerance”1平台以及“RelativeGapTolerance”1 e-8...“ConstraintTolerance”1 e-9“IntegerTolerance”1 e-6);

2차값과여유값을계산합니다。두값이다르면다른선형제약조건을추가하고다시풉니다。

각각의새로운선형제약조건 一个 x b 는다음선형근사에서제공됩니다。

- x k T x k + 2 x k T x - z 0

새로운해를구한후이전해와새로운해의중간에해당하는선형제약조건을사용합니다。선형제약조건을포함하는이경험적방법이단순히새로운해를선택하는것보다빠를수있습니다。경험적으로중간해를사용하는대신이해를사용하려면아래에서”中途“라인을주석처리하고그뒤에오는라인을주석해제하십시오。

Abs ((zslack - truequadratic)/truequadratic%相对误差const = 2*assets'*Q*xvars - zvar <= assets'*Q*assets;新名称= [“迭代”num2str (iter)];qpprob.Constraints。(新名称)=若干;用新的约束条件解决问题[xLinInt, fval exitFlagInt、输出]=解决(qpprob,“选项”、选择);资产=(资产+ xLinInt.xvars) / 2;从前到现在的中间%资产= xLinInt(xxars);%使用前一行或这一行truequadratic = xLinInt.xvars ' * Q * xLinInt.xvars;zslack = xLinInt.zvar;历史=(历史;truequadratic, zslack);Iter = Iter + 1;结束

해와수렴속도검토하기

여유변수와목적함수2차중부분의내역을플로팅하여이들의수렴방식을확인합니다。

情节(历史)传说(“二次”“松弛”)包含(的迭代次数)标题(“二次和线性近似(松弛)”

MILP해의품질은어떻습니까?输出구조체에그정보가포함되어있습니다。해에서목적함수에관해내부적으로계산된범위사이의절대간격을검토합니다。

disp (output.absolutegap)
0

절대간격이0이며,이는MILP해가정확함을나타냅니다。

최적의할당을플로팅합니다。중간업데이트를사용할때资产가제약조건을충족하지않을수있으므로资产가아니라xLinInt.xvars를사용합니다。

栏(xLinInt.xvars)网格包含(“资产指数”) ylabel (投资的比例)标题(“最优资产配置”

0이아닌자산할당이모두반연속범위 f n 0 0 0 1 f 一个 x 0 0 5 사이에있음을쉽게알수있습니다。

0이아닌자산이얼마나많습니까?제약조건은100개~ 150개사이0의이아닌자산이있다는것입니다。

总和(xLinInt.vvars)
ans = 100

이할당에대한예상수익과위험조정후수익값은어떻게될까요?

流(预期回报率为%g,风险调整回报率为%g.\n'...r * xLinInt.xvars, fval)
预期收益为0.000595107,风险调整收益为-0.0360382。

金融工具箱®에서포트폴리오최적화를위해특별히설계된기능을사용하면더욱정교한분석이가능합니다。반연속제약조건과구성종목수(基数)제약조건을직접다루기위해组合클래스를사용하는방법을보여주는예제는具有半连续和基数约束的投资组合优化(金融工具箱)항목을참조하십시오

관련항목