Code Samples - Getting Started
This section contains selected code samples relevant to the initial example model formulation and its first run in Xpress Insight.
Formulating the Model
foliodata.mos
model "Portfolio optimization with LP" uses "mmxprs" ! Use Xpress-Optimizer parameters DATAFILE= "folio.dat" ! File with problem data OUTFILE= "result.dat" ! Output file MAXRISK = 1/3 ! Max. investment into high-risk values MAXVAL = 0.3 ! Max. investment per share MINAM = 0.5 ! Min. investment into N.-American values end-parameters declarations SHARES: set of string ! Set of shares RISK: set of string ! Set of high-risk values among shares NA: set of string ! Set of shares issued in N.-America RET: array(SHARES) of real ! Estimated return in investment end-declarations initializations from DATAFILE RISK RET NA end-initializations declarations frac: array(SHARES) of mpvar ! Fraction of capital used per share end-declarations ! Objective: total return Return:= sum(s in SHARES) RET(s)*frac(s) ! Limit the percentage of high-risk values sum(s in RISK) frac(s) <= MAXRISK ! Minimum amount of North-American values sum(s in NA) frac(s) >= MINAM ! Spend all the capital sum(s in SHARES) frac(s) = 1 ! Upper bounds on the investment per share forall(s in SHARES) frac(s) <= MAXVAL ! Solve the problem maximize(Return) ! Solution printing to a file fopen(OUTFILE, F_OUTPUT) writeln("Total return: ", getobjval) forall(s in SHARES) writeln(strfmt(s,-12), ": \t", strfmt(getsol(frac(s))*100,5,2), "%") fclose(F_OUTPUT) end-model
folio.dat
! Data file for ‘foliodata.mos’ RET: [("treasury") 5 ("hardware") 17 ("theater") 26 ("telecom") 12 ("brewery") 8 ("highways") 9 ("cars") 7 ("bank") 6 ("software") 31 ("electronics") 21 ] RISK: ["hardware" "theater" "telecom" "software" "electronics"] NA: ["treasury" "hardware" "theater" "telecom"]
Making the Minimum Mandatory Changes
foliodata.mos
model "Portfolio optimization with LP" uses "mminsight" ! Mandatory for Xpress Insight uses "mmxprs" ! Use Xpress-Optimizer parameters DATAFILE= "folio.dat" ! File with problem data OUTFILE= "result.dat" ! Output file MAXRISK = 1/3 ! Max. investment into high-risk values MAXVAL = 0.3 ! Max. investment per share MINAM = 0.5 ! Min. investment into N.-American values end-parameters declarations SHARES: set of string ! Set of shares RISK: set of string ! Set of high-risk values among shares NA: set of string ! Set of shares issued in N.-America RET: array(SHARES) of real ! Estimated return in investment end-declarations forward procedure datainput case insightgetmode of INSIGHT_MODE_LOAD: do datainput exit(0) end-do INSIGHT_MODE_RUN: insightpopulate else datainput end-case procedure datainput initializations from DATAFILE RISK RET NA end-initializations end-procedure declarations frac: array(SHARES) of mpvar ! Fraction of capital used per share end-declarations ! Objective: total return Return:= sum(s in SHARES) RET(s)*frac(s) ! Limit the percentage of high-risk values sum(s in RISK) frac(s) <= MAXRISK ! Minimum amount of North-American values sum(s in NA) frac(s) >= MINAM ! Spend all the capital sum(s in SHARES) frac(s) = 1 ! Upper bounds on the investment per share forall(s in SHARES) frac(s) <= MAXVAL ! Solve the problem insightmaximize(Return) ! Solution printing to a file fopen(OUTFILE, F_OUTPUT) writeln("Total return: ", getobjval) forall(s in SHARES) writeln(strfmt(s,-12), ": \t", strfmt(getsol(frac(s))*100,5,2), "%") fclose(F_OUTPUT) end-model