[Ipopt] initial point in pyIPOPT

Tony Kelman kelman at berkeley.edu
Mon Jun 9 23:59:48 EDT 2014


You may also need to adjust some of the warm_start_* options, see http://www.coin-or.org/Ipopt/documentation/node48.html

If those don’t work, then it sounds like it might be a bug in PyIpopt, unless you can reproduce it with an example using the C/C++ interface. Your best bet (unless someone who’s more familiar with the Python interface than I am pipes up) might be to report an issue on PyIpopt’s github page, ideally including example code so PyIpopt’s author can try to reproduce the problem. I’m not sure whether he subscribes to this mailing list.


From: Seth Watts 
Sent: Monday, June 09, 2014 8:42 AM
To: ipopt at list.coin-or.org 
Subject: [Ipopt] initial point in pyIPOPT

Hello - 

I have used IPOPT previously via its C/C++ interface, but now I am trying to use it through the pyIPOPT interface. I am using IPOPT version 3.10.0 installed on a computer cluster.

I have noticed that the initial point x0 for the optimization that I pass into IPOPT gets changed significantly, such that the first optimization iteration (or the point about which finite difference derivative checks are made) is quite different than the initial point I supplied.

Searching online I found some older threads about this issue, but these discussions appear to focus on when x0 is a near-optimal point which is near the boundary of the feasible region. In that case, IPOPT moves x0 way from the boundary so that its interior-point algorithms work properly.

However, in my case x0 is not expected to be optimal; it is simply a default state that I hope to improve. I observe significant changes in x0 even when no component of x0 is near its bounds, and even when I have turned off all constraint functions and bounds on the components of x.

Example: here is the value of x0 I pass into IPOPT via the pyIPOPT interface:

[ 0.5   0.5   0.    0.25  0.25  0.25  0.25  0.25  0.25  0.25  0.25]

with the upper/lower bounds on each component of +/- 2e19.

The value of x first encountered in IPOPT is:

[ -8.6673931   -0.41015111   6.69634436  -3.0302794    1.55978807
  -9.71466175  -5.99820966  10.0586816    5.25994266  2.42452724

Since there are no bounds, I don't understand why IPOPT would modify x0, which should certainly be an interior point. (Note - I see the same type of behavior, although with different perturbed x0, when the upper bounds are [1.0 1.0 2e19 0.35 0.35 0.35 0.35 0.35 0.35 0.35 0.35] and the lower bounds are [0.0 0.0 -2e19 0.02 0.02 0.02 0.02 0.02 0.02 0.02 0.02]).

Based on reading earlier threads, I have tried playing with the bound_push, bound_frac, etc. and other IPOPT options, including the following values which were set for the perturbed value of x0 given above:

                        Name   Value          used
   acceptable_obj_change_tol = 0.0001         yes
                  bound_frac = 1e-08          yes
      bound_mult_init_method = constant       yes
         bound_mult_init_val = 1e-08          yes
                  bound_push = 1e-08          yes
          bound_relax_factor = 1e-08          yes
             derivative_test = first-order    yes
derivative_test_perturbation = 1e-05          yes
   derivative_test_print_all = yes            yes
        findiff_perturbation = 1e-05          yes
       hessian_approximation = limited-memory yes
                    max_iter = 100            yes
                     mu_init = 1e-08          no
          nlp_scaling_method = none           yes
           print_info_string = yes            yes
          print_user_options = yes            yes
            slack_bound_frac = 1e-08          yes
            slack_bound_push = 1e-08          yes
                         tol = 1e-08          yes

(Note that since the finite difference check was on and the reported value of x0 was taken during the first call to eval_f(), some of the options should not come into play, e.g. the fact that I am using Hessian approximation shouldn't be germane.)

Does anyone have any suggestions for what else I can try so that the x0 IPOPT uses is at least near the x0 I pass in?

Thank you,
- Seth Watts

Ipopt mailing list
Ipopt at list.coin-or.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/ipopt/attachments/20140609/aa72cc74/attachment.html>

More information about the Ipopt mailing list