![]() | |||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||
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
folioodbc.mos (!****************************************************** Mosel Example Problems ====================== file folioodbc.mos `````````````````` Modeling a small LP problem to perform portfolio optimization. -- Parameters, data input through ODBC, result output through ODBC -- IMPORTANT: If this example is run more than once, you need to delete the solution data from the previous run in the database. The mysql database 'folio' is not provided. You can create the database contents by executing model 'genfoliodb.mos'. (c) 2008 Fair Isaac Corporation author: S.Heipcke, Mar. 2006, rev. Aug. 2023 *******************************************************!) model "Portfolio optimization with LP (ODBC)" uses "mmxprs", "mmodbc" parameters ! DATAFILE = "folio.mdb" ! Access database with problem data ! DATAFILE = "DSN=mysql;DB=folio" ! MySQL database with problem data DATAFILE = "folio.sqlite" ! SQLite database with problem data DBDATA = "folio" ! Database table with problem data DBSOL = "foliosol" ! Table for solution data 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 RET: array(SHARES) of real ! Estimated return in investment RISK: array(SHARES) of boolean ! List of high-risk values among shares NA: array(SHARES) of boolean ! List of shares issued in N.-America end-declarations ! Data input from database initializations from "mmodbc.odbc:" + DATAFILE [RET,RISK,NA] as DBDATA 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 SHARES | RISK(s)) frac(s) <= MAXRISK ! Minimum amount of North-American values sum(s in SHARES | NA(s)) 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 writeln("Total return: ", getobjval) forall(s in SHARES) writeln(strfmt(s,-12), ": \t", strfmt(getsol(frac(s))*100,5,2), "%") ! Solution output to database declarations Solfrac: array(SHARES) of real ! Solution values end-declarations forall(s in SHARES) Solfrac(s):= getsol(frac(s))*100 (! Cleaning up previous results: uncomment if the example is run more than once SQLconnect(DATAFILE) if not getparam("SQLsuccess"): setioerr("Database connection failed") SQLexecute("delete from " + DBSOL) SQLdisconnect !) ! Data output to database initializations to "mmodbc.odbc:" + DATAFILE Solfrac as DBSOL end-initializations end-model
| |||||||||||||||||||||||||||||
© Copyright 2025 Fair Isaac Corporation. |