Portfolio Optimization (optqpe02)
/***************************************************************/
/* */
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: optqpe02 */
/* TITLE: Portfolio Optimization (optqpe02) */
/* PRODUCT: OR */
/* SYSTEM: ALL */
/* KEYS: OR */
/* PROCS: OPTQP */
/* DATA: */
/* */
/* SUPPORT: UPDATE: */
/* REF: */
/* MISC: Example 2 from the OPTQP chapter of */
/* Mathematical Programming. */
/* */
/***************************************************************/
data portdata;
input field1 $ field2 $ field3 $ field4 field5 $ field6 @;
datalines;
NAME . PORT . . .
ROWS . . . . .
N OBJ.FUNC . . . .
L BUDGET . . . .
G GROWTH . . . .
COLUMNS . . . . .
. X1 BUDGET 1.0 GROWTH 0.05
. X2 BUDGET 1.0 GROWTH -.20
. X3 BUDGET 1.0 GROWTH 0.15
. X4 BUDGET 1.0 GROWTH 0.30
RHS . . . . .
. RHS BUDGET 10000 . .
. RHS GROWTH 1000 . .
RANGES . . . . .
BOUNDS . . . . .
QUADOBJ . . . . .
. X1 X1 0.16 . .
. X1 X2 -.10 . .
. X1 X3 -.10 . .
. X1 X4 -.10 . .
. X2 X2 0.32 . .
. X2 X3 -.04 . .
. X2 X4 -.04 . .
. X3 X3 0.70 . .
. X3 X4 0.12 . .
. X4 X4 0.70 . .
ENDATA . . . . .
;
title1 'The OPTQP Procedure';
proc optqp data=portdata
primalout = portpout
printlevel = 0
dualout = portdout;
run;
title2 'Primal Solution';
proc print data=portpout label;
run;
data possdata;
input field1 $ field2 $ field3 $ field4 field5 $ field6 @;
datalines;
NAME . PORTSS . . .
ROWS . . . . .
N OBJ.FUNC . . . .
L R1 . . . .
G R2 . . . .
COLUMNS . . . . .
. X1 R1 1.0 R2 0.05
. X2 R1 1.0 R2 -.20
. X3 R1 1.0 R2 0.15
. X4 R1 1.0 R2 0.30
RHS . . . . .
. RHS R1 10000 . .
. RHS R2 1000 . .
RANGES . . . . .
BOUNDS . . . . .
FR BND1 X1 . . .
FR BND1 X2 . . .
FR BND1 X3 . . .
FR BND1 X4 . . .
QUADOBJ . . . . .
. X1 X1 0.16 . .
. X1 X2 -.10 . .
. X1 X3 -.10 . .
. X1 X4 -.10 . .
. X2 X2 0.32 . .
. X2 X3 -.04 . .
. X2 X4 -.04 . .
. X3 X3 0.70 . .
. X3 X4 0.12 . .
. X4 X4 0.70 . .
ENDATA . . . . .
;
title1 'The OPTQP Procedure';
proc optqp data=possdata
primalout = posspout
printlevel = 0
dualout = possdout;
run;
title2 'Primal Solution';
proc print data=posspout label;
run;