qp7.gms : Standard QP Model - conic programming formulation

Description

```Illustrates the use of conic formulation for quadratic
programs by implementing rotated quadratic cones.

For the original model in quadratic programming format

The quadratic component x^T*CoVar(s,t)*x is modeled as:

(|d|-1)*x^T*CoVar(s,t)*x = x^Tdev(s,d)^T*dev(t,d)*x = ||Dx||^2
= sum(d, w_i^2) with w = Dx
:= 2*p*q

which leads to the formulation in this model whose last constraint is

Optional inputs:
--numdays    investment period in number of days (default: 31).
Days: 1-100
--numstocks  number of stocks invested (default: 51)
Stocks: 1-170
```

Small Model of Type : QCP

Category : GAMS Model library

Main file : qp7.gms   includes :  qpdata.inc

``````\$title Standard QP Model - conic formulation (QP7,SEQ=271)

\$onText
Illustrates the use of conic formulation for quadratic
programs by implementing rotated quadratic cones.

For the original model in quadratic programming format

The quadratic component x^T*CoVar(s,t)*x is modeled as:

(|d|-1)*x^T*CoVar(s,t)*x = x^Tdev(s,d)^T*dev(t,d)*x = ||Dx||^2
= sum(d, w_i^2) with w = Dx
:= 2*p*q

which leads to the formulation in this model whose last constraint is

Optional inputs:
--numdays    investment period in number of days (default: 31).
Days: 1-100
--numstocks  number of stocks invested (default: 51)
Stocks: 1-170

Andersen, E, MOSEK Optimization Tools Manual

Kalvelagen, E, Model Building with GAMS. forthcoming

Keywords: quadratic constraint programming, conic optimization, finance
\$offText

* Set default number of days and number of stocks
\$if not set numdays    \$set numdays   31
\$if not set numstocks  \$set numstocks 51

\$include qpdata.inc

Set
d(days)   'selected days'
s(stocks) 'selected stocks';

Alias (s,t);

* Select subset of stocks and periods
d(days)   = ord(days) > 1 and ord(days) < %numdays%;
s(stocks) = ord(stocks) < %numstocks%;

Parameter
mean(stocks)     'mean of daily return'
dev(stocks,days) 'deviations'
totmean          'total mean return';

mean(s)  = sum(d, return(s,d))/card(d);
dev(s,d) = return(s,d) - mean(s);
totmean  = sum(s, mean(s))/(card(s));

Variable
z         'objective variable'
x(stocks) 'investments'
w(days)   'intermediate variable for rotated cone'
p         'intermediate variable for rotated cone'
q         'intermediate variable for rotated cone';

Positive Variable x, p, q;

Equation
obj         'objective'
budget
retcon      'return constraint'
wcone(days)
qone        'conic constraint'

obj..       z     =e=  2/(card(d) - 1)*p;

wcone(d)..  w(d)  =e=  sum(s, x(s)*dev(s,d));

* This is really awful:
qone..      q     =e=  1;

* Explicit cone syntax for MOSEK
* rcone..  p + q =c=  sum(d, w(d));

rcone..  2*p*q =g= sum(d, sqr(w(d)));

budget.. sum(s, x(s))         =e= 1.0;

retcon.. sum(s, mean(s)*x(s)) =g= totmean*1.25;

Model qp7 / all /;

solve qp7 using qcp minimizing z;

display x.l;
``````
GAMS Development Corp.
GAMS Software GmbH

General Information and Sales
U.S. (+1) 202 342-0180
Europe: (+49) 221 949-9170