ojalgo-user Mailing List for oj! Algorithms (Page 6)
Mathematics, linear algebra and optimisation
Brought to you by:
apete
You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
|
Feb
(1) |
Mar
|
Apr
(14) |
May
(1) |
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
(1) |
2005 |
Jan
(3) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
(1) |
Sep
(3) |
Oct
|
Nov
|
Dec
(1) |
2006 |
Jan
(1) |
Feb
(1) |
Mar
(1) |
Apr
|
May
(1) |
Jun
(2) |
Jul
|
Aug
(5) |
Sep
|
Oct
(3) |
Nov
(4) |
Dec
(2) |
2007 |
Jan
(8) |
Feb
(1) |
Mar
(2) |
Apr
(11) |
May
(6) |
Jun
|
Jul
(10) |
Aug
(2) |
Sep
|
Oct
(4) |
Nov
|
Dec
(11) |
2008 |
Jan
(22) |
Feb
(4) |
Mar
(2) |
Apr
(4) |
May
(2) |
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
(6) |
Nov
(17) |
Dec
(5) |
2009 |
Jan
(15) |
Feb
(2) |
Mar
(2) |
Apr
(3) |
May
(4) |
Jun
(5) |
Jul
(9) |
Aug
(2) |
Sep
|
Oct
(5) |
Nov
(14) |
Dec
|
2010 |
Jan
(3) |
Feb
(5) |
Mar
(2) |
Apr
(19) |
May
|
Jun
|
Jul
|
Aug
(2) |
Sep
|
Oct
(5) |
Nov
(3) |
Dec
|
2011 |
Jan
|
Feb
(1) |
Mar
(7) |
Apr
(10) |
May
(1) |
Jun
(15) |
Jul
(1) |
Aug
|
Sep
|
Oct
(13) |
Nov
(9) |
Dec
(11) |
2012 |
Jan
|
Feb
(1) |
Mar
(9) |
Apr
(23) |
May
(16) |
Jun
(9) |
Jul
(13) |
Aug
|
Sep
(4) |
Oct
(1) |
Nov
(1) |
Dec
|
2013 |
Jan
|
Feb
(12) |
Mar
(7) |
Apr
(24) |
May
|
Jun
(7) |
Jul
(4) |
Aug
|
Sep
(3) |
Oct
(16) |
Nov
(7) |
Dec
(3) |
2014 |
Jan
(22) |
Feb
(1) |
Mar
(1) |
Apr
|
May
(2) |
Jun
(3) |
Jul
(4) |
Aug
(4) |
Sep
(1) |
Oct
(2) |
Nov
(6) |
Dec
(2) |
2015 |
Jan
(11) |
Feb
(10) |
Mar
(1) |
Apr
(9) |
May
|
Jun
|
Jul
(1) |
Aug
(4) |
Sep
(6) |
Oct
(3) |
Nov
(15) |
Dec
(4) |
2016 |
Jan
(6) |
Feb
|
Mar
(18) |
Apr
(5) |
May
(9) |
Jun
(3) |
Jul
(5) |
Aug
(2) |
Sep
(5) |
Oct
(2) |
Nov
|
Dec
(5) |
2017 |
Jan
(4) |
Feb
(3) |
Mar
|
Apr
|
May
(12) |
Jun
(1) |
Jul
(4) |
Aug
|
Sep
(3) |
Oct
(1) |
Nov
|
Dec
(1) |
2018 |
Jan
(5) |
Feb
|
Mar
(1) |
Apr
(1) |
May
(1) |
Jun
|
Jul
(4) |
Aug
(1) |
Sep
(8) |
Oct
|
Nov
|
Dec
(1) |
2019 |
Jan
|
Feb
(2) |
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2022 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Anders P. <an...@op...> - 2015-11-09 10:02:05
|
> On 9 nov. 2015, at 04:36, applyhhj <app...@16...> wrote: > > Thank you very much for your reply. The reason is that I need to extend a vector(n x 1) to a diagnoal matrix(n x n), however I declared all matrix vector as BasicMatrix so I need to know the exact type of the matrix to create a diagnoal matrix. If you need to create your own custom matrix types or more advanced algorithms then you should definitely use MatrixStore/PhysicalStore rather than BasicMatrix. > By the way will MatrixStore/PhysicalStore be faster than BasicMatrix in various operations? It gives you more options and control over what happens. > And is there any difference between MatrixStore and PhysicalStore? If details of these aspects are preseted in the Github wiki that would be great. 10s looking at the source code or reading the javadoc, and you would know the answer to that question. http://ojalgo.org/generated/org/ojalgo/matrix/store/PhysicalStore.html > Moreover I do not see any SpareMatrix in Ojalgo. Is there any way to create spareMatrix to accelerate matrix operations cause I need to operate on big spareMatrix such as diagnoal matrix? Thanks again! There is now - will be in v39. v39 will be released soon, and has some api-breaking changes. If you're starting out with ojAlgo now you should definitely get the latest snapshot downloads from SourceForge. (or work directly with the source repositories) https://github.com/optimatika/ojAlgo/wiki/v39 > Best Regards! > hjh > > 2015-11-09 > applyhhj > 发件人:Anders Peterson <an...@op...> > 发送时间:2015-11-08 18:48 > 主题:Re: [ojAlgo-user] how to get exact matrix type of a basicmatrix > 收件人:"ojalgo-user"<oja...@li...> > 抄送: > > You have to do instanceof on either the matrix or on one of the elements. > > > Why do you need to do this, or why don’t you know which type you have? > > If you consistently declare variables as ComplexMatrix then all operations will actually return ComplexMatrix rather than BasicMatrix. > > final BasicMatrix tmpOrg1 = PrimitiveMatrix.FACTORY.makeEye(3, 3); > final ComplexMatrix tmpOrg2 = ComplexMatrix.FACTORY.makeEye(3, 3); > > final BasicMatrix tmpBasic = tmpOrg1.transpose(); > final ComplexMatrix tmpComplex = tmpOrg2.transpose(); // The specific subclass is maintained > > > Even if you declare things as BasicMatrix rather than one of the specific implementations the underlying type will not change. It is possible to operate on two matrices of different types (add them together), in those cases it is always “this” that decides the type of the returned matrix. > > > Are you sure you want to use the BasicMatrix interface and its implementations? It’s what many users find first, and start using, but I believe most would be better off using the various MatrixStore/PhysicalStore implementations. With BasicMatrix there’s a lot less to worry about but also musch less flexibility in terms of what you can do. BigMatrix, ComplexMatrix and PrimitiveMatrix are immutable. That’s not what most users expect and consequently they use those classes inefficiently. > > Try both alternatives and see which one suits you best, > > /Anders > > > > On 8 nov. 2015, at 09:08, applyhhj <app...@16...> wrote: > > > > Hi everyone, > > Is there any way to tell wether a BasicMatrix is a PrimitiveMatrix or a ComplexMatrix? Thanks! > > > > Regards! > > hjh > > > > 2015-11-08 > > applyhhj > > ------------------------------------------------------------------------------ > > _______________________________________________ > > ojAlgo-user mailing list > > ojA...@li... > > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > ------------------------------------------------------------------------------ > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > ------------------------------------------------------------------------------ > Presto, an open source distributed SQL query engine for big data, initially > developed by Facebook, enables you to easily query your data on Hadoop in a > more interactive manner. Teradata is also now providing full enterprise > support for Presto. Download a free open source copy now. > http://pubads.g.doubleclick.net/gampad/clk?id=250295911&iu=/4140_______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user |
From: applyhhj<app...@16...> - 2015-11-09 03:36:41
|
Thank you very much for your reply. The reason is that I need to extend a vector(n x 1) to a diagnoal matrix(n x n), however I declared all matrix vector as BasicMatrix so I need to know the exact type of the matrix to create a diagnoal matrix. By the way will MatrixStore/PhysicalStore be faster than BasicMatrix in various operations? And is there any difference between MatrixStore and PhysicalStore? If details of these aspects are preseted in the Github wiki that would be great. Moreover I do not see any SpareMatrix in Ojalgo. Is there any way to create spareMatrix to accelerate matrix operations cause I need to operate on big spareMatrix such as diagnoal matrix? Thanks again! Best Regards! hjh 2015-11-09 applyhhj 发件人:Anders Peterson <an...@op...> 发送时间:2015-11-08 18:48 主题:Re: [ojAlgo-user] how to get exact matrix type of a basicmatrix 收件人:"ojalgo-user"<oja...@li...> 抄送: You have to do instanceof on either the matrix or on one of the elements. Why do you need to do this, or why don’t you know which type you have? If you consistently declare variables as ComplexMatrix then all operations will actually return ComplexMatrix rather than BasicMatrix. final BasicMatrix tmpOrg1 = PrimitiveMatrix.FACTORY.makeEye(3, 3); final ComplexMatrix tmpOrg2 = ComplexMatrix.FACTORY.makeEye(3, 3); final BasicMatrix tmpBasic = tmpOrg1.transpose(); final ComplexMatrix tmpComplex = tmpOrg2.transpose(); // The specific subclass is maintained Even if you declare things as BasicMatrix rather than one of the specific implementations the underlying type will not change. It is possible to operate on two matrices of different types (add them together), in those cases it is always “this” that decides the type of the returned matrix. Are you sure you want to use the BasicMatrix interface and its implementations? It’s what many users find first, and start using, but I believe most would be better off using the various MatrixStore/PhysicalStore implementations. With BasicMatrix there’s a lot less to worry about but also musch less flexibility in terms of what you can do. BigMatrix, ComplexMatrix and PrimitiveMatrix are immutable. That’s not what most users expect and consequently they use those classes inefficiently. Try both alternatives and see which one suits you best, /Anders > On 8 nov. 2015, at 09:08, applyhhj <app...@16...> wrote: > > Hi everyone, > Is there any way to tell wether a BasicMatrix is a PrimitiveMatrix or a ComplexMatrix? Thanks! > > Regards! > hjh > > 2015-11-08 > applyhhj > ------------------------------------------------------------------------------ > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user ------------------------------------------------------------------------------ _______________________________________________ ojAlgo-user mailing list ojA...@li... https://lists.sourceforge.net/lists/listinfo/ojalgo-user |
From: Anders P. <an...@op...> - 2015-11-08 10:48:24
|
You have to do instanceof on either the matrix or on one of the elements. Why do you need to do this, or why don’t you know which type you have? If you consistently declare variables as ComplexMatrix then all operations will actually return ComplexMatrix rather than BasicMatrix. final BasicMatrix tmpOrg1 = PrimitiveMatrix.FACTORY.makeEye(3, 3); final ComplexMatrix tmpOrg2 = ComplexMatrix.FACTORY.makeEye(3, 3); final BasicMatrix tmpBasic = tmpOrg1.transpose(); final ComplexMatrix tmpComplex = tmpOrg2.transpose(); // The specific subclass is maintained Even if you declare things as BasicMatrix rather than one of the specific implementations the underlying type will not change. It is possible to operate on two matrices of different types (add them together), in those cases it is always “this” that decides the type of the returned matrix. Are you sure you want to use the BasicMatrix interface and its implementations? It’s what many users find first, and start using, but I believe most would be better off using the various MatrixStore/PhysicalStore implementations. With BasicMatrix there’s a lot less to worry about but also musch less flexibility in terms of what you can do. BigMatrix, ComplexMatrix and PrimitiveMatrix are immutable. That’s not what most users expect and consequently they use those classes inefficiently. Try both alternatives and see which one suits you best, /Anders > On 8 nov. 2015, at 09:08, applyhhj <app...@16...> wrote: > > Hi everyone, > Is there any way to tell wether a BasicMatrix is a PrimitiveMatrix or a ComplexMatrix? Thanks! > > Regards! > hjh > > 2015-11-08 > applyhhj > ------------------------------------------------------------------------------ > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user |
From: applyhhj<app...@16...> - 2015-11-08 08:08:51
|
Hi everyone, Is there any way to tell wether a BasicMatrix is a PrimitiveMatrix or a ComplexMatrix? Thanks! Regards! hjh 2015-11-08 applyhhj |
From: applyhhj<app...@16...> - 2015-11-07 03:56:39
|
That's great. Thank you very much! And by the way Ojalgo is really fast! :) Regards! hjh 2015-11-07 applyhhj 发件人:Anders Peterson <an...@op...> 发送时间:2015-11-06 20:22 主题:Re: [ojAlgo-user] how to manipulate complex matrix 收件人:"ojalgo-user"<oja...@li...> 抄送: I wrote those utilities for you - they’re already checked in. If you wait a few days there will be a new snapshot release at SourceForge, and not too far away (I think) v39 will be released. /Anders > On 6 nov. 2015, at 12:37, applyhhj <app...@16...> wrote: > > Thank you very much for your kind response. I will consider this approach. By the way, if there is any method that can retrieve the real and imaginary part of a complex matrix to seperate primitive matrices, that will be great. Thanks again. > > Best regards! > hjh > > 2015-11-06 > applyhhj > 发件人:Anders Peterson <an...@op...> > 发送时间:2015-11-06 19:29 > 主题:Re: [ojAlgo-user] how to manipulate complex matrix > 收件人:"ojalgo-user"<oja...@li...> > 抄送: > > Welcome to ojAlgo, > > I can’t think of a direct way to do that. You need to write a little utility like this: > > public static PrimitiveDenseStore getComplexModulus(final Access2D<ComplexNumber> arg) { > > final long tmpRows = arg.countRows(); > final long tmpColumns = arg.countColumns(); > final long tmpCount = tmpRows * tmpColumns; > > final PrimitiveDenseStore retVal = PrimitiveDenseStore.FACTORY.makeZero(tmpRows, tmpColumns); > > for (long i = 0; i < tmpCount; i++) { > retVal.set(i, arg.get(i).getModulus()); > } > > return retVal; > } > > > I’m thinking I should add methods like these to MatrixUtils. > > > /Anders > > > > On 6 nov. 2015, at 10:56, applyhhj <app...@16...> wrote: > > > > Hello, ojalgo community! > > > > I am new to ojalgo. Could any one tell me how to do the following operation? > > > > 1. How to get the modulus of a complex matrix? I mean calculate modulus of each element in a complex matrix and store it in a matrix of double type, not complex type. > > > > 2. Similarly how to get the angle of a matrix? > > > > Thank you very much! > > > > Regards! > > hjh > > > > > > 2015-11-06 > > applyhhj > > ------------------------------------------------------------------------------ > > _______________________________________________ > > ojAlgo-user mailing list > > ojA...@li... > > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > ------------------------------------------------------------------------------ > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > ------------------------------------------------------------------------------ > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user ------------------------------------------------------------------------------ _______________________________________________ ojAlgo-user mailing list ojA...@li... https://lists.sourceforge.net/lists/listinfo/ojalgo-user |
From: Anders P. <an...@op...> - 2015-11-06 12:22:44
|
I wrote those utilities for you - they’re already checked in. If you wait a few days there will be a new snapshot release at SourceForge, and not too far away (I think) v39 will be released. /Anders > On 6 nov. 2015, at 12:37, applyhhj <app...@16...> wrote: > > Thank you very much for your kind response. I will consider this approach. By the way, if there is any method that can retrieve the real and imaginary part of a complex matrix to seperate primitive matrices, that will be great. Thanks again. > > Best regards! > hjh > > 2015-11-06 > applyhhj > 发件人:Anders Peterson <an...@op...> > 发送时间:2015-11-06 19:29 > 主题:Re: [ojAlgo-user] how to manipulate complex matrix > 收件人:"ojalgo-user"<oja...@li...> > 抄送: > > Welcome to ojAlgo, > > I can’t think of a direct way to do that. You need to write a little utility like this: > > public static PrimitiveDenseStore getComplexModulus(final Access2D<ComplexNumber> arg) { > > final long tmpRows = arg.countRows(); > final long tmpColumns = arg.countColumns(); > final long tmpCount = tmpRows * tmpColumns; > > final PrimitiveDenseStore retVal = PrimitiveDenseStore.FACTORY.makeZero(tmpRows, tmpColumns); > > for (long i = 0; i < tmpCount; i++) { > retVal.set(i, arg.get(i).getModulus()); > } > > return retVal; > } > > > I’m thinking I should add methods like these to MatrixUtils. > > > /Anders > > > > On 6 nov. 2015, at 10:56, applyhhj <app...@16...> wrote: > > > > Hello, ojalgo community! > > > > I am new to ojalgo. Could any one tell me how to do the following operation? > > > > 1. How to get the modulus of a complex matrix? I mean calculate modulus of each element in a complex matrix and store it in a matrix of double type, not complex type. > > > > 2. Similarly how to get the angle of a matrix? > > > > Thank you very much! > > > > Regards! > > hjh > > > > > > 2015-11-06 > > applyhhj > > ------------------------------------------------------------------------------ > > _______________________________________________ > > ojAlgo-user mailing list > > ojA...@li... > > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > ------------------------------------------------------------------------------ > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > ------------------------------------------------------------------------------ > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user |
From: applyhhj<app...@16...> - 2015-11-06 11:38:06
|
Thank you very much for your kind response. I will consider this approach. By the way, if there is any method that can retrieve the real and imaginary part of a complex matrix to seperate primitive matrices, that will be great. Thanks again. Best regards! hjh 2015-11-06 applyhhj 发件人:Anders Peterson <an...@op...> 发送时间:2015-11-06 19:29 主题:Re: [ojAlgo-user] how to manipulate complex matrix 收件人:"ojalgo-user"<oja...@li...> 抄送: Welcome to ojAlgo, I can’t think of a direct way to do that. You need to write a little utility like this: public static PrimitiveDenseStore getComplexModulus(final Access2D<ComplexNumber> arg) { final long tmpRows = arg.countRows(); final long tmpColumns = arg.countColumns(); final long tmpCount = tmpRows * tmpColumns; final PrimitiveDenseStore retVal = PrimitiveDenseStore.FACTORY.makeZero(tmpRows, tmpColumns); for (long i = 0; i < tmpCount; i++) { retVal.set(i, arg.get(i).getModulus()); } return retVal; } I’m thinking I should add methods like these to MatrixUtils. /Anders > On 6 nov. 2015, at 10:56, applyhhj <app...@16...> wrote: > > Hello, ojalgo community! > > I am new to ojalgo. Could any one tell me how to do the following operation? > > 1. How to get the modulus of a complex matrix? I mean calculate modulus of each element in a complex matrix and store it in a matrix of double type, not complex type. > > 2. Similarly how to get the angle of a matrix? > > Thank you very much! > > Regards! > hjh > > > 2015-11-06 > applyhhj > ------------------------------------------------------------------------------ > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user ------------------------------------------------------------------------------ _______________________________________________ ojAlgo-user mailing list ojA...@li... https://lists.sourceforge.net/lists/listinfo/ojalgo-user |
From: Anders P. <an...@op...> - 2015-11-06 11:29:22
|
Welcome to ojAlgo, I can’t think of a direct way to do that. You need to write a little utility like this: public static PrimitiveDenseStore getComplexModulus(final Access2D<ComplexNumber> arg) { final long tmpRows = arg.countRows(); final long tmpColumns = arg.countColumns(); final long tmpCount = tmpRows * tmpColumns; final PrimitiveDenseStore retVal = PrimitiveDenseStore.FACTORY.makeZero(tmpRows, tmpColumns); for (long i = 0; i < tmpCount; i++) { retVal.set(i, arg.get(i).getModulus()); } return retVal; } I’m thinking I should add methods like these to MatrixUtils. /Anders > On 6 nov. 2015, at 10:56, applyhhj <app...@16...> wrote: > > Hello, ojalgo community! > > I am new to ojalgo. Could any one tell me how to do the following operation? > > 1. How to get the modulus of a complex matrix? I mean calculate modulus of each element in a complex matrix and store it in a matrix of double type, not complex type. > > 2. Similarly how to get the angle of a matrix? > > Thank you very much! > > Regards! > hjh > > > 2015-11-06 > applyhhj > ------------------------------------------------------------------------------ > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user |
From: applyhhj<app...@16...> - 2015-11-06 09:57:03
|
Hello, ojalgo community! I am new to ojalgo. Could any one tell me how to do the following operation? 1. How to get the modulus of a complex matrix? I mean calculate modulus of each element in a complex matrix and store it in a matrix of double type, not complex type. 2. Similarly how to get the angle of a matrix? Thank you very much! Regards! hjh 2015-11-06 applyhhj |
From: Anders P. <an...@op...> - 2015-10-23 15:15:05
|
To clarify when/if you’re working with immutable matrices you have to this: tmpTensor[9] = tmpTensor[9].add(56, 0, tmpDifference); > On 23 okt. 2015, at 17:03, Anders Peterson <an...@op...> wrote: > > You could do something like this: > > BasicMatrix[] tmpTensor = new BasicMatrix[10] {….}; > > BasicMatrix tmpDifference = PrimitiveMatrix.FACTORY.getBuilder(3, 1600).fillAll(3.14).build(); > > tmpTensor[9].add(56, 0, tmpDifference); > > That will change rows 56, 57 and 58 of matrix 9. > > It doesn’t cost you (CPU) anything now. Depending on what you do it may cost you later. > > > I’m guessing BasicMatrix is not a good choice for you. Doesn’t sound like immutable objects suit your needs. Try working with PrimitiveDenseStore instead. > > PrimitiveDenseStore[] tmpTensor = new PrimitiveDenseStore[10] {….}; > > > Did you read the "Getting Started: Linear Algebra” wiki page? > > https://github.com/optimatika/ojAlgo/wiki/Getting-Started > > > In the org.ojalgo.array package there are classes supporting 1, 2 or “any” dimensional arrays of double, BigDecimal, ComplexNumber, Quaternion and RationalNumber. The arrays can be sparse or dense and arbitrarily large. You can directly do this: > > ArrayAnyD<Double> tmpTensor3D = ArrayAnyD.PRIMITIVE.makeZero(1000, 1600, 10); > > > I must admit that the code supporting the any-dimensional features is underdeveloped and not very well tested. 99% seems to only need 1 or 2 dimensional arrays (vectors and matrices). If the ArrayAnyD class doesn’t have what you need it can be added. > > > /Anders > > > >> On 23 okt. 2015, at 15:53, Stathis Maroulis <sta...@gm...> wrote: >> >> Hello, >> I'm currently trying to implement a 3D Tensor library, using Ojalgo. Every time i want to change some elements of the matrices I am using a builder. But i think I'm losing a lot of (CPU) time doing this. >> For example when if have a 1000x1600x10 tensor (an array of ten 1000x16000 BasicMatrix matrices) and what to change some rows, i have to rebuilt the whole tensor. Am I missing something or this is the way we do this? >> Thanks for you time. >> >> >> Stathis Maroulis >> ------------------------------------------------------------------------------ >> _______________________________________________ >> ojAlgo-user mailing list >> ojA...@li... >> https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > ------------------------------------------------------------------------------ > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user |
From: Anders P. <an...@op...> - 2015-10-23 15:03:23
|
You could do something like this: BasicMatrix[] tmpTensor = new BasicMatrix[10] {….}; BasicMatrix tmpDifference = PrimitiveMatrix.FACTORY.getBuilder(3, 1600).fillAll(3.14).build(); tmpTensor[9].add(56, 0, tmpDifference); That will change rows 56, 57 and 58 of matrix 9. It doesn’t cost you (CPU) anything now. Depending on what you do it may cost you later. I’m guessing BasicMatrix is not a good choice for you. Doesn’t sound like immutable objects suit your needs. Try working with PrimitiveDenseStore instead. PrimitiveDenseStore[] tmpTensor = new PrimitiveDenseStore[10] {….}; Did you read the "Getting Started: Linear Algebra” wiki page? https://github.com/optimatika/ojAlgo/wiki/Getting-Started In the org.ojalgo.array package there are classes supporting 1, 2 or “any” dimensional arrays of double, BigDecimal, ComplexNumber, Quaternion and RationalNumber. The arrays can be sparse or dense and arbitrarily large. You can directly do this: ArrayAnyD<Double> tmpTensor3D = ArrayAnyD.PRIMITIVE.makeZero(1000, 1600, 10); I must admit that the code supporting the any-dimensional features is underdeveloped and not very well tested. 99% seems to only need 1 or 2 dimensional arrays (vectors and matrices). If the ArrayAnyD class doesn’t have what you need it can be added. /Anders > On 23 okt. 2015, at 15:53, Stathis Maroulis <sta...@gm...> wrote: > > Hello, > I'm currently trying to implement a 3D Tensor library, using Ojalgo. Every time i want to change some elements of the matrices I am using a builder. But i think I'm losing a lot of (CPU) time doing this. > For example when if have a 1000x1600x10 tensor (an array of ten 1000x16000 BasicMatrix matrices) and what to change some rows, i have to rebuilt the whole tensor. Am I missing something or this is the way we do this? > Thanks for you time. > > > Stathis Maroulis > ------------------------------------------------------------------------------ > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user |
From: Stathis M. <sta...@gm...> - 2015-10-23 13:53:08
|
Hello, I'm currently trying to implement a 3D Tensor library, using Ojalgo. Every time i want to change some elements of the matrices I am using a builder. But i think I'm losing a lot of (CPU) time doing this. For example when if have a 1000x1600x10 tensor (an array of ten 1000x16000 BasicMatrix matrices) and what to change some rows, i have to rebuilt the whole tensor. Am I missing something or this is the way we do this? Thanks for you time. Stathis Maroulis |
From: Anders P. <an...@op...> - 2015-09-23 06:52:07
|
There is no need to report issues both here and at GitHub. https://github.com/optimatika/ojAlgo/issues/10 > On 22 sep 2015, at 20:46, Anders Peterson <an...@op...> wrote: > > Do you think this was the same problem? > > https://sourceforge.net/p/ojalgo/mailman/message/34442573/ > > > >> On 22 sep 2015, at 18:09, Harsha Veeramachaneni <hv...@gm...> wrote: >> >> Hi, >> >> I recently upgraded to v38.2 of Ojalgo for solving some quadratic programs. It seems that somewhere in the code there is an assumption that whenever there are inequality constraints there must be at least one equality constraint. My problem has a bunch of inequality constraints but no equality constraints and running it gives a "divide by zero" error. Again, this only seems to manifest itself when there are inequality constraints but no equality constraints. >> >> I have reproduced it below with a simple example. >> >> scala> val P = Array(Array(1.0, 0), Array(0, 1.0)) >> >> val c = Array(0.0, 0.0) >> >> val Q = PrimitiveDenseStore.FACTORY.rows(P:_*).builder().build() >> >> val C = PrimitiveDenseStore.FACTORY.columns(c).builder().build() >> >> val myBuilderI = new ConvexSolver.Builder(Q, C) >> >> val ai = Array(Array(1.0, 1.0)) >> >> val rhs = Array(1.0) >> >> myBuilderI.inequalities(PrimitiveDenseStore.FACTORY.rows(ai:_*).builder().build(), PrimitiveDenseStore.FACTORY.columns(rhs).builder().build()) >> >> val prob = myBuilderI.build() >> >> val solved = prob.solve() >> >> scala> java.lang.ArithmeticException: / by zero >> >> at org.ojalgo.matrix.store.PrimitiveDenseStore.fillByMultiplying(PrimitiveDenseStore.java:1199) >> >> at org.ojalgo.matrix.store.MatrixStore.multiply(MatrixStore.java:438) >> >> at org.ojalgo.matrix.store.MatrixStore.multiply(MatrixStore.java:432) >> >> at org.ojalgo.optimisation.convex.ActiveSetSolver.performIteration(ActiveSetSolver.java:412) >> >> at org.ojalgo.optimisation.convex.ConvexSolver.solve(ConvexSolver.java:310) >> >> at org.ojalgo.optimisation.Optimisation$Solver.solve(Optimisation.java:383) >> >> ------------------------------------------------------------------------------ >> _______________________________________________ >> ojAlgo-user mailing list >> ojA...@li... >> https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > ------------------------------------------------------------------------------ > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > |
From: Anders P. <an...@op...> - 2015-09-22 18:46:43
|
Do you think this was the same problem? https://sourceforge.net/p/ojalgo/mailman/message/34442573/ > On 22 sep 2015, at 18:09, Harsha Veeramachaneni <hv...@gm...> wrote: > > Hi, > > I recently upgraded to v38.2 of Ojalgo for solving some quadratic programs. It seems that somewhere in the code there is an assumption that whenever there are inequality constraints there must be at least one equality constraint. My problem has a bunch of inequality constraints but no equality constraints and running it gives a "divide by zero" error. Again, this only seems to manifest itself when there are inequality constraints but no equality constraints. > > I have reproduced it below with a simple example. > > scala> val P = Array(Array(1.0, 0), Array(0, 1.0)) > > val c = Array(0.0, 0.0) > > val Q = PrimitiveDenseStore.FACTORY.rows(P:_*).builder().build() > > val C = PrimitiveDenseStore.FACTORY.columns(c).builder().build() > > val myBuilderI = new ConvexSolver.Builder(Q, C) > > val ai = Array(Array(1.0, 1.0)) > > val rhs = Array(1.0) > > myBuilderI.inequalities(PrimitiveDenseStore.FACTORY.rows(ai:_*).builder().build(), PrimitiveDenseStore.FACTORY.columns(rhs).builder().build()) > > val prob = myBuilderI.build() > > val solved = prob.solve() > > scala> java.lang.ArithmeticException: / by zero > > at org.ojalgo.matrix.store.PrimitiveDenseStore.fillByMultiplying(PrimitiveDenseStore.java:1199) > > at org.ojalgo.matrix.store.MatrixStore.multiply(MatrixStore.java:438) > > at org.ojalgo.matrix.store.MatrixStore.multiply(MatrixStore.java:432) > > at org.ojalgo.optimisation.convex.ActiveSetSolver.performIteration(ActiveSetSolver.java:412) > > at org.ojalgo.optimisation.convex.ConvexSolver.solve(ConvexSolver.java:310) > > at org.ojalgo.optimisation.Optimisation$Solver.solve(Optimisation.java:383) > > ------------------------------------------------------------------------------ > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user |
From: Harsha V. <hv...@gm...> - 2015-09-22 16:09:50
|
Hi, I recently upgraded to v38.2 of Ojalgo for solving some quadratic programs. It seems that somewhere in the code there is an assumption that whenever there are inequality constraints there must be at least one equality constraint. My problem has a bunch of inequality constraints but no equality constraints and running it gives a "divide by zero" error. Again, this only seems to manifest itself when there are inequality constraints but no equality constraints. I have reproduced it below with a simple example. scala> val P = Array(Array(1.0, 0), Array(0, 1.0)) val c = Array(0.0, 0.0) val Q = PrimitiveDenseStore.FACTORY.rows(P:_*).builder().build() val C = PrimitiveDenseStore.FACTORY.columns(c).builder().build() val myBuilderI = new ConvexSolver.Builder(Q, C) val ai = Array(Array(1.0, 1.0)) val rhs = Array(1.0) myBuilderI.inequalities(PrimitiveDenseStore.FACTORY.rows(ai:_*).builder().build(), PrimitiveDenseStore.FACTORY.columns(rhs).builder().build()) val prob = myBuilderI.build() val solved = prob.solve() scala> java.lang.ArithmeticException: / by zero at org.ojalgo.matrix.store.PrimitiveDenseStore.fillByMultiplying(PrimitiveDenseStore.java:1199) at org.ojalgo.matrix.store.MatrixStore.multiply(MatrixStore.java:438) at org.ojalgo.matrix.store.MatrixStore.multiply(MatrixStore.java:432) at org.ojalgo.optimisation.convex.ActiveSetSolver.performIteration(ActiveSetSolver.java:412) at org.ojalgo.optimisation.convex.ConvexSolver.solve(ConvexSolver.java:310) at org.ojalgo.optimisation.Optimisation$Solver.solve(Optimisation.java:383) |
From: Leaman, R. (NIH/NLM/N. [E] <rob...@ni...> - 2015-09-09 13:06:30
|
Thank you very much Anders. I appreciate both the bug fix and the explanation: knowing exactly what was needed made it much easier to implement the workaround. -Robert -----Original Message----- From: Anders Peterson [mailto:an...@op...] Sent: Tuesday, September 08, 2015 4:23 PM To: oja...@li... Subject: Re: [ojAlgo-user] Simple quadratic program throws a division by zero error Thanks for reporting this. You’re not doing anything wrong. ojAlgo failed to handle the case where all inequality constraints where “active” (zero slack). If you get the latest source code from SourceForge or GitHub the bug is fixed, and it will be in the next release. As you noted there was a simple workaround. Just add one simple obviously redundant inequality constraint. /Anders > On 8 sep 2015, at 16:35, Leaman, Robert (NIH/NLM/NCBI) [E] <rob...@ni...> wrote: > > Hi, > > I am relatively new to ojAlgo and to quadratic programming. I’ve had quite a bit of success as I try it out, but found one QP that throws an error but looks fine to me. I removed extraneous variables and reduced it to a small program that throws the same error. > > This is the program: > PrimitiveDenseStore tmpQ = PrimitiveDenseStore.FACTORY.rows(new > double[][] { { 2, 0 }, { 0, 2 } }); PrimitiveDenseStore tmpC = > PrimitiveDenseStore.FACTORY.rows(new double[][] { { 0, 0 } }); > PrimitiveDenseStore tmpAI = PrimitiveDenseStore.FACTORY.rows(new > double[][] { { -1, -1 } }); PrimitiveDenseStore tmpBI = > PrimitiveDenseStore.FACTORY.rows(new double[][] { { -1 } }); > ConvexSolver tmpSolver = new ConvexSolver.Builder(tmpQ, > tmpC.transpose()).inequalities(tmpAI, tmpBI).build(); > Optimisation.Result tmpResult = tmpSolver.solve(); > > The result is a division by zero error: > java.lang.ArithmeticException: / by zero at > org.ojalgo.matrix.store.PrimitiveDenseStore.fillByMultiplying(Primitiv > eDenseStore.java:1199) at > org.ojalgo.matrix.store.MatrixStore.multiply(MatrixStore.java:438) > at org.ojalgo.matrix.store.MatrixStore.multiply(MatrixStore.java:432) > at > org.ojalgo.optimisation.convex.ActiveSetSolver.performIteration(Active > SetSolver.java:412) at > org.ojalgo.optimisation.convex.ConvexSolver.solve(ConvexSolver.java:31 > 0) at > org.ojalgo.optimisation.Optimisation$Solver.solve(Optimisation.java:38 > 3) > > I calculate that the program should have a single minimum of 0.5 at the point (0.5, 0.5). In fact, ojAlgo does find this solution I get if I add at least one additional constraint; either x1>=0 or x2>=0, like this: > PrimitiveDenseStore tmpAI = PrimitiveDenseStore.FACTORY.rows(new > double[][] { { -1, -1 }, { 0, -1 } }); PrimitiveDenseStore tmpBI = > PrimitiveDenseStore.FACTORY.rows(new double[][] { { -1 }, { 0 } }); > > I’m wondering if someone could point out what (if anything) I’m doing wrong. > > Thank you, > Robert > ---------------------------------------------------------------------- > -------- _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user ------------------------------------------------------------------------------ _______________________________________________ ojAlgo-user mailing list ojA...@li... https://lists.sourceforge.net/lists/listinfo/ojalgo-user |
From: Anders P. <an...@op...> - 2015-09-08 20:22:53
|
Thanks for reporting this. You’re not doing anything wrong. ojAlgo failed to handle the case where all inequality constraints where “active” (zero slack). If you get the latest source code from SourceForge or GitHub the bug is fixed, and it will be in the next release. As you noted there was a simple workaround. Just add one simple obviously redundant inequality constraint. /Anders > On 8 sep 2015, at 16:35, Leaman, Robert (NIH/NLM/NCBI) [E] <rob...@ni...> wrote: > > Hi, > > I am relatively new to ojAlgo and to quadratic programming. I’ve had quite a bit of success as I try it out, but found one QP that throws an error but looks fine to me. I removed extraneous variables and reduced it to a small program that throws the same error. > > This is the program: > PrimitiveDenseStore tmpQ = PrimitiveDenseStore.FACTORY.rows(new double[][] { { 2, 0 }, { 0, 2 } }); > PrimitiveDenseStore tmpC = PrimitiveDenseStore.FACTORY.rows(new double[][] { { 0, 0 } }); > PrimitiveDenseStore tmpAI = PrimitiveDenseStore.FACTORY.rows(new double[][] { { -1, -1 } }); > PrimitiveDenseStore tmpBI = PrimitiveDenseStore.FACTORY.rows(new double[][] { { -1 } }); > ConvexSolver tmpSolver = new ConvexSolver.Builder(tmpQ, tmpC.transpose()).inequalities(tmpAI, tmpBI).build(); > Optimisation.Result tmpResult = tmpSolver.solve(); > > The result is a division by zero error: > java.lang.ArithmeticException: / by zero > at org.ojalgo.matrix.store.PrimitiveDenseStore.fillByMultiplying(PrimitiveDenseStore.java:1199) > at org.ojalgo.matrix.store.MatrixStore.multiply(MatrixStore.java:438) > at org.ojalgo.matrix.store.MatrixStore.multiply(MatrixStore.java:432) > at org.ojalgo.optimisation.convex.ActiveSetSolver.performIteration(ActiveSetSolver.java:412) > at org.ojalgo.optimisation.convex.ConvexSolver.solve(ConvexSolver.java:310) > at org.ojalgo.optimisation.Optimisation$Solver.solve(Optimisation.java:383) > > I calculate that the program should have a single minimum of 0.5 at the point (0.5, 0.5). In fact, ojAlgo does find this solution I get if I add at least one additional constraint; either x1>=0 or x2>=0, like this: > PrimitiveDenseStore tmpAI = PrimitiveDenseStore.FACTORY.rows(new double[][] { { -1, -1 }, { 0, -1 } }); > PrimitiveDenseStore tmpBI = PrimitiveDenseStore.FACTORY.rows(new double[][] { { -1 }, { 0 } }); > > I’m wondering if someone could point out what (if anything) I’m doing wrong. > > Thank you, > Robert > ------------------------------------------------------------------------------ > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user |
From: Leaman, R. (NIH/NLM/N. [E] <rob...@ni...> - 2015-09-08 14:36:04
|
Hi, I am relatively new to ojAlgo and to quadratic programming. I've had quite a bit of success as I try it out, but found one QP that throws an error but looks fine to me. I removed extraneous variables and reduced it to a small program that throws the same error. This is the program: PrimitiveDenseStore tmpQ = PrimitiveDenseStore.FACTORY.rows(new double[][] { { 2, 0 }, { 0, 2 } }); PrimitiveDenseStore tmpC = PrimitiveDenseStore.FACTORY.rows(new double[][] { { 0, 0 } }); PrimitiveDenseStore tmpAI = PrimitiveDenseStore.FACTORY.rows(new double[][] { { -1, -1 } }); PrimitiveDenseStore tmpBI = PrimitiveDenseStore.FACTORY.rows(new double[][] { { -1 } }); ConvexSolver tmpSolver = new ConvexSolver.Builder(tmpQ, tmpC.transpose()).inequalities(tmpAI, tmpBI).build(); Optimisation.Result tmpResult = tmpSolver.solve(); The result is a division by zero error: java.lang.ArithmeticException: / by zero at org.ojalgo.matrix.store.PrimitiveDenseStore.fillByMultiplying(PrimitiveDenseStore.java:1199) at org.ojalgo.matrix.store.MatrixStore.multiply(MatrixStore.java:438) at org.ojalgo.matrix.store.MatrixStore.multiply(MatrixStore.java:432) at org.ojalgo.optimisation.convex.ActiveSetSolver.performIteration(ActiveSetSolver.java:412) at org.ojalgo.optimisation.convex.ConvexSolver.solve(ConvexSolver.java:310) at org.ojalgo.optimisation.Optimisation$Solver.solve(Optimisation.java:383) I calculate that the program should have a single minimum of 0.5 at the point (0.5, 0.5). In fact, ojAlgo does find this solution I get if I add at least one additional constraint; either x1>=0 or x2>=0, like this: PrimitiveDenseStore tmpAI = PrimitiveDenseStore.FACTORY.rows(new double[][] { { -1, -1 }, { 0, -1 } }); PrimitiveDenseStore tmpBI = PrimitiveDenseStore.FACTORY.rows(new double[][] { { -1 }, { 0 } }); I'm wondering if someone could point out what (if anything) I'm doing wrong. Thank you, Robert |
From: Anders P. <an...@op...> - 2015-08-09 20:49:58
|
There was a bug that could give you a NullPointerException if you turned on debug logging and there were no equality constraints. That’s fixed. Both cases where you had an identity Q-matrix works as expected (if you didn’t get that NullPointer). The unconstrained case with a zero Q-matrix returns state INVALID rather than the perhaps more correct UNBOUNDED - is that a big problem for you? The constrained zero Q-matrix case returned a strange solution and incorrectly reported it as OPTIMAL (The returned solution was feasible but not optimal.) I’ve modified the solver so that it returns the optimal solution (in your test case at least). Generally you should not solve linear problems using the ConvexSolver! /Anders > On 9 aug 2015, at 11:34, Anders Peterson <an...@op...> wrote: > > The short answer and quick solution for you is to model your problems using ExpressionsBasedModel rather than using the ConvexSolver directly. It brings many advantages - among other things it would automagically switch to the LinearSolver for that one degenerate case. > > > The ConvexSolver assumes there is a Q-matrix and that it is symmetric and (semi) positive definite. A Q-matrix with all zeros does theoretically meet those requirements, and It seems reasonable to assume that a convex solver can handle a linear problem. That said I’m not surprised it fails - it’s not designed to handle that case. I will, however, have a look your test code and investigate what (if anything) I can do handle the linear case. > > > /Anders > > > >> On 9 aug 2015, at 02:40, Greg Sterijevski <gs...@ho...> wrote: >> >> Hi, >> >> I have a very simple quadratic programming problem. In one degenerate case, the Q matrix is composed of zeroes. In other words, the problem is a linear programming problem with Equality and Inequality constraints. It seems like ConvexSolver should be able to solve the problem but it fails in somewhat interesting ways. I am not sure what I am doing wrong. >> >> I am minimizing the expression >> >> x' Q x' - c' x >> >> where c = { 0.12, -0.05, 0.08, 0.07 } >> >> I would expect that without an constraints, the solver should fail as it attempts to take x[0],x[2],x[3] to +infinity and x[1] to -infinity. I next set liberal constraints of +/- 99999 for all the factors.. I would expect the solver to take the x vector to the bounds and terminate gracefully. In either case, the results are hard to understand. >> >> In the case where I use the zero matrix for Q, I get an infeasibility failure. Failure State = INVALID >> >> >> In the case where I use an identity matrix (which is PSD and nice) , I get the result as: >> x[0] = 0.12 >> x[1] = -0.05 >> x[2] = 0.08 >> x[3] = 0.07 >> >> In the case of zero matrix and constraints I get: >> >> x[0] = 0.25 >> x[1] = 0.25 >> x[2] = 0.25 >> x[3] = 0.25 >> >> The for the case of an identity matrix and constraints I get >> >> Identity Q matrix and constraints -------------------------! >> Initial solution: [0.12, -0.05, 0.08, 0.07] >> Initial I-included-slack: [] >> Initial I-excluded-slack: [99999.12, 99998.95, 99999.08, 99999.07, 99998.88, 99999.05, 99998.92, 99998.93] >> >> PerformIteration >> Last Incl/Excl: -1/-1 => [] / [0, 1, 2, 3, 4, 5, 6, 7] >> X/L: true X=[0.0, 0.0, 0..0, 0.0] L=[] >> Current: [0.12, -0.05, 0.08, 0.07] >> Step: [0.0, 0.0, 0.0, 0.0] >> java.lang.NullPointerException >> >> >> Any thoughts would be appreciated. Thank you to the creators of OjAlgo. It looks like a complete package! >> >> >> -Greg >> >> >> Test code below. >> >> public static void attempt5(boolean identity, boolean addDummyConstraints) { >> if (!identity && !addDummyConstraints) { >> System.out.println("Zero Q matrix and no constraints -------------------------!"); >> } else if (!identity) { >> System.out.println("Zero Q matrix and constraints -------------------------!"); >> } else if (!addDummyConstraints) { >> System.out.println("Identity Q matrix and no constraints -------------------------!"); >> } else { >> System.out.println("Identity Q matrix and constraints -------------------------!"); >> } >> >> double[] C = new double[]{0.12, -0.05, 0.08, 0.07}; >> final RawStore cov = new RawStore(4, 4); >> if (identity) { >> for (int i = 0; i < 4; i++) { >> cov.set(i, i, 1.0); >> } >> } >> final RawStore linPart = new RawStore(C, 4); >> ConvexSolver.Builder builder = ConvexSolver.getBuilder( >> cov, >> linPart); >> >> if (addDummyConstraints) { >> RawStore ineq = RawStore.FACTORY.rows( >> new double[][]{{-1.0, 0.0, 0.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, {0.0, 0.0, -1.0, 0.0}, {0.0, 0.0, 0.0, -1.0}, >> {1.0, 0.0, 0.0, 0.0}, {0.0, 1.0, 0.0, 0.0}, {0.0, 0.0, 1.0, 0.0}, {0.0, 0.0, 0.0, 1.0}}); >> >> RawStore coeff = RawStore.FACTORY.columns(new double[][]{{99999, 99999, 99999, 99999, 99999, 99999, 99999, 99999}}); >> >> builder = builder.inequalities(ineq, coeff); >> } >> final Optimisation.Options opts = new Optimisation.Options(); >> opts.iterations_abort = 10000; >> opts.iterations_suffice = 100; >> opts.debug(ConvexSolver.class); >> final ConvexSolver cs = builder.build(opts); >> >> try { >> final Optimisation.Result solution = cs.solve(); >> if (solution.getState() == Optimisation.State.DISTINCT >> || solution.getState() == Optimisation.State.APPROXIMATE >> || solution.getState() == Optimisation.State.OPTIMAL) { >> double[] pt = new double[4]; >> for (int i = 0; i < pt.length; i++) { >> pt[i] = solution.doubleValue(i); >> } >> >> System.out.println("Objective " + solution.getValue()); >> for (int ii = 0; ii < 4; ii++) { >> System.out.println("x[" + ii + "] = " + solution.doubleValue(ii)); >> } >> } else { >> System.out.println("Failure State = " + solution.getState().name()); >> >> } >> >> } catch (Exception e) { >> System..out.println(e); >> } >> } >> ------------------------------------------------------------------------------ >> _______________________________________________ >> ojAlgo-user mailing list >> ojA...@li... >> https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > ------------------------------------------------------------------------------ > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > |
From: Anders P. <an...@op...> - 2015-08-09 09:34:58
|
The short answer and quick solution for you is to model your problems using ExpressionsBasedModel rather than using the ConvexSolver directly. It brings many advantages - among other things it would automagically switch to the LinearSolver for that one degenerate case. The ConvexSolver assumes there is a Q-matrix and that it is symmetric and (semi) positive definite. A Q-matrix with all zeros does theoretically meet those requirements, and It seems reasonable to assume that a convex solver can handle a linear problem. That said I’m not surprised it fails - it’s not designed to handle that case. I will, however, have a look your test code and investigate what (if anything) I can do handle the linear case. /Anders > On 9 aug 2015, at 02:40, Greg Sterijevski <gs...@ho...> wrote: > > Hi, > > I have a very simple quadratic programming problem. In one degenerate case, the Q matrix is composed of zeroes. In other words, the problem is a linear programming problem with Equality and Inequality constraints. It seems like ConvexSolver should be able to solve the problem but it fails in somewhat interesting ways. I am not sure what I am doing wrong. > > I am minimizing the expression > > x' Q x' - c' x > > where c = { 0.12, -0.05, 0.08, 0.07 } > > I would expect that without an constraints, the solver should fail as it attempts to take x[0],x[2],x[3] to +infinity and x[1] to -infinity. I next set liberal constraints of +/- 99999 for all the factors.. I would expect the solver to take the x vector to the bounds and terminate gracefully. In either case, the results are hard to understand. > > In the case where I use the zero matrix for Q, I get an infeasibility failure. Failure State = INVALID > > > In the case where I use an identity matrix (which is PSD and nice) , I get the result as: > x[0] = 0.12 > x[1] = -0.05 > x[2] = 0.08 > x[3] = 0.07 > > In the case of zero matrix and constraints I get: > > x[0] = 0.25 > x[1] = 0.25 > x[2] = 0.25 > x[3] = 0.25 > > The for the case of an identity matrix and constraints I get > > Identity Q matrix and constraints -------------------------! > Initial solution: [0.12, -0.05, 0.08, 0.07] > Initial I-included-slack: [] > Initial I-excluded-slack: [99999.12, 99998.95, 99999.08, 99999.07, 99998.88, 99999.05, 99998.92, 99998.93] > > PerformIteration > Last Incl/Excl: -1/-1 => [] / [0, 1, 2, 3, 4, 5, 6, 7] > X/L: true X=[0.0, 0.0, 0..0, 0.0] L=[] > Current: [0.12, -0.05, 0.08, 0.07] > Step: [0.0, 0.0, 0.0, 0.0] > java.lang.NullPointerException > > > Any thoughts would be appreciated. Thank you to the creators of OjAlgo. It looks like a complete package! > > > -Greg > > > Test code below. > > public static void attempt5(boolean identity, boolean addDummyConstraints) { > if (!identity && !addDummyConstraints) { > System.out.println("Zero Q matrix and no constraints -------------------------!"); > } else if (!identity) { > System.out.println("Zero Q matrix and constraints -------------------------!"); > } else if (!addDummyConstraints) { > System.out.println("Identity Q matrix and no constraints -------------------------!"); > } else { > System.out.println("Identity Q matrix and constraints -------------------------!"); > } > > double[] C = new double[]{0.12, -0.05, 0.08, 0.07}; > final RawStore cov = new RawStore(4, 4); > if (identity) { > for (int i = 0; i < 4; i++) { > cov.set(i, i, 1.0); > } > } > final RawStore linPart = new RawStore(C, 4); > ConvexSolver.Builder builder = ConvexSolver.getBuilder( > cov, > linPart); > > if (addDummyConstraints) { > RawStore ineq = RawStore.FACTORY.rows( > new double[][]{{-1.0, 0.0, 0.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, {0.0, 0.0, -1.0, 0.0}, {0.0, 0.0, 0.0, -1.0}, > {1.0, 0.0, 0.0, 0.0}, {0.0, 1.0, 0.0, 0.0}, {0.0, 0.0, 1.0, 0.0}, {0.0, 0.0, 0.0, 1.0}}); > > RawStore coeff = RawStore.FACTORY.columns(new double[][]{{99999, 99999, 99999, 99999, 99999, 99999, 99999, 99999}}); > > builder = builder.inequalities(ineq, coeff); > } > final Optimisation.Options opts = new Optimisation.Options(); > opts.iterations_abort = 10000; > opts.iterations_suffice = 100; > opts.debug(ConvexSolver.class); > final ConvexSolver cs = builder.build(opts); > > try { > final Optimisation.Result solution = cs.solve(); > if (solution.getState() == Optimisation.State.DISTINCT > || solution.getState() == Optimisation.State.APPROXIMATE > || solution.getState() == Optimisation.State.OPTIMAL) { > double[] pt = new double[4]; > for (int i = 0; i < pt.length; i++) { > pt[i] = solution.doubleValue(i); > } > > System.out.println("Objective " + solution.getValue()); > for (int ii = 0; ii < 4; ii++) { > System.out.println("x[" + ii + "] = " + solution.doubleValue(ii)); > } > } else { > System.out.println("Failure State = " + solution.getState().name()); > > } > > } catch (Exception e) { > System..out.println(e); > } > } > ------------------------------------------------------------------------------ > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user |
From: Greg S. <gs...@ho...> - 2015-08-09 00:40:24
|
Hi, I have a very simple quadratic programming problem. In one degenerate case, the Q matrix is composed of zeroes. In other words, the problem is a linear programming problem with Equality and Inequality constraints. It seems like ConvexSolver should be able to solve the problem but it fails in somewhat interesting ways. I am not sure what I am doing wrong. I am minimizing the expression x' Q x' - c' x where c = { 0.12, -0.05, 0.08, 0.07 } I would expect that without an constraints, the solver should fail as it attempts to take x[0],x[2],x[3] to +infinity and x[1] to -infinity. I next set liberal constraints of +/- 99999 for all the factors. I would expect the solver to take the x vector to the bounds and terminate gracefully. In either case, the results are hard to understand. In the case where I use the zero matrix for Q, I get an infeasibility failure. Failure State = INVALID In the case where I use an identity matrix (which is PSD and nice) , I get the result as: x[0] = 0.12 x[1] = -0.05 x[2] = 0.08 x[3] = 0.07 In the case of zero matrix and constraints I get: x[0] = 0.25 x[1] = 0.25 x[2] = 0.25 x[3] = 0.25 The for the case of an identity matrix and constraints I get Identity Q matrix and constraints -------------------------! Initial solution: [0.12, -0.05, 0.08, 0.07] Initial I-included-slack: [] Initial I-excluded-slack: [99999.12, 99998.95, 99999.08, 99999.07, 99998.88, 99999.05, 99998.92, 99998.93] PerformIteration Last Incl/Excl: -1/-1 => [] / [0, 1, 2, 3, 4, 5, 6, 7] X/L: true X=[0.0, 0.0, 0.0, 0.0] L=[] Current: [0.12, -0.05, 0.08, 0.07] Step: [0.0, 0.0, 0.0, 0.0] java.lang.NullPointerException Any thoughts would be appreciated. Thank you to the creators of OjAlgo. It looks like a complete package! -Greg Test code below. public static void attempt5(boolean identity, boolean addDummyConstraints) { if (!identity && !addDummyConstraints) { System.out.println("Zero Q matrix and no constraints -------------------------!"); } else if (!identity) { System.out.println("Zero Q matrix and constraints -------------------------!"); } else if (!addDummyConstraints) { System.out.println("Identity Q matrix and no constraints -------------------------!"); } else { System.out.println("Identity Q matrix and constraints -------------------------!"); } double[] C = new double[]{0.12, -0.05, 0.08, 0.07}; final RawStore cov = new RawStore(4, 4); if (identity) { for (int i = 0; i < 4; i++) { cov.set(i, i, 1.0); } } final RawStore linPart = new RawStore(C, 4); ConvexSolver.Builder builder = ConvexSolver.getBuilder( cov, linPart); if (addDummyConstraints) { RawStore ineq = RawStore.FACTORY.rows( new double[][]{{-1.0, 0.0, 0.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, {0.0, 0.0, -1.0, 0.0}, {0.0, 0.0, 0.0, -1.0}, {1.0, 0.0, 0.0, 0.0}, {0.0, 1.0, 0.0, 0.0}, {0.0, 0.0, 1.0, 0.0}, {0.0, 0.0, 0.0, 1.0}}); RawStore coeff = RawStore.FACTORY.columns(new double[][]{{99999, 99999, 99999, 99999, 99999, 99999, 99999, 99999}}); builder = builder.inequalities(ineq, coeff); } final Optimisation.Options opts = new Optimisation.Options(); opts.iterations_abort = 10000; opts.iterations_suffice = 100; opts.debug(ConvexSolver.class); final ConvexSolver cs = builder.build(opts); try { final Optimisation.Result solution = cs.solve(); if (solution.getState() == Optimisation.State.DISTINCT || solution.getState() == Optimisation.State.APPROXIMATE || solution.getState() == Optimisation.State.OPTIMAL) { double[] pt = new double[4]; for (int i = 0; i < pt.length; i++) { pt[i] = solution.doubleValue(i); } System.out.println("Objective " + solution.getValue()); for (int ii = 0; ii < 4; ii++) { System.out.println("x[" + ii + "] = " + solution.doubleValue(ii)); } } else { System.out.println("Failure State = " + solution.getState().name()); } } catch (Exception e) { System.out.println(e); } } |
From: Anders P. <an...@op...> - 2015-08-05 12:02:34
|
I executed the Java Matrix Benchmark using ojAlgo v38.1 and the latest released versions of all the other included libraries. Here are the results: https://github.com/optimatika/ojAlgo/wiki/Java-Matrix-Benchmark > On 1 jul 2015, at 23:56, Anders Peterson <an...@op...> wrote: > > Announcing ojAlgo v38.1 > > Compared to v38 there are no new features or api changes (some things that were deprecated are now removed) but v38 had lots of new stuff. > > https://github.com/optimatika/ojAlgo/wiki/v38 > > The main difference between v38 and v38.1 is internal refactoring and performance tuning of the various matrix decompositions. There are significant performance improvements with all matrix decompositions for small and medium sized matrices. > > If you didn’t notice; since v38 ojAlgo is available at The Central Maven Repository. A few old releases were also uploaded to Central. > > http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.ojalgo%22%20AND%20a%3A%22ojalgo%22 > > |
From: Anders P. <an...@op...> - 2015-07-01 22:12:12
|
Announcing ojAlgo v38.1 Compared to v38 there are no new features or api changes (some things that were deprecated are now removed) but v38 had lots of new stuff. https://github.com/optimatika/ojAlgo/wiki/v38 The main difference between v38 and v38.1 is internal refactoring and performance tuning of the various matrix decompositions. There are significant performance improvements with all matrix decompositions for small and medium sized matrices. If you didn’t notice; since v38 ojAlgo is available at The Central Maven Repository. A few old releases were also uploaded to Central. http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.ojalgo%22%20AND%20a%3A%22ojalgo%22 |
From: Anders P. <an...@op...> - 2015-04-30 21:28:30
|
array.modifyAll(PrimitiveFunction.POW.second(3.0)); That’s assuming “array” is something that implements org.ojalgo.access.Access1D.Modifiable<Double>. Binary functions become unary functions if you specify/lock one of the input arguments. > On 30 apr 2015, at 13:47, Argyrouska Bob <esp...@gm...> wrote: > > Hi again, > > Would it be easy for you to provide a very simple example? > e.g. I have an array and I want to do the pow operation to constant value (let's say 3). So: a[1].pow(3), a[2].pow(3), a[3].pow(3) etc.. > > thanks again > > On 29 April 2015 at 01:06, Anders Peterson <an...@op...> wrote: > I think you misinterpret “binary function” > > http://en.wikipedia.org/wiki/Binary_function > > http://ojalgo.org/generated/org/ojalgo/function/BinaryFunction.html > > > Did you bother to look at UnaryFunction, BinaryFunction and the other interfaces/classed in that package? > > > > On 28 apr 2015, at 23:24, Argyrouska Bob <esp...@gm...> wrote: > > > > Hi, > > > > It seems a little hard to find any examples in the Javadocs. How exactly you define an exponential operation (not a binary one like XOR ^) using a BinaryFunction? > > > > Thanks again for your support > > > > On 27 April 2015 at 22:43, Anders Peterson <an...@op...> wrote: > > Rounding can be done using UnaryFunction - just create an instance that does what you want. The class NumberContext can give you a function that may suit you. Instantiate a NumberContext and then call get***Function() > > > > There’s also the SCALE function of PrimitiveFunction. When/if you specify the parameter it turns into a unary function. > > > > I think you should switch from using BasicMatrix to MatrixStore/PhysicalStore. > > > > For “pow” you need a binary function... > > > > fillMatching(Access1D<? extends Number>) > > fillMatching(Access1D<Double>, BinaryFunction<Double>, Access1D<Double>) > > fillMatching(Access1D<Double>, BinaryFunction<Double>, Double) > > fillMatching(Double, BinaryFunction<Double>, Access1D<Double>) > > > > > > > On 27 apr 2015, at 20:30, Argyrouska Bob <esp...@gm...> wrote: > > > > > > Sorry, > > > > > > Thanks for your prompt reply. > > > Maybe I didn't make myself clear. I was referring to exponential similar to what native Java Math.pow() does. > > > What I am looking for is: > > > > > > BasicMatrix tA, tB; > > > tA.pow(tB); or tA.pow(2.0); > > > > > > which will eventually lead to tA^x, where x=element from tB (applied for each element) or a constant value. > > > Secondly a round function similar to what native Java Math.round() offers. > > > Meaning: > > > > > > BasicMatrix tA; > > > tA.round(RoundindMode); > > > > > > which will result in rounding each element of tA to RoundingMode, where RoundingMode=FLOOR, CEILING etc > > > Are these possible using UnaryFunctions? > > > > > > Thanks > > > > > > On 27 April 2015 at 20:00, Anders Peterson <an...@op...> wrote: > > > Sorry, I just noticed you were using BasicMatrix. It works a little different there (a somewhat limited set of functionality) partly because BasicMatrix instances are immutable. It does have a modify-method: > > > > > > BasicMatrix modify(UnaryFunction<? extends Number>); > > > > > > > > > > > > > > > > On 27 apr 2015, at 18:51, Anders Peterson <an...@op...> wrote: > > > > > > > > Do you want to modify matrix elements? > > > > > > > > Everything that implements Access2D.Modifiable has these methods: > > > > > > > > modifyColumn(long, long, UnaryFunction<N>) > > > > modifyDiagonal(long, long, UnaryFunction<N>) > > > > modifyOne(long, long, UnaryFunction<N>) > > > > modifyOne(long, UnaryFunction<N>) > > > > modifyRange(long, long, UnaryFunction<N>) > > > > modifyRow(long, long, UnaryFunction<N>) > > > > > > > > If you’re using primitive double elements you’ll find a predefined set of functions in org.ojalgo.function.PrimitiveFunction > > > > > > > > The PhysicalStore.Factory also provides access to that set of functions. > > > > > > > > If you don’t find what you need you just create a custom UnaryFunction implementation. > > > > > > > > /Anders > > > > > > > > > > > >> On 27 apr 2015, at 18:29, Argyrouska Bob <esp...@gm...> wrote: > > > >> > > > >> Hello, > > > >> > > > >> I am a new member and still practicing with library but what surprises me is that I haven't found support for power functions or round to a BasicMatrix data type. Is this true or it's named somewhat different? > > > >> > > > >> Thanks and regards, > > > >> silver > > > >> > > > >> > > > >> ------------------------------------------------------------------------------ > > > >> One dashboard for servers and applications across Physical-Virtual-Cloud > > > >> Widest out-of-the-box monitoring support with 50+ applications > > > >> Performance metrics, stats and reports that give you Actionable Insights > > > >> Deep dive visibility with transaction tracing using APM Insight. > > > >> http://ad.doubleclick.net/ddm/clk/290420510;117567292;y_______________________________________________ > > > >> ojAlgo-user mailing list > > > >> ojA...@li... > > > >> https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > > > > > > > > > > > ------------------------------------------------------------------------------ > > > One dashboard for servers and applications across Physical-Virtual-Cloud > > > Widest out-of-the-box monitoring support with 50+ applications > > > Performance metrics, stats and reports that give you Actionable Insights > > > Deep dive visibility with transaction tracing using APM Insight. > > > http://ad.doubleclick.net/ddm/clk/290420510;117567292;y > > > _______________________________________________ > > > ojAlgo-user mailing list > > > ojAlgo-user@lists..sourceforge.net > > > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > > > > > > > > > > -- > > > Reality leaves a lot to imagination. > > > ------------------------------------------------------------------------------ > > > One dashboard for servers and applications across Physical-Virtual-Cloud > > > Widest out-of-the-box monitoring support with 50+ applications > > > Performance metrics, stats and reports that give you Actionable Insights > > > Deep dive visibility with transaction tracing using APM Insight. > > > http://ad.doubleclick.net/ddm/clk/290420510;117567292;y_______________________________________________ > > > ojAlgo-user mailing list > > > ojAlgo-user@lists..sourceforge.net > > > https://lists..sourceforge.net/lists/listinfo/ojalgo-user > > > > > > ------------------------------------------------------------------------------ > > One dashboard for servers and applications across Physical-Virtual-Cloud > > Widest out-of-the-box monitoring support with 50+ applications > > Performance metrics, stats and reports that give you Actionable Insights > > Deep dive visibility with transaction tracing using APM Insight. > > http://ad.doubleclick.net/ddm/clk/290420510;117567292;y > > _______________________________________________ > > ojAlgo-user mailing list > > ojAlgo-user@lists..sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > > > > > > -- > > Reality leaves a lot to imagination. > > ------------------------------------------------------------------------------ > > One dashboard for servers and applications across Physical-Virtual-Cloud > > Widest out-of-the-box monitoring support with 50+ applications > > Performance metrics, stats and reports that give you Actionable Insights > > Deep dive visibility with transaction tracing using APM Insight. > > http://ad.doubleclick.net/ddm/clk/290420510;117567292;y_______________________________________________ > > ojAlgo-user mailing list > > ojAlgo-user@lists..sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > ------------------------------------------------------------------------------ > One dashboard for servers and applications across Physical-Virtual-Cloud > Widest out-of-the-box monitoring support with 50+ applications > Performance metrics, stats and reports that give you Actionable Insights > Deep dive visibility with transaction tracing using APM Insight. > http://ad.doubleclick.net/ddm/clk/290420510;117567292;y > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > > -- > Reality leaves a lot to imagination. > ------------------------------------------------------------------------------ > One dashboard for servers and applications across Physical-Virtual-Cloud > Widest out-of-the-box monitoring support with 50+ applications > Performance metrics, stats and reports that give you Actionable Insights > Deep dive visibility with transaction tracing using APM Insight. > http://ad.doubleclick.net/ddm/clk/290420510;117567292;y_______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user |
From: Argyrouska B. <esp...@gm...> - 2015-04-30 11:47:35
|
Hi again, Would it be easy for you to provide a very simple example? e.g. I have an array and I want to do the pow operation to constant value (let's say 3). So: a[1].pow(3), a[2].pow(3), a[3].pow(3) etc.. thanks again On 29 April 2015 at 01:06, Anders Peterson <an...@op...> wrote: > I think you misinterpret “binary function” > > http://en.wikipedia.org/wiki/Binary_function > > http://ojalgo.org/generated/org/ojalgo/function/BinaryFunction.html > > > Did you bother to look at UnaryFunction, BinaryFunction and the other > interfaces/classed in that package? > > > > On 28 apr 2015, at 23:24, Argyrouska Bob <esp...@gm...> wrote: > > > > Hi, > > > > It seems a little hard to find any examples in the Javadocs. How exactly > you define an exponential operation (not a binary one like XOR ^) using a > BinaryFunction? > > > > Thanks again for your support > > > > On 27 April 2015 at 22:43, Anders Peterson <an...@op...> wrote: > > Rounding can be done using UnaryFunction - just create an instance that > does what you want. The class NumberContext can give you a function that > may suit you. Instantiate a NumberContext and then call get***Function() > > > > There’s also the SCALE function of PrimitiveFunction. When/if you > specify the parameter it turns into a unary function. > > > > I think you should switch from using BasicMatrix to > MatrixStore/PhysicalStore. > > > > For “pow” you need a binary function... > > > > fillMatching(Access1D<? extends Number>) > > fillMatching(Access1D<Double>, BinaryFunction<Double>, Access1D<Double>) > > fillMatching(Access1D<Double>, BinaryFunction<Double>, Double) > > fillMatching(Double, BinaryFunction<Double>, Access1D<Double>) > > > > > > > On 27 apr 2015, at 20:30, Argyrouska Bob <esp...@gm...> wrote: > > > > > > Sorry, > > > > > > Thanks for your prompt reply. > > > Maybe I didn't make myself clear. I was referring to exponential > similar to what native Java Math.pow() does. > > > What I am looking for is: > > > > > > BasicMatrix tA, tB; > > > tA.pow(tB); or tA.pow(2.0); > > > > > > which will eventually lead to tA^x, where x=element from tB (applied > for each element) or a constant value. > > > Secondly a round function similar to what native Java Math.round() > offers. > > > Meaning: > > > > > > BasicMatrix tA; > > > tA.round(RoundindMode); > > > > > > which will result in rounding each element of tA to RoundingMode, > where RoundingMode=FLOOR, CEILING etc > > > Are these possible using UnaryFunctions? > > > > > > Thanks > > > > > > On 27 April 2015 at 20:00, Anders Peterson <an...@op...> > wrote: > > > Sorry, I just noticed you were using BasicMatrix. It works a little > different there (a somewhat limited set of functionality) partly because > BasicMatrix instances are immutable. It does have a modify-method: > > > > > > BasicMatrix modify(UnaryFunction<? extends Number>); > > > > > > > > > > > > > > > > On 27 apr 2015, at 18:51, Anders Peterson <an...@op...> > wrote: > > > > > > > > Do you want to modify matrix elements? > > > > > > > > Everything that implements Access2D.Modifiable has these methods: > > > > > > > > modifyColumn(long, long, UnaryFunction<N>) > > > > modifyDiagonal(long, long, UnaryFunction<N>) > > > > modifyOne(long, long, UnaryFunction<N>) > > > > modifyOne(long, UnaryFunction<N>) > > > > modifyRange(long, long, UnaryFunction<N>) > > > > modifyRow(long, long, UnaryFunction<N>) > > > > > > > > If you’re using primitive double elements you’ll find a predefined > set of functions in org.ojalgo.function.PrimitiveFunction > > > > > > > > The PhysicalStore.Factory also provides access to that set of > functions. > > > > > > > > If you don’t find what you need you just create a custom > UnaryFunction implementation. > > > > > > > > /Anders > > > > > > > > > > > >> On 27 apr 2015, at 18:29, Argyrouska Bob <esp...@gm...> > wrote: > > > >> > > > >> Hello, > > > >> > > > >> I am a new member and still practicing with library but what > surprises me is that I haven't found support for power functions or round > to a BasicMatrix data type. Is this true or it's named somewhat different? > > > >> > > > >> Thanks and regards, > > > >> silver > > > >> > > > >> > > > >> > ------------------------------------------------------------------------------ > > > >> One dashboard for servers and applications across > Physical-Virtual-Cloud > > > >> Widest out-of-the-box monitoring support with 50+ applications > > > >> Performance metrics, stats and reports that give you Actionable > Insights > > > >> Deep dive visibility with transaction tracing using APM Insight. > > > >> > http://ad.doubleclick.net/ddm/clk/290420510;117567292;y_______________________________________________ > > > >> ojAlgo-user mailing list > > > >> ojA...@li... > > > >> https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > > > > > > > > > > > > ------------------------------------------------------------------------------ > > > One dashboard for servers and applications across > Physical-Virtual-Cloud > > > Widest out-of-the-box monitoring support with 50+ applications > > > Performance metrics, stats and reports that give you Actionable > Insights > > > Deep dive visibility with transaction tracing using APM Insight. > > > http://ad.doubleclick.net/ddm/clk/290420510;117567292;y > > > _______________________________________________ > > > ojAlgo-user mailing list > > > ojAlgo-user@lists..sourceforge.net > > > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > > > > > > > > > > -- > > > Reality leaves a lot to imagination. > > > > ------------------------------------------------------------------------------ > > > One dashboard for servers and applications across > Physical-Virtual-Cloud > > > Widest out-of-the-box monitoring support with 50+ applications > > > Performance metrics, stats and reports that give you Actionable > Insights > > > Deep dive visibility with transaction tracing using APM Insight. > > > > http://ad.doubleclick.net/ddm/clk/290420510;117567292;y_______________________________________________ > > > ojAlgo-user mailing list > > > ojAlgo-user@lists..sourceforge.net > > > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > > > > > ------------------------------------------------------------------------------ > > One dashboard for servers and applications across Physical-Virtual-Cloud > > Widest out-of-the-box monitoring support with 50+ applications > > Performance metrics, stats and reports that give you Actionable Insights > > Deep dive visibility with transaction tracing using APM Insight. > > http://ad.doubleclick.net/ddm/clk/290420510;117567292;y > > _______________________________________________ > > ojAlgo-user mailing list > > ojA...@li... > > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > > > > > > -- > > Reality leaves a lot to imagination. > > > ------------------------------------------------------------------------------ > > One dashboard for servers and applications across Physical-Virtual-Cloud > > Widest out-of-the-box monitoring support with 50+ applications > > Performance metrics, stats and reports that give you Actionable Insights > > Deep dive visibility with transaction tracing using APM Insight. > > > http://ad.doubleclick.net/ddm/clk/290420510;117567292;y_______________________________________________ > > ojAlgo-user mailing list > > ojA...@li... > > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > > > > ------------------------------------------------------------------------------ > One dashboard for servers and applications across Physical-Virtual-Cloud > Widest out-of-the-box monitoring support with 50+ applications > Performance metrics, stats and reports that give you Actionable Insights > Deep dive visibility with transaction tracing using APM Insight. > http://ad.doubleclick.net/ddm/clk/290420510;117567292;y > _______________________________________________ > ojAlgo-user mailing list > ojA...@li... > https://lists.sourceforge.net/lists/listinfo/ojalgo-user > -- Reality leaves a lot to imagination. |