| |||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||
|
Folio - Modelling examples from 'Getting started' Description
Source Files By clicking on a file name, a preview is opened at the bottom of this page. Data Files
foliomip1.mos
(!******************************************************
Mosel Example Problems
======================
file foliomip1.mos
``````````````````
Modeling a small MIP problem
to perform portfolio optimization.
-- Limiting the total number of assets --
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, Aug. 2003, rev. Apr. 2021
*******************************************************!)
model "Portfolio optimization with MIP"
uses "mmxprs"
parameters
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
MAXNUM = 4 ! Max. number of different assets
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 "folio.dat"
RISK RET NA
end-initializations
declarations
frac: array(SHARES) of mpvar ! Fraction of capital used per share
buy: array(SHARES) of mpvar ! 1 if asset is in portfolio, 0 otherwise
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
! Limit the total number of assets
sum(s in SHARES) buy(s) <= MAXNUM
forall(s in SHARES) do
buy(s) is_binary ! Turn variables into binaries
frac(s) <= buy(s) ! Linking the variables
end-do
! Uncomment this line to see the Optimizer log
setparam("XPRS_VERBOSE",true) ! Enable logging output
! Uncomment the following lines to obtain a branch-and-bound tree
(!
setparam("XPRS_CUTSTRATEGY",0) ! Disable automatic cut generation
setparam("XPRS_HEUREMPHASIS",0) ! Disable MIP heuristics
setparam("XPRS_PRESOLVE",0) ! Disable presolve
!)
! Solve the problem
maximize(Return)
! Solution printing
writeln("Total return: ", getobjval)
forall(s in SHARES)
writeln(s, ": ", getsol(frac(s))*100, "% (", getsol(buy(s)), ")")
end-model
| |||||||||||||||||||||||||||||
| © Copyright 2025 Fair Isaac Corporation. |