[Ipopt] Constraint violation during optimization

Moritz Oberhauser moritz.oberhauser at tum.de
Thu Apr 12 07:06:08 EDT 2018

Dear all,

we are using IPOPT as part of an NMR pulse optimization program and 
facing the fact, that constraints set via eval_g are not fully respected 
during the optimization. I read up on the documentation, but it seems 
there is no configuration option for the problem described below.

An NMR pulse has two orthogonal components/controls called X and Y 
(n=2). The total amplitude vector must not exceed 10.000 Hz. Therefor 
the one sided, constant constraint is defined as x² + y² <= 10.000².

Unfortunately the final amplitude often surpasses 10 kHz by up to 800 Hz 
during the optimization despite the constraint. The "constr_viol_tol" 
setting only defines one of the termination criterias of the 
optimization. However we want to optimize for a certain iteration count 
(1000) and find the best pulse that fulfills the constraint. The 
fidelity of the pulse itself does not have to reach a certain threshold.

The "nlp_scaling_min_value" parameter might be related to this issue 
because it mentions an eventual final constraint violation. However I'm 
not really understanding how exactly the gradient based scaling in IPOPT 
works. Currently we scale the gradient ourselves prior handing it over 
to IPOPT because we haven't found an equivalent option like 
"gradient_scaling_factor" or "gradient_step_size". Maybe it's 
recommended to use user-scaling in that case. Is scaling the whole 
project rather than the gradient / step size the preferred procedure?

To sum it up: Is there a way to influence the constraint violation 
during the optimization process? Ideally one that allows the violation 
to be zero: 0 <= nlp_constr_viol_tol < +inf

I hope I explained the situation well enough and used the program in an 
intended manner.

Best wishes,
Moritz Oberhauser

More information about the Ipopt mailing list