[Ipopt] Off-diagonal elements in hessian are being doubled

Johannes Huber johannes.huber at unibas.ch
Thu Nov 15 12:11:38 EST 2012


Since the Hessian is always symmetric, you only need to specify the lower or upper triangular matrix for Ipopt. Otherwise it is added up resulting in doubles matrix entries.
I guess, you specified the full matrix instead of only one triangular of it.
Best,
    Hannes
________________________________________
From: ipopt-bounces at list.coin-or.org [ipopt-bounces at list.coin-or.org] on behalf of Sean C McDuffee [scmcduff at blueskystudios.com]
Sent: Thursday, November 15, 2012 5:47 PM
To: ipopt at list.coin-or.org
Subject: [Ipopt] Off-diagonal elements in hessian are being doubled

My hessian is filling out the following matrix:

  300    0    0    0 -300    0    0    0    0    0    0
    0  100    0    0    0 -100    0    0    0    0    0
    0    0  100    0    0    0 -100    0    0    0    0
    0    0    0    0    0    0    0    0    0    0    0
-300    0    0    0  600    0    0    0 -300    0    0
    0 -100    0    0    0  200    0    0    0 -100    0
    0    0 -100    0    0    0  200    0    0    0 -100
    0    0    0    0    0    0    0    0    0    0    0
    0    0    0    0 -300    0    0    0  300    0    0
    0    0    0    0    0 -100    0    0    0  100    0
    0    0    0    0    0    0 -100    0    0    0  100

but the derivative checker is outputting:

*             obj_hess[    0,    4] = -6.0000000000000000e+02 v  ~
-2.9999999924257281e+02  [ 1.000e+00]
*             obj_hess[    1,    5] = -2.0000000000000003e+02 v  ~
-1.0000000000000000e+02  [ 1.000e+00]
*             obj_hess[    2,    6] = -2.0000000000000003e+02 v  ~
-1.0000000000000000e+02  [ 1.000e+00]
*             obj_hess[    4,    0] = -6.0000000000000000e+02 v  ~
-2.9999999924257281e+02  [ 1.000e+00]
*             obj_hess[    4,    8] = -6.0000000000000000e+02 v  ~
-2.9999999924257281e+02  [ 1.000e+00]
*             obj_hess[    5,    1] = -2.0000000000000003e+02 v  ~
-1.0000000000000000e+02  [ 1.000e+00]
*             obj_hess[    5,    9] = -2.0000000000000003e+02 v  ~
-1.0000000000000000e+02  [ 1.000e+00]
*             obj_hess[    6,    2] = -2.0000000000000003e+02 v  ~
-1.0000000000000000e+02  [ 1.000e+00]
*             obj_hess[    6,   10] = -2.0000000000000003e+02 v  ~
-1.0000000000000000e+02  [ 1.000e+00]
*             obj_hess[    8,    4] = -6.0000000000000000e+02 v  ~
-2.9999999810570444e+02  [ 1.000e+00]
*             obj_hess[    9,    5] = -2.0000000000000003e+02 v  ~
-1.0000000000000000e+02  [ 1.000e+00]
*             obj_hess[   10,    6] = -2.0000000000000003e+02 v  ~
-1.0000000000000000e+02  [ 1.000e+00]

I've checked my setup and the values array and it conforms to the above,
correct matrix.  Can anybody help?

Thanks,
Sean
_______________________________________________
Ipopt mailing list
Ipopt at list.coin-or.org
http://list.coin-or.org/mailman/listinfo/ipopt



More information about the Ipopt mailing list