/*
* -------------------------------------------------------------------------
* $Id: Computer.java,v 1.2 2004/05/26 18:08:33 estewart Exp $
* -------------------------------------------------------------------------
* Copyright (c) 1999 Visual Numerics Inc. All Rights Reserved.
*
* This software is confidential information which is proprietary to
* and a trade secret of Visual Numerics, Inc. Use, duplication or
* disclosure is subject to the terms of an appropriate license
* agreement.
*
* VISUAL NUMERICS MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
* SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING
* BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. VISUAL
* NUMERICS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
* AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR
* ITS DERIVATIVES.
*--------------------------------------------------------------------------
*/
package com.imsl.demo.Efficient;
import com.imsl.math.*;
import com.imsl.stat.*;
/**
*
* @author Kim Ju-Yeol
* @created October 9, 2002
*/
public class Computer {
public static final int MODEL_EWMA = 0;
public static final int MODEL_SMA = 1;
public static final int MODEL_AHP = 2;
public static double[] results;
public static double[] expected_ret;
private static double[][] w_fCorelations1, w_fCorelations2, w_fCorelations3;
private static double[][] w_fCorelations4, w_fCorelations5, w_fCorelations6;
private static double[][] w_fCorelations7, w_fCorelations8, w_fCorelations9;
private static double[][] w_fCorelations10;
private static int N_VARIABLES = 2;
private static int N_OBSERVATIONS = 36;
private static double w_fRisk1, w_fRisk2, w_fRisk3, w_fRisk4, w_fRisk5;
private static int iMin;
private static int iMax;
private static double i_fDepositReturn;
private static double i_fDepositRisk;
private static double i_fLoanReturn;
private static double i_fLoanRisk;
private static double i_fInvestBondReturn;
private static double i_fInvestBondRisk;
private static double i_fCommBondReturn;
private static double i_fCommBondRisk;
private static double i_fEquityReturn;
private static double i_fEquityRisk;
private static int icount = 0;
private int model;
public Computer() {
model = MODEL_EWMA;
if ( 0 == icount ) {
calcCorrStrategy();
}
icount++;
}
public static double[] getResults() {
return results;
}
public static double[] getExpected_ret() {
return expected_ret;
}
public int getModel() {
return model;
}
public void setModel(int model) {
this.model = model;
switch (model) {
case MODEL_EWMA: {
setEWMA();
break;
}
case MODEL_SMA: {
setSMA();
break;
}
case MODEL_AHP: {
setAHP();
break;
}
}
}
public static double[] getReturn() {
double[] allReturnVal = {
i_fDepositReturn,
i_fLoanReturn,
i_fInvestBondReturn,
i_fCommBondReturn,
i_fEquityReturn};
return allReturnVal;
}
public static double[] getRisk() {
double[] allRiskVal = {
i_fDepositRisk,
i_fLoanRisk,
i_fInvestBondRisk,
i_fCommBondRisk,
i_fEquityRisk};
return allRiskVal;
}
public static String[] getCommodity() {
String[] allCommodity = {
"Deposit",
"Loan",
"InvestBond",
"CommBond",
"Equity"};
return allCommodity;
}
void initialize() {
setEWMA();
compute();
}
public void setEWMA() {
i_fDepositReturn = 5.92;
i_fDepositRisk = 3.60;
i_fLoanReturn = 9.95;
i_fLoanRisk = 3.21;
i_fInvestBondReturn = 7.73;
i_fInvestBondRisk = 4.38;
i_fCommBondReturn = 6.94;
i_fCommBondRisk = 4.52;
i_fEquityReturn = 48.54;
i_fEquityRisk = 31.33;
}
public void setSMA() {
i_fDepositReturn = 6.14;
i_fDepositRisk = 3.36;
i_fLoanReturn = 10.02;
i_fLoanRisk = 2.58;
i_fInvestBondReturn = 8.22;
i_fInvestBondRisk = 4.62;
i_fCommBondReturn = 7.58;
i_fCommBondRisk = 4.17;
i_fEquityReturn = 1.35;
i_fEquityRisk = 30.20;
}
public void setAHP() {
i_fDepositReturn = 4.97;
i_fDepositRisk = 3.60;
i_fLoanReturn = 11.0;
i_fLoanRisk = 3.21;
i_fInvestBondReturn = 7.70;
i_fInvestBondRisk = 4.38;
i_fCommBondReturn = 7.70;
i_fCommBondRisk = 4.52;
i_fEquityReturn = 45.00;
i_fEquityRisk = 31.33;
}
public void compute() {
int neq = 2;
int ncon = 2;
int nvar = 5;
double a[], b[], xlb[], xub[], obj;
int i;
a = new double[10];
b = new double[2];
xlb = new double[5];
xub = new double[5];
// Initial value of Constraints
double i_fDepositUpper = 0.;
double i_fDepositLower = 0.;
double i_fLoanUpper = 71.;
double i_fLoanLower = 0.;
double i_fInvestBondUpper = 74.;
double i_fInvestBondLower = 0.;
double i_fCommBondUpper = 86.;
double i_fCommBondLower = 0.;
double i_fEquityUpper = 60.;
double i_fEquityLower = 1.;
// End of Initialization
double dMin, dMax, fExpected_ret;
// Find a Min & Max using LinearProgramming
dMin = minFunction(i_fDepositReturn, i_fLoanReturn, i_fCommBondReturn, i_fInvestBondReturn, i_fEquityReturn,
i_fDepositLower, i_fLoanLower, i_fCommBondLower, i_fInvestBondLower, i_fEquityLower,
i_fDepositUpper, i_fLoanUpper, i_fCommBondUpper, i_fInvestBondUpper, i_fEquityUpper);
dMax = maxFunction(i_fDepositReturn, i_fLoanReturn, i_fCommBondReturn, i_fInvestBondReturn, i_fEquityReturn,
i_fDepositLower, i_fLoanLower, i_fCommBondLower, i_fInvestBondLower, i_fEquityLower,
i_fDepositUpper, i_fLoanUpper, i_fCommBondUpper, i_fInvestBondUpper, i_fEquityUpper);
iMin = (int) Math.ceil(dMin)*10;
iMax = (int) Math.floor(Math.abs(dMax))*10;
w_fRisk1 = i_fDepositRisk;
w_fRisk2 = i_fLoanRisk;
w_fRisk3 = i_fCommBondRisk;
w_fRisk4 = i_fInvestBondRisk;
w_fRisk5 = i_fEquityRisk;
i_fDepositLower *= (double)0.01;
i_fLoanLower *= (double)0.01;
i_fCommBondLower *= (double)0.01;
i_fInvestBondLower *= (double)0.01;
i_fEquityLower *= (double)0.01;
i_fDepositUpper *= (double)0.01;
i_fLoanUpper *= (double)0.01;
i_fCommBondUpper *= (double)0.01;
i_fInvestBondUpper *= (double)0.01;
i_fEquityUpper *= (double)0.01;
a[0] = i_fDepositReturn;
a[1] = i_fLoanReturn;
a[2] = i_fInvestBondReturn;
a[3] = i_fCommBondReturn;
a[4] = i_fEquityReturn;
a[5] = 1.0;
a[6] = 1.0;
a[7] = 1.0;
a[8] = 1.0;
a[9] = 1.0;
b[1] = 1.0;
xlb[0] = i_fDepositLower;
xlb[1] = i_fLoanLower;
xlb[2] = i_fInvestBondLower;
xlb[3] = i_fCommBondLower;
xlb[4] = i_fEquityLower;
xub[0] = i_fDepositUpper;
xub[1] = i_fLoanUpper;
xub[2] = i_fInvestBondUpper;
xub[3] = i_fCommBondUpper;
xub[4] = i_fEquityUpper;
results = new double[iMax-(iMin+1)];
expected_ret = new double[iMax-(iMin+1)];
// Simulate Using MinConGenLin
for (i = iMin + 1; i < iMax; i++) {
fExpected_ret = (double)i/10;
b[0] = fExpected_ret;
MinConGenLin.Function fcn = new MinConGenLin.Function() {
public double f(double[] x) {
return Math.sqrt(
Math.pow(w_fRisk1,2)*Math.pow(x[0],2)
+ Math.pow(w_fRisk2,2)*Math.pow(x[1],2)
+ Math.pow(w_fRisk3,2)*Math.pow(x[2],2)
+ Math.pow(w_fRisk4,2)*Math.pow(x[3],2)
+ Math.pow(w_fRisk5,2)*Math.pow(x[4],2)
+ 2 * (
w_fRisk1*w_fRisk2*w_fCorelations1[0][1]*x[0]*x[1]
+ w_fRisk1*w_fRisk3*w_fCorelations2[0][1]*x[0]*x[2]
+ w_fRisk1*w_fRisk4*w_fCorelations3[0][1]*x[0]*x[3]
+ w_fRisk1*w_fRisk5*w_fCorelations4[0][1]*x[0]*x[4]
+ w_fRisk2*w_fRisk3*w_fCorelations5[0][1]*x[1]*x[2]
+ w_fRisk2*w_fRisk4*w_fCorelations6[0][1]*x[1]*x[3]
+ w_fRisk2*w_fRisk5*w_fCorelations7[0][1]*x[1]*x[4]
+ w_fRisk3*w_fRisk4*w_fCorelations8[0][1]*x[2]*x[3]
+ w_fRisk3*w_fRisk5*w_fCorelations9[0][1]*x[2]*x[4]
+ w_fRisk4*w_fRisk5*w_fCorelations10[0][1]*x[3]*x[4])
);
}
};
MinConGenLin zf = new MinConGenLin(fcn, nvar, ncon, neq, a, b, xlb, xub);
try {
zf.solve();
} catch (MinConGenLin.ConstraintsInconsistentException e) {
System.out.println(e.getMessage());
} catch (MinConGenLin.VarBoundsInconsistentException e) {
System.out.println(e.getMessage());
} catch (MinConGenLin.ConstraintsNotSatisfiedException e) {
System.out.println(e.getMessage());
} catch (MinConGenLin.EqualityConstraintsException e) {
System.out.println(e.getMessage());
}
results[i-(iMin+1)] = zf.getObjectiveValue();
expected_ret[i-(iMin+1)] = fExpected_ret;
}
}
// Save the Results to File.
public void saveData(java.awt.Component parent, String fileName) {
try {
java.nio.DoubleBuffer db = java.nio.DoubleBuffer.allocate(results.length);
db.put(results[0]);
java.io.DataOutputStream dos = new java.io.DataOutputStream(new java.io.FileOutputStream(fileName));
for (int i=0; i< results.length; i++) {
dos.writeBytes(Double.toString(results[i]) + "\n");
}
dos.close();
javax.swing.JOptionPane.showMessageDialog(parent, "Finished Save As Data\nFilename is " + fileName,
"Save As Results", javax.swing.JOptionPane.INFORMATION_MESSAGE);
} catch (Exception e) {
String name = e.toString().substring(0,e.toString().indexOf(':'));
javax.swing.JOptionPane.showMessageDialog(parent, e.getMessage(), name, javax.swing.JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
}
}
// Caculate the Correlations for Strategy
public static void calcCorrStrategy() {
int i,j;
// Rates of Return for 3 years
double[] data = {
6.67,6.67,6.67,6.67,10.93,10.93,10.93,8.84,8.84,9.23,
10.93,8.84,9.23,15.45,8.84,9.23,15.45,9.23,15.45,15.45,
6.72,6.72,6.72,6.72,10.86,10.86,10.86,9.39,9.39,10.26,
10.86,9.39,10.26,-3.94,9.39,10.26,-3.94,10.26,-3.94,-3.94,
6.76,6.76,6.76,6.76,10.83,10.83,10.83,9.19,9.19,9.95,
10.83,9.19,9.95,-0.66,9.19,9.95,-0.66,9.95,-0.66,-0.66,
6.87,6.87,6.87,6.87,10.71,10.71,10.71,8.3,8.3,9.02,
10.71,8.3,9.02,-10.61,8.3,9.02,-10.61,9.02,-10.61,-10.61,
6.89,6.89,6.89,6.89,10.58,10.58,10.58,8.87,8.87,9.72,
10.58,8.87,9.72,14.66,8.87,9.72,14.66,9.72,14.66,14.66,
7.03,7.03,7.03,7.03,10.58,10.58,10.58,9.19,9.19,9.95,
10.58,9.19,9.95,3.62,9.19,9.95,3.62,9.95,3.62,3.62,
7.23,7.23,7.23,7.23,10.59,10.59,10.59,9.21,9.21,10.12,
10.59,9.21,10.12,-3.25,9.21,10.12,-3.25,10.12,-3.25,-3.25,
7.34,7.34,7.34,7.34,10.64,10.64,10.64,9.13,9.13,9.9,
10.64,9.13,9.9,-5.23,9.13,9.9,-5.23,9.9,-5.23,-5.23,
7.3,7.3,7.3,7.3,10.79,10.79,10.79,9.2,9.2,9.98,
10.79,9.2,9.98,-2.69,9.2,9.98,-2.69,9.98,-2.69,-2.69,
7.27,7.27,7.27,7.27,10.61,10.61,10.61,8.93,8.93,9.94,
10.61,8.93,9.94,-11.22,8.93,9.94,-11.22,9.94,-11.22,-11.22,
7.15,7.15,7.15,7.15,10.62,10.62,10.62,8.88,8.88,9.89,
10.62,8.88,9.89,-7.57,8.88,9.89,-7.57,9.89,-7.57,-7.57,
7.05,7.05,7.05,7.05,10.49,10.49,10.49,8.55,8.55,9.37,
10.49,8.55,9.37,10.31,8.55,9.37,10.31,9.37,10.31,10.31,
7.07,7.07,7.07,7.07,10.51,10.51,10.51,8.31,8.31,9.17,
10.51,8.31,9.17,-0.13,8.31,9.17,-0.13,9.17,-0.13,-0.13,
7.02,7.02,7.02,7.02,10.41,10.41,10.41,8.36,8.36,8.98,
10.41,8.36,8.98,-9.28,8.36,8.98,-9.28,8.98,-9.28,-9.28,
6.86,6.86,6.86,6.86,10.43,10.43,10.43,8.44,8.44,9.04,
10.43,8.44,9.04,-13.53,8.44,9.04,-13.53,9.04,-13.53,-13.53,
6.95,6.95,6.95,6.95,10.51,10.51,10.51,7.96,7.96,8.59,
10.51,7.96,8.59,-12.01,7.96,8.59,-12.01,8.59,-12.01,-12.01,
6.86,6.86,6.86,6.86,10.53,10.53,10.53,7.36,7.36,8.35,
10.53,7.36,8.35,-0.73,7.36,8.35,-0.73,8.35,-0.73,-0.73,
6.82,6.82,6.82,6.82,10.41,10.41,10.41,7.11,7.11,8.13,
10.41,7.11,8.13,-3.25,7.11,8.13,-3.25,8.13,-3.25,-3.25,
6.71,6.71,6.71,6.71,10.45,10.45,10.45,7,7,7.38,
10.45,7,7.38,11.13,7,7.38,11.13,7.38,11.13,11.13,
6.12,6.12,6.12,6.12,10.34,10.34,10.34,6.42,6.42,6.77,
10.34,6.42,6.77,1.44,6.42,6.77,1.44,6.77,1.44,1.44,
5.83,5.83,5.83,5.83,10.26,10.26,10.26,7,7,7.69,
10.26,7,7.69,-8.34,7,7.69,-8.34,7.69,-8.34,-8.34,
5.79,5.79,5.79,5.79,10.1,10.1,10.1,7.48,7.48,8.05,
10.1,7.48,8.05,-2.5,7.48,8.05,-2.5,8.05,-2.5,-2.5,
5.79,5.79,5.79,5.79,9.99,9.99,9.99,7.04,7.04,7.37,
9.99,7.04,7.37,13.28,7.04,7.37,13.28,7.37,13.28,13.28,
5.74,5.74,5.74,5.74,9.89,9.89,9.89,7,7,7.1,
9.89,7,7.1,0.37,7,7.1,0.37,7.1,0.37,0.37,
5.62,5.62,5.62,5.62,9.78,9.78,9.78,6.35,6.35,6.89,
9.78,6.35,6.89,-8.09,6.35,6.89,-8.09,6.89,-8.09,-8.09,
5.2,5.2,5.2,5.2,9.51,9.51,9.51,6,6,6.55,
9.51,6,6.55,2.45,6,6.55,2.45,6.55,2.45,2.45,
4.93,4.93,4.93,4.93,9.26,9.26,9.26,5.92,5.92,5.95,
9.26,5.92,5.95,-11.22,5.92,5.95,-11.22,5.95,-11.22,-11.22,
4.58,4.58,4.58,4.58,9.07,9.07,9.07,5.63,5.63,6.59,
9.07,5.63,6.59,3.83,5.63,6.59,3.83,6.59,3.83,3.83,
4.59,4.59,4.59,4.59,8.92,8.92,8.92,6.19,6.19,6.99,
8.92,6.19,6.99,15.59,6.19,6.99,15.59,6.99,15.59,15.59,
4.63,4.63,4.63,4.63,8.91,8.91,8.91,6.54,6.54,7.04,
8.91,6.54,7.04,10.1,6.54,7.04,10.1,7.04,10.1,10.1,
4.66,4.66,4.66,4.66,8.9,8.9,8.9,6.59,6.59,6.97,
8.9,6.59,6.97,10.96,6.59,6.97,10.96,6.97,10.96,10.96,
5,5,5,5,8.78,8.78,8.78,6,6,6.68,
8.78,6,6.68,4.79,6,6.68,4.79,6.68,4.79,4.79,
4.95,4.95,4.95,4.95,8.79,8.79,8.79,6.58,6.58,7.07,
8.79,6.58,7.07,11.66,6.58,7.07,11.66,7.07,11.66,11.66,
5,5,5,5,8.8,8.8,8.8,7,7,7.11,
8.8,7,7.11,3.39,7,7.11,3.39,7.11,3.39,3.39,
5,5,5,5,8.85,8.85,8.85,6.89,6.89,7.08,
8.85,6.89,7.08,-5.79,6.89,7.08,-5.79,7.08,-5.79,-5.79,
5.1,5.1,5.1,5.1,9.05,9.05,9.05,6,6,7.2,
9.05,6,7.2,-6.88,6,7.2,-6.88,7.2,-6.88,-6.88
};
/* Data1 : Deposit - Loan
* Data2 : Deposit - Commodity Bond
* Data3 : Deposit - Investment Bond
* Data4 : Deposit - Equity Bond
* Data5 : Loan - Commodity Bond
* Data6 : Loan - Investment Bond
* Data7 : Loan - Equity Bond
* Data8 : Commodity Bond - Investment Bond
* Data9 : Commodity Bond - Equity Bond
* Data10 : Investment Bond - Equity Bond
*/
double[][] data1, data2, data3, data4, data5,data6, data7, data8, data9, data10;
data1 = new double[N_OBSERVATIONS][N_VARIABLES];
data2 = new double[N_OBSERVATIONS][N_VARIABLES];
data3 = new double[N_OBSERVATIONS][N_VARIABLES];
data4 = new double[N_OBSERVATIONS][N_VARIABLES];
data5 = new double[N_OBSERVATIONS][N_VARIABLES];
data6 = new double[N_OBSERVATIONS][N_VARIABLES];
data7 = new double[N_OBSERVATIONS][N_VARIABLES];
data8 = new double[N_OBSERVATIONS][N_VARIABLES];
data9 = new double[N_OBSERVATIONS][N_VARIABLES];
data10 = new double[N_OBSERVATIONS][N_VARIABLES];
for (i = 0; i < N_OBSERVATIONS; i++) {
for (j=0; j < N_VARIABLES; j++) {
data1[i][j] = data[j*10+i*20];
data2[i][j] = data[j*10+i*20+1];
data3[i][j] = data[j*10+i*20+2];
data4[i][j] = data[j*10+i*20+3];
data5[i][j] = data[j*10+i*20+4];
data6[i][j] = data[j*10+i*20+5];
data7[i][j] = data[j*10+i*20+6];
data8[i][j] = data[j*10+i*20+7];
data9[i][j] = data[j*10+i*20+8];
data10[i][j] = data[j*10+i*20+9];
}
}
// Find Corelations for analysis
Covariances co1 = new Covariances(data1);
Covariances co2 = new Covariances(data2);
Covariances co3 = new Covariances(data3);
Covariances co4 = new Covariances(data4);
Covariances co5 = new Covariances(data5);
Covariances co6 = new Covariances(data6);
Covariances co7 = new Covariances(data7);
Covariances co8 = new Covariances(data8);
Covariances co9 = new Covariances(data9);
Covariances co10 = new Covariances(data10);
try {
w_fCorelations1 = co1.compute(Covariances.CORRELATION_MATRIX);
w_fCorelations2 = co2.compute(Covariances.CORRELATION_MATRIX);
w_fCorelations3 = co3.compute(Covariances.CORRELATION_MATRIX);
w_fCorelations4 = co4.compute(Covariances.CORRELATION_MATRIX);
w_fCorelations5 = co5.compute(Covariances.CORRELATION_MATRIX);
w_fCorelations6 = co6.compute(Covariances.CORRELATION_MATRIX);
w_fCorelations7 = co7.compute(Covariances.CORRELATION_MATRIX);
w_fCorelations8 = co8.compute(Covariances.CORRELATION_MATRIX);
w_fCorelations9 = co9.compute(Covariances.CORRELATION_MATRIX);
w_fCorelations10 = co10.compute(Covariances.CORRELATION_MATRIX);
} catch (Covariances.NonnegativeFreqException e) {
System.out.println(e.getMessage());
} catch (Covariances.NonnegativeWeightException e) {
System.out.println(e.getMessage());
} catch (Covariances.TooManyObsDeletedException e) {
System.out.println(e.getMessage());
} catch (Covariances.MoreObsDelThanEnteredException e) {
System.out.println(e.getMessage());
} catch (Covariances.DiffObsDeletedException e) {
System.out.println(e.getMessage());
}
}
// Calculate a Minimum using LinearProgramming
public static double minFunction(
double i_fReturn1, double i_fReturn2, double i_fReturn3, double i_fReturn4, double i_fReturn5,
double i_fLower1, double i_fLower2, double i_fLower3, double i_fLower4, double i_fLower5,
double i_fUpper1, double i_fUpper2, double i_fUpper3, double i_fUpper4, double i_fUpper5) {
double[][] a = {{1.0, 1.0, 1.0, 1.0, 1.0}};
double[] b = {1.0};
double xlb[] = {i_fLower1*(double)0.01, i_fLower2*(double)0.01, i_fLower3*(double)0.01, i_fLower4*(double)0.01, i_fLower5*(double)0.01};
double xub[] = {i_fUpper1*(double)0.01, i_fUpper2*(double)0.01, i_fUpper3*(double)0.01, i_fUpper4*(double)0.01, i_fUpper5*(double)0.01};
double[] c = {i_fReturn1, i_fReturn2, i_fReturn3, i_fReturn4, i_fReturn5};
LinearProgramming zf = new LinearProgramming(a, b, c);
zf.setLowerBound(xlb);
zf.setUpperBound(xub);
try {
zf.solve();
} catch (LinearProgramming.BoundsInconsistentException e) {
System.out.println(e.getMessage());
} catch (LinearProgramming.NumericDifficultyException e) {
System.out.println(e.getMessage());
} catch (SingularMatrixException e) {
System.out.println(e.getMessage());
}
double obj = zf.getOptimalValue();
return obj;
}
// Calculate a Maximum using LinearProgramming
public static double maxFunction(
double i_fReturn1, double i_fReturn2, double i_fReturn3, double i_fReturn4, double i_fReturn5,
double i_fLower1, double i_fLower2, double i_fLower3, double i_fLower4, double i_fLower5,
double i_fUpper1, double i_fUpper2, double i_fUpper3, double i_fUpper4, double i_fUpper5) {
double[][] a = {{1.0, 1.0, 1.0, 1.0, 1.0}};
double[] b = {1.0};
double xlb[] = {i_fLower1*(double)0.01, i_fLower2*(double)0.01, i_fLower3*(double)0.01, i_fLower4*(double)0.01, i_fLower5*(double)0.01};
double xub[] = {i_fUpper1*(double)0.01, i_fUpper2*(double)0.01, i_fUpper3*(double)0.01, i_fUpper4*(double)0.01, i_fUpper5*(double)0.01};
double[] c = {-(i_fReturn1), -(i_fReturn2), -(i_fReturn3), -(i_fReturn4), -(i_fReturn5)};
LinearProgramming zf = new LinearProgramming(a, b, c);
zf.setLowerBound(xlb);
zf.setUpperBound(xub);
try {
zf.solve();
} catch (LinearProgramming.BoundsInconsistentException e) {
System.out.println(e.getMessage());
} catch (LinearProgramming.NumericDifficultyException e) {
System.out.println(e.getMessage());
} catch (SingularMatrixException e) {
System.out.println(e.getMessage());
}
double obj = zf.getOptimalValue();
return obj;
}
}