FICO Xpress Optimization Examples Repository
 FICO Optimization Community FICO Xpress Optimization Home

Folio - Embedding examples from 'Getting started'

Description
Simple embedding tasks for a portfolio optimization problem:
• executing a Mosel model (folioexec.bas)
• parameterized model execution (folioparam.bas)

Source Files

Data Files

foliodata.mos

```(!******************************************************
Mosel Example Problems
======================

file foliodata.mos
``````````````````
Modeling a small LP problem
to perform portfolio optimization.
-- Parameters, data input from file,
result output to file --

(c) 2008 Fair Isaac Corporation
author: S.Heipcke, Aug. 2003, rev. June 2018
*******************************************************!)

model "Portfolio optimization with LP"
uses "mmxprs"

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

public 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

public declarations
frac: array(SHARES) of mpvar       ! Fraction of capital used per share
Return: linctr                     ! Objective function
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

```