miqcp02.gms : Test of correctness of solvestat

Description

This test os based on the GAMS Model Library qmeanvar. It caused Xpress to crash
on Windows for some time.

Contributor: Lutz Westermann


Small Model of Type : MIQCP


Category : GAMS Test library


Main file : miqcp02.gms

$title Test of correctness of solvestat (MIQCP02,SEQ=561)

$onText
This test os based on the GAMS Model Library qmeanvar. It caused Xpress to crash
on Windows for some time.

Contributor: Lutz Westermann
$offText


Set  i  securities  / cn, fr, gr, jp, sw, uk, us /;  alias (i,j) ;

Table  q(i,j)   covariance matrix

            cn      fr      gr      jp      sw      uk      us
    cn    42.18
    fr    20.18   70.89
    gr    10.88   21.58   25.51
    jp     5.30   15.41    9.60   22.33
    sw    12.32   23.24   22.63   10.32   30.01
    uk    23.84   23.80   13.22   10.46   16.36   42.23
    us    17.41   12.62    4.70    1.00    7.20    9.90   16.42 ;

*  we will continue to use only the lower triangle of the q-matrix
*  and adjust the off diagonal entries to give the correct results.

q(i,j) = 2*q(j,i) ;  q(i,i) = q(i,i)/2;


Scalars  tau   bounding parameter on turnover of current holdings  /0.3 /;

Set pd  portfolio data labels  /
          old       current holdings fraction of the portfolio
          umin      minimum increase of holdings fraction of security i
          umax      maximum increase of holdings fraction of security i
          lmin      minimum decrease of holdings fraction of security i
          lmax      maximum decrease of holdings fraction of security i  /


Table    bdata(i,pd)    portfolio data and trading restrictions
*                    - increase -        - decrease -
              old    umin    umax        lmin    lmax
        cn    0.2    0.03    0.11        0.02    0.30
        fr    0.2    0.04    0.10        0.02    0.15
        gr    0.0    0.04    0.07        0.04    0.10
        jp    0.0    0.03    0.11        0.04    0.10
        sw    0.2    0.03    0.20        0.04    0.10
        uk    0.2    0.03    0.10        0.04    0.15
        us    0.2    0.03    0.10        0.04    0.30    ;

bdata(i,'lmax') = min(bdata(i,'old'),bdata(i,'lmax'));
Abort$(abs(sum(i, bdata(i,'old'))-1) >= 1e5) 'error in bdata', bdata;

Variables
    var       variance of portfolio
    x(i)      fraction of portfolio of current holdings of i
    xi(i)     fraction of portfolio increase
    xd(i)     fraction of portfolio decrease
    y(i)      binary switch for increasing current holdings of i

Binary variable y;
positive variables x, xi, xd;

Equations  budget     budget constraint
           turnover   restrict maximum turnover of portfolio
           maxinc(i)  bound of maximum lot increase of fraction of i
           mininc(i)  bound of minimum lot increase of fraction of i
           xdef(i)    final portfolio definition
           vardef     variance definition;

budget..   sum(i, x(i))  =e=  1 ;
xdef(i)..  x(i) =e= bdata(i,'old') - xd(i) + xi(i);
maxinc(i)..  xi(i)  =l=  bdata(i,'umax')*y(i) ;
mininc(i)..  xi(i)  =g=  bdata(i,'umin')*y(i) ;
turnover.. sum(i, xi(i)) =l=  tau ;
vardef..  var =e= sum((i,j), x(i)*q(i,j)*x(j));

Model minvar / all /;
Solve minvar min var using miqcp;
abort$(minvar.solvestat <> %solveStat.normalCompletion%) 'Wrong Solvestat';