[Ipopt] Objective function decreases extremely slowly

Ana Maria Barragan Montero ana.barragan at uclouvain.be
Mon Aug 17 04:17:13 EDT 2015






________________________________
Ana María Barragán Montero,
PhD student
Université catholique de Louvain
Molecular Imaging, Radiotherapy and Oncology (MIRO)
Avenue Hippocrate 54
B-1200 Bruxelles, Belgium
ana.barragan at uclouvain.be
+32(0) 27649527
________________________________
From: Ana Maria Barragan Montero
Sent: Friday, August 14, 2015 4:45 PM
To: Ipopt User
Subject: Re: [Ipopt] Objective function decreases extremely slowly


Hi!


Thanks for your quick answer.


I did run the derivative checker at the very beginning to check that my implementation was right and everything seems to be OK. Moreover, I guess that if the derivatives are not well calculated I would not get right results, isn't it? The results I get are OK, the problem is that I need a lot of iterations to achieve it.


About my objective and constraint functions, ...here we go:

I work in the field of radiation therapy for cancer patients. In my problem I need to find the optimal dose for the patient which is obtained by a weighted sum of small proton beams.

  *   The weights for all these beamlets are my variables of optimization: w = [w1 w2 w3 ...w8500]. (with values usually between 0 and 10).
  *   I need to be robust to different scenarios s (due to patient movement), so the dose to each scenario is then: d(s) = w*P(s), where P is a matrix mapping the weights to dose in scenario s.
  *   I want to have a minimum dose in the target and no more than a certain dose in the organs, so I create a function to be minimized which is a weighted sum of dose objectives and will be my constraint function:

                                f (d(w,s)) = impw1*f1 +impw2*f2+...

         where impwi is an 'important weight' which increases according to the importance that I give to the objective i,
         and fi are the dose objective functions which depend on the dose at each scenario, thus fi(d(w,s))


  *   I attempt to be robust to all scenarios by being robust to the worst of them and I introduce a auxiliary variable t, so the problem to solve is the following:


                 minimize       t

                       w, t


                   subject to t => f(d(w,s))  for all scenarios s

                   w => 0


         And I will have as many constraint functions as the number of scenarios we have which is usually <=20.



IMPORTANT note: I realised that if I change the impw variables to a small values (<10) the objective function is changing more dinamically and faster than before, where I was using bigger values (500-1000). But anyway I need more than 500-1000 iterations to get a good result. Do you have any idea of what can I do to reduce the number of iterations?



Thank you in advance,


Ana








________________________________
Ana María Barragán Montero,
PhD student
Université catholique de Louvain
Molecular Imaging, Radiotherapy and Oncology (MIRO)
Avenue Hippocrate 54
B-1200 Bruxelles, Belgium
ana.barragan at uclouvain.be
+32(0) 27649527
________________________________
From: Ipopt User <ipoptuser at gmail.com>
Sent: Friday, August 14, 2015 3:31 PM
To: Ana Maria Barragan Montero
Subject: Re: [Ipopt] Objective function decreases extremely slowly

Have you run the derivative checker? What do the objective and constraint functions look like?

On Fri, Aug 14, 2015 at 5:25 AM, Ana Maria Barragan Montero <ana.barragan at uclouvain.be<mailto:ana.barragan at uclouvain.be>> wrote:


Dear all,


I am using IPOPT (through Matlab interface) with the option limited memory bfgs hessian approximation to solve a problem of the following characteristics (the total number of variables can change but it is often between 5000 and 10000).


*************************************************************************
This is Ipopt version 3.11.8, running with linear solver ma57.

Number of nonzeros in equality constraint Jacobian...:             0
Number of nonzeros in inequality constraint Jacobian.:    60613
Number of nonzeros in Lagrangian Hessian.............:                 0

Total number of variables............................:                            8659
               variables with only lower bounds:                            8659
     variables with lower and upper bounds:                                  0
               variables with only upper bounds:                                  0
Total number of equality constraints.................:                            0
Total number of inequality constraints...............:                           7
  inequality constraints with only lower bounds:                          7
   inequality constraints with lower and upper bounds:               0
   inequality constraints with only upper bounds:                         0


**************************************************************************


Here below you can find the ipopt options I am using (those which do not appear are set by the program to their default value)


 % Initialization
options.ipopt.bound_frac = 0.01;
options.ipopt.bound_push = 0.001;


options.ipopt.dual_inf_tol     = 1;
options.ipopt.constr_viol_tol  = 0.0001;
options.ipopt.compl_inf_tol    = 0.0001;
options.ipopt.acceptable_constr_viol_tol = 0.01;

% NLP scaling
options.ipopt.nlp_scaling_max_gradient = 100;


% Quasi-Newton
options.ipopt.hessian_approximation = 'limited-memory';
options.ipopt.limited_memory_update_type = 'bfgs';

% Barrier parameter
options.ipopt.mu_strategy = 'monotone';
options.ipopt.mu_init = 0.1;



My problem is that I need a lot of iterations (more than 1500) to get a good result because the objective function (which has a very big value in the beginning) is decreasing extremely slowly. As an example here you have the print output for the iteration 10 and 500:


iter          objective                inf_pr          inf_du      lg(mu)      ||d||       lg(rg)    alpha_du    alpha_pr   ls

 10      5.4760000e+10    0.00e+00     6.20e+02    -0.2     3.33e+02    -         6.13e-02   1.23e-02f    1   sigma=1.00e-06 qf=13Ws


 500   2.9078333e+10    1.38e+10      1.00e+00    -2.9     9.18e+13    -         4.66e-09    3.06e-10f   1  sigma=6.04e-01 qf=12Wp



I wonder if I could use any other ipopt options to make the objective function decrease faster so that I can reduce the number of iterations. Moreover, I am using ma57 solver, do you recommend me any other (as PARDISO for example) for large problems as this one?

I guess that it is normal that the program takes longer at the beginning to find the good search direction since it does not have the information about the hessian because I am using the bfgs approx. In my case I have the information to calculate analytically the hessian. To calculate it at each iteration would increase considerably the computation time, however, I could calculate it at the beginning and thus initialize the hessian to the right value. Do you think that would reduce the number of iterations?


I am new with IPOPT and I don't have much experience in the field of optimization so please let me know if you need more information about my problem (formulation, variables, etc..) that can help you to find a solution.


Thank you in advance,


Ana


________________________________
Ana María Barragán Montero,
PhD student
Université catholique de Louvain
Molecular Imaging, Radiotherapy and Oncology (MIRO)
Avenue Hippocrate 54
B-1200 Bruxelles, Belgium
ana.barragan at uclouvain.be<mailto:ana.barragan at uclouvain.be>
+32(0) 27649527<tel:%2B32%280%29%2027649527>

_______________________________________________
Ipopt mailing list
Ipopt at list.coin-or.org<mailto:Ipopt at list.coin-or.org>
http://list.coin-or.org/mailman/listinfo/ipopt


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/ipopt/attachments/20150817/3c8b82d3/attachment-0001.html>


More information about the Ipopt mailing list