Re: [ojAlgo-user] Markowitz Problem
Mathematics, linear algebra and optimisation
Brought to you by:
apete
From: Matteo B. <mat...@gm...> - 2013-04-02 15:09:28
|
Hi Anders now the results seem to be perfect. Very good job! I'll check some similar situation in next days and keep you informed if I'll find other problems. Thank you matteo On Tue, Apr 2, 2013 at 3:35 PM, Anders Peterson <an...@op...>wrote: > I've tweaked the underlying optimization algorithm so that it now produces > {0.5, 0.5} as the optimal solution for the case with target return 0.11. > > Your covariance matrix looks like this: > > 0.0036 0.0018 > 0.0018 0.0009 > > and thus the correlations matrix is: > > 1 1 > 1 1 > > Is this intended/expected? > > > /Anders > > > On 31 mar 2013, at 11:38, Anders Peterson <an...@op...> wrote: > > > Yes, ojAlgo seems to have a problem solving that. I'll have to look into > exactly what goes on. > > > > The covariance matrix is positive semidefinite, right? That should be > enough, but positive definite would be better. > > > > You should always check the optimisation state. In this case it is > APPROXIMATE. Suppose it should be FAILED or something, but anything less > that OPTIMAL would indicate a problem with the underlying optimisation > algorithm. > > > > Regarding how to create matrices; I think you should read this: > > http://code.google.com/p/ojalgo/wiki/GettingStartedLinearAlgebra > > > > /Anders > > > > > > On 29 mar 2013, at 13:19, Matteo Baccan <mat...@gm...> wrote: > > > >> Hi > >> > >> we have a problem with MarkowitzModel. > >> I have produced a little source that explain the problem. > >> > >> We have set 3 different TargetReturn on the same data.. > >> > >> With targets near to the best end worst target return, the > MarkowitzModel works fine. > >> With targets within the interval of best and worst return, seem that > the MarkowitzModel > >> is not able to find a correct list of weights. > >> > >> If you try this program and use target of 0.08 or 0.13 or 0.12 you can > see a correct solution. > >> With a target of 0.10 MarkowitzModel is not able to find a valid > solution. > >> > >> It's a OJAlgo bug or is a problem in my implementation? > >> > >> All the best > >> Matteo Baccan > >> > >> > >> > >> import java.math.BigDecimal; > >> import java.util.List; > >> > >> import org.ojalgo.access.AccessUtils; > >> import org.ojalgo.constant.BigMath; > >> import org.ojalgo.finance.portfolio.MarketEquilibrium; > >> import org.ojalgo.finance.portfolio.MarkowitzModel; > >> import org.ojalgo.matrix.BasicMatrix; > >> import org.ojalgo.matrix.BigMatrix; > >> import org.ojalgo.matrix.PrimitiveMatrix; > >> import org.ojalgo.matrix.store.BigDenseStore; > >> import org.ojalgo.matrix.store.MatrixStore; > >> import org.ojalgo.matrix.store.PrimitiveDenseStore; > >> import org.ojalgo.optimisation.Optimisation; > >> import org.ojalgo.optimisation.quadratic.QuadraticSolver; > >> > >> public class MarkowitzProblems > >> { > >> > >> public static void main(String[] args) > >> { > >> > >> //BigDecimal nTarget = new BigDecimal("0.08"); // OK > >> // 0.0 > >> // 1.0 > >> > >> BigDecimal nTarget = new BigDecimal("0.10"); // ERROR > >> // -0.9999 > >> // 1.9999 > >> > >> //BigDecimal nTarget = new BigDecimal("0.13"); // OK > >> // 0.8333 > >> // 0.1667 > >> > >> double[][] cm= > >> {{0.00360000, 0.001800000000}, > >> {0.001800000000, 0.00090000}} > >> ; > >> > >> int assetNum = cm.length; > >> > >> final int row = cm.length; > >> if (row > 0) { > >> final int col = cm[0].length; > >> final MatrixStore<BigDecimal> a = > BigDenseStore.FACTORY.makeZero(row, col); > >> BasicMatrix covariances = BigMatrix.FACTORY.copy(a); > >> > >> for (int i = 0; i < row; i++) { > >> for (int j = 0; j < col; j++) { > >> covariances = covariances.replace(i, j, cm[i][j]); > >> } > >> } > >> > >> double nRisk = 1000.0; > >> final BigDecimal riskAversion = new BigDecimal(nRisk); > >> final MarketEquilibrium marketEquilibrium = new > MarketEquilibrium(covariances, riskAversion); > >> > >> final MatrixStore<BigDecimal> ret_matrix = > BigDenseStore.FACTORY.makeZero(assetNum, 1); > >> BasicMatrix expectedExcessReturns1 = > BigMatrix.FACTORY.copy(ret_matrix); > >> > >> expectedExcessReturns1 = expectedExcessReturns1.replace(0, 0, 0.1400); > >> expectedExcessReturns1 = expectedExcessReturns1.replace(1, 0, 0.0800); > >> > >> final MarkowitzModel markowitzModel = new > MarkowitzModel(marketEquilibrium, expectedExcessReturns1); > >> > >> markowitzModel.setLowerLimit(0, new BigDecimal(0.0000)); > >> markowitzModel.setUpperLimit(0, new BigDecimal(1.0000)); > >> markowitzModel.setLowerLimit(1, new BigDecimal(0.0000)); > >> markowitzModel.setUpperLimit(1, new BigDecimal(1.0000)); > >> > >> boolean bShort = false; > >> markowitzModel.setShortingAllowed(bShort); > >> markowitzModel.setTargetReturn(nTarget); > >> > >> final List<BigDecimal> re = markowitzModel.getWeights(); > >> for (int nn = 0; nn < re.size(); nn++) { > >> System.out.println( re.get(nn) ); > >> } > >> } > >> } > >> > >> } > >> > >> > ------------------------------------------------------------------------------ > >> Own the Future-Intel(R) Level Up Game Demo Contest 2013 > >> Rise to greatness in Intel's independent game demo contest. Compete > >> for recognition, cash, and the chance to get your game on Steam. > >> $5K grand prize plus 10 genre and skill prizes. Submit your demo > >> by 6/6/13. > http://altfarm.mediaplex.com/ad/ck/12124-176961-30367-2_______________________________________________ > >> ojAlgo-user mailing list > >> ojA...@li... > >> https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > > > > > ------------------------------------------------------------------------------ > > Own the Future-Intel(R) Level Up Game Demo Contest 2013 > > Rise to greatness in Intel's independent game demo contest. Compete > > for recognition, cash, and the chance to get your game on Steam. > > $5K grand prize plus 10 genre and skill prizes. Submit your demo > > by 6/6/13. http://altfarm.mediaplex.com/ad/ck/12124-176961-30367-2 > > _______________________________________________ > > ojAlgo-user mailing list > > ojA...@li... > > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > > > > > > ------------------------------------------------------------------------------ > Own the Future-Intel(R) Level Up Game Demo Contest 2013 > Rise to greatness in Intel's independent game demo contest. Compete > for recognition, cash, and the chance to get your game on Steam. > $5K grand prize plus 10 genre and skill prizes. Submit your demo > by 6/6/13. http://altfarm.mediaplex.com/ad/ck/12124-176961-30367-2 > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > -- Matteo Baccan http://www.baccan.it http://www.moonlab.it http://www.jobcrawler.it http://www.paginelibere.it http://www.cvcrawler.it http://www.newscrawler.it http://casa.newscrawler.it http://www.autocrawler.it http://www.annunciveloci.it |