[Ipopt] asymmetric Hessian matrix

Ming Ji finalguy at gmail.com
Wed May 16 12:45:21 EDT 2012


I am running on Linux Centos. With that config argument, I still have the
same problem.

if I replace

IpBlasDcopy(nx,&zero, 0, gradref, 1);
IpBlasDcopy(nx, &zero, 0, gradpert, 1)

with

std::fill(gradref, gradref + nx, 0.0)
std::fill(gradpert, gradpert + nx, 0.0)

,in the check derivative function.

It works. However, I am running into the same problem somewhere else.


On Wed, May 16, 2012 at 11:13 AM, Stefan Vigerske
<stefan at math.hu-berlin.de>wrote:

> Hi,
>
> the only thing that comes into my mind is that if you use Mac OS X Lion,
> then there is a problem when using the optimized blas routines that come
> with the system, for details see
>  https://projects.coin-or.org/**Ipopt/ticket/181<https://projects.coin-or.org/Ipopt/ticket/181>
>
> This issue has not been fixed in an Ipopt release yet (only in trunk and
> latest stable branch).
> One workaround is to use netlib's blas/lapack implementation (do get.Blas
> and get.Lapack in ThirdParty/Blas and ThirdParty/Lapack, resp.) and
> building Ipopt with the configure options --with-blas=BUILD
> --with-lapack=BUILD .
>
> Stefan
>
>  Hi,
>>
>> First when I use IPOPT for my problem, I see the bound constraints for
>> parameters are violated. The library throws an exception, and the program
>> terminated. To be specific the contraint on that parameter is [0.005,
>> 0.006], however I see the library is trying to use 0 for that parameter.
>>
>> Later, I enabled second order deriviative check, however the numerical
>> calculation gives asymmetric Hessian matrix for contraints. The values are
>> very different one is about 3000, the other is about 3.0e13. I spend some
>> time on the library source code. I found the following line changes the
>> parameter magically:
>>
>>  for (Index i = 0; i<  nx; ++i) {
>> std::cout<<  ivar<<  "  2.3     "<<  xref[i]<<  "  "<<  xpert[i]<<
>> std::endl;
>> }
>>
>> IpBlasDcopy(nx,&zero, 0, gradref, 1);
>>
>>
>> for (Index i = 0; i<  nx; ++i) {
>> std::cout<<  ivar<<  "  2.5     "<<  xref[i]<<  "  "<<  xpert[i]<<
>> std::endl;
>> }
>>
>> The output is:
>> 1  2.3     0.0481804  0.0481804
>> 1  2.3     700.976  700.976
>> 1  2.3     0.0165778  0.0165778
>> 1  2.3     2.54335  2.54335
>> 1  2.3     0.27909  0.27909
>>
>> 1  2.5     0.0481804  0
>> 1  2.5     700.976  700.976
>> 1  2.5     0.0165778  0.0165778
>> 1  2.5     2.54335  2.54335
>> 1  2.5     0.27909  0.27909
>>
>> IpBlasDcopy is a Fortran function, is that the problem?
>>
>>
>>
>>
>> ______________________________**_________________
>> Ipopt mailing list
>> Ipopt at list.coin-or.org
>> http://list.coin-or.org/**mailman/listinfo/ipopt<http://list.coin-or.org/mailman/listinfo/ipopt>
>>
>
>
> --
> Stefan Vigerske
> Humboldt University Berlin, Numerical Mathematics
> http://www.math.hu-berlin.de/~**stefan<http://www.math.hu-berlin.de/~stefan>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/ipopt/attachments/20120516/fc863fd5/attachment.html>


More information about the Ipopt mailing list