/******************************************************** Xpress-BCL Java Example Problems ================================ file xbrecurs.java `````````````````` Recursion solving a non-linear financial planning problem The problem is to solve net(t) = Payments(t) - interest(t) balance(t) = balance(t-1) - net(t) interest(t) = (92/365) * balance(t) * interest_rate where balance(0) = 0 balance[T] = 0 for interest_rate (c) 2008 Fair Isaac Corporation author: S.Heipcke, 2001, rev. Mar. 2011 ********************************************************/ import java.lang.*; import com.dashoptimization.*; public class xbrecurs { static final int T=6; /****DATA****/ static double X = 0.00; /* An INITIAL GUESS as to interest rate x */ static final double[] B = /* {796.35, 589.8918, 398.1351, 201.5451, 0.0, 0.0}; */ {1,1,1,1,1,1}; /* An INITIAL GUESS as to balances b(t) */ static final double[] P = {-1000, 0, 0, 0, 0, 0}; /* Payments */ static final double[] R = {206.6, 206.6, 206.6, 206.6, 206.6, 0}; /* " */ static final double[] V = {-2.95, 0, 0, 0, 0, 0}; /* " */ static XPRBvar[] b; /* Balance */ static XPRBvar x; /* Interest rate */ static XPRBvar dx; /* Change to x */ static XPRBctr[] interest; static XPRBctr ctrd; /***********************************************************************/ static void modFinNLP(XPRBprob p) throws XPRSexception { XPRBvar[] i; /* Interest */ XPRBvar[] n; /* Net */ XPRBvar[] epl, emn; /* + and - deviations */ XPRBexpr cobj, le; int t; /****VARIABLES****/ b = new XPRBvar[T]; i = new XPRBvar[T]; n = new XPRBvar[T]; epl = new XPRBvar[T]; emn = new XPRBvar[T]; for(t=0;t0) p.newCtr("bal", b[t].eql(b[t-1].add(n[t].mul(-1))) ); else p.newCtr("bal", b[t].eql(n[t].mul(-1)) ); } interest = new XPRBctr[T]; for(t=1;t0) { ct++; basis=p.saveBasis(); /* Save the current basis */ /* Get the solution values for b and x */ for(t=1;t