Initializing help system before first use

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