| |||||||||
Folio - Examples from 'Getting Started' Description Different versions of a portfolio optimization problem. Basic modelling and solving tasks:
Source Files By clicking on a file name, a preview is opened at the bottom of this page. Data Files folioarr.c /******************************************************** Xpress-BCL C Example Problems ============================= file folioarr.c ``````````````` Modeling a small LP problem to perform portfolio optimization. -- Array-based formulation -- (c) 2008-2024 Fair Isaac Corporation author: S.Heipcke, Dec. 2003, rev. Mar. 2011 ********************************************************/ #include <stdio.h> #include "xprb.h" #define NSHARES 10 /* Number of shares */ #define NRISK 5 /* Number of high-risk shares */ #define NNA 4 /* Number of North-American shares */ double RET[] = {5,17,26,12,8,9,7,6,31,21}; /* Estimated return in investment */ int RISK[] = {1,2,3,8,9}; /* High-risk values among shares */ int NA[] = {0,1,2,3}; /* Shares issued in N.-America */ int main(int argc, char **argv) { int s; XPRBprob prob; XPRBctr Risk,Na,Return,Cap; XPRBarrvar frac; /* Fraction of capital used per share */ prob = XPRBnewprob("FolioLP"); /* Initialize a new problem in BCL */ /* Create the decision variables */ frac = XPRBnewarrvar(prob, NSHARES, XPRB_PL, "frac", 0, XPRB_INFINITY); /* Objective: total return */ Return = XPRBnewarrsum(prob, "Return", frac, RET, XPRB_N, 0); XPRBsetobj(prob,Return); /* Set the objective function */ /* Limit the percentage of high-risk values */ Risk = XPRBnewctr(prob, "Risk", XPRB_L); for(s=0;s<NRISK;s++) XPRBaddterm(Risk, frac[RISK[s]], 1); XPRBaddterm(Risk, NULL, 1.0/3); /* Minimum amount of North-American values */ Na = XPRBnewctr(prob, "NA", XPRB_G); for(s=0;s<NNA;s++) XPRBaddterm(Na, frac[NA[s]], 1); XPRBaddterm(Na, NULL, 0.5); /* Spend all the capital */ Cap = XPRBnewsum(prob, "Cap", frac, XPRB_E, 1); /* Upper bounds on the investment per share */ for(s=0;s<NSHARES;s++) XPRBsetub(frac[s], 0.3); /* Solve the problem */ XPRBsetsense(prob, XPRB_MAXIM); XPRBlpoptimize(prob, ""); /* Solution printing */ if(XPRBgetlpstat(prob)==XPRB_LP_OPTIMAL) { printf("Total return: %g\n", XPRBgetobjval(prob)); for(s=0;s<NSHARES;s++) printf(" %d : %g%%\n", s, XPRBgetsol(frac[s])*100); } return 0; } | |||||||||
© Copyright 2024 Fair Isaac Corporation. |