Compilation and program execution
If you have followed the standard installation procedure of Xpress Optimizer and BCL, you may compile this file with the following command under Windows (note that it is important to use the flag /MD):
cl /MD /I%XPRESSDIR%\include %XPRESSDIR%\lib\xprs.lib foliolp.cpp
For Linux or Solaris use
cc -D_REENTRANT -I${XPRESSDIR}/include -L${XPRESSDIR}/lib foliolp.C -o foliolp -lxprs
For other systems please refer to the example makefile provided with the corresponding distribution.
Running the resulting program will generate the following output:
Reading Problem FolioLP Problem Statistics 3 ( 0 spare) rows 10 ( 0 spare) structural columns 19 ( 0 spare) non-zero elements Global Statistics 0 entities 0 sets 0 set members Maximizing LP FolioLP Original problem has: 3 rows 10 cols 19 elements Presolved problem has: 3 rows 10 cols 19 elements Its Obj Value S Ninf Nneg Sum Inf Time 0 42.600000 D 2 0 .000000 0 5 14.066667 D 0 0 .000000 0 Uncrunching matrix Optimal solution found Dual solved problem 5 simplex iterations in 0s Final objective : 1.406666666666667e+01 Max primal violation (abs / rel) : 0.0 / 0.0 Max dual violation (abs / rel) : 0.0 / 0.0 Max complementarity viol. (abs / rel) : 0.0 / 0.0 All values within tolerances Problem status: optimal Total return: 14.0667 0: 30% 1: 0% 2: 20% 3: 0% 4: 6.66667% 5: 30% 6: 0% 7: 0% 8: 13.3333% 9: 0%
The upper half of this display is the log of Xpress Optimizer: the size of the matrix, 3 rows (i.e. constraints) and 10 columns (i.e. decision variables), and the log of the LP solution algorithm (here: `D' for dual Simplex). The lower half is the output produced by our program: the maximum return of 14.0667 is obtained with a portfolio consisting of shares 1, 3, 5, 6, and 9. 30% of the total amount are spent in shares 1 and 6 each, 20% in 3, 13.3333% in 9 and 6.6667% in 5. It is easily verified that all constraints are indeed satisfied: we have 50% of North-American shares (1 and 3) and 33.33% of high-risk shares (3 and 9).
It is possible to modify the amount of output printing by BCL and Xpress Optimizer by adding the following line before the start of the optimization:
p.setMsgLevel(1);
This setting will disable all output (including warnings) from BCL and Xpress Optimizer, with the exception of error messages. The possible values for the printing level range from 0 to 4. In Chapter 13 we show how to access the Optimizer control parameters directly which, for instance, allows fine tuning the message display.