[Coin-ipopt] Putt-Putt, Sputter, Solved -- IPOPT tuning help?
Frank J. Iannarilli
franki at aerodyne.com
Wed Jun 7 14:20:35 EDT 2006
Hi,
This is likely a plea to Andreas or Carl, but am happy to receive
suggestions from anyone else :-)
My problem most likely involves some appropriate tuning of IPOPT's control
options. IPOPT is taking *many* hundreds of iterations to reach a solution
(tol=1e-4), and there seems to be lots of internal "restarting", where at
first the inf_pr and inf_du (primal and dual infeasibilities) trend down
(say reaching 1e3, 1e2, 1e1), but suddenly the inf_du will spike back up to
1e10, mu will be raised, and the search progress begins anew. This behavior
is when in non-monotonic-mu mode...the monotonic mode rarely succeeds at
all.
I suspect a good part of the issue is that my problem is relatively
under-contrained and, to my knowledge, non-convex. It also doesn't help
that I'm not providing any explicit variable initialization, although some
constraint-setting seems to comprise an effective surrogate.
Anyhow, for those still following along, I'll briefly describe my problem
model, and paste-in some screen-scroll from IPOPT (I'm still using ver 3.0,
but imagine it is as good for my purposes as 3.1).
Model: wrap a "free" triangular mesh around a fixed mesh in 3D,
"lacing" it down along its boundary to "anchor" points on the fixed mesh,
arranging the free vertices (our variables) to:
minimize: (1) lace edge lengths (between selected free-mesh boundary
vertices and fixed anchor vertices);
and (2) free-mesh bending (angles between edges that meet)
s.t.: (a) fixed free-mesh edge lengths;
(b) free-mesh vertices stay outside convex hull of fixed
mesh;
(c) upper-bounded lace edge lengths
(d) hyperplane normal vectors of unit length* (see below)
This is cast with variables representing free-mesh vertex (x,y,z)
coordinates, with (unnormalized) inner products of edge lengths
representing edge self-lengths and edge-edge angles. I employ auxillary
variables representing a normal vector and offset distance for each free
vertex, to represent the "outside convex hull" constraint as a separating
hyperplane between a free vertex and the fixed-mesh points. Solutions I've
obtained validate the correctness of my model formulation.
What may be most revealing in an attempt to get this general problem
to converge more quickly in IPOPT, is that if I constrain the free-mesh
boundary corner vertices to be *fixed*, IPOPT converges in merely several
iterations! But when the free-mesh boundary is merely *constrained to
within some distance* of such fixed "anchor" locations (my "lace-length"
constraints), IPOPT cycles away. Once again, recall I do not provide any
variable initialization.
-------------------------------
Here are parameters set from within my PARAMS.DAT (IPOPT 3.0, analog to
3.1's ipopt.opt file):
(IPOPT 3.0 compiled with MA27)
pivtol 1e-14 # default: 1e-8
epsilon_tol 1e-4 # > 0 default: 1e-8
mu0 1. # Initial value for barrier parameter mu: >0 default: 0.1
mu_max 1.
muupdate nonmonotone # default: monotone OR nonmonotone
muoracle optprobing # optprobing OR loqo OR probing (default)
max_bisection_steps 8 # >0 default: 4
quality_function_norm 2 # 1 OR 2 OR 3 default: 2
quality_function_centrality 0 # 0 OR 1 OR 2 OR 3 default: 1
quality_function_dual_inf 2 # 1 OR 2 default: 1
dual_alpha_for_y 1 # 0 OR 1 default 0 (false)
kappa_d 0 # >=0 default 1e-5
corrector_type 1 # default: 0
skip_corr_if_neg_curv 1 # 0 OR 1 default 1 (true)
skip_corr_if_fixed_mode 1 # 0 OR 1 default 1 (true)
corrector_compl_avrg_red_fact 1 # >0 default: 1
Here's a run which terminates abnormally:
===========================================
Total number of variables............................: 210
variables with only lower bounds: 0
variables with lower and upper bounds: 90
variables with only upper bounds: 0
Total number of equality constraints.................: 150
Total number of inequality constraints...............: 816
inequality constraints with only lower bounds: 30
inequality constraints with lower and upper bounds: 0
inequality constraints with only upper bounds: 786
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du
alpha_pr ls
0 2.4459442e+005 7.86e+003 5.86e+002 0.0 0.00e+000 - 0.00e+000
0.00e+000 0
1 2.3713045e+005 7.62e+003 1.94e+008 0.0 8.31e+001 -4.0 1.86e-003
3.15e-002f 1 LL sigma=1.00e+002 xi=4.45e-002
LARGESIGMA
2 2.3648669e+005 7.60e+003 1.51e+011 -5.0 4.66e+001 9.8 4.74e-001
2.76e-003f 1 LL sigma=1.25e-009 xi=1.11e-002
3 2.3642274e+005 7.60e+003 5.84e+012 0.0 3.47e+001 11.2 1.00e+000
2.80e-004f 1 LL sigma=1.00e+002 xi=1.11e-002
LARGESIGMA
4 2.3641951e+005 7.60e+003 1.84e+013 0.0 3.42e+001 11.6 1.00e+000
1.45e-005h 1 LL sigma=1.00e+002 xi=2.59e-002
LARGESIGMA
5 1.5663229e+005 5.04e+003 3.53e+013 0.0 3.28e+001 12.0 9.80e-001
4.15e-001f 1 FL
6 9.8258906e+004 3.49e+003 4.98e+013 0.0 2.14e+001 12.5 1.00e+000
5.86e-001f 1 FL
....===>>> Looking to converge...but then "restart".... <<<==========
45 2.9076622e+003 6.78e+001 9.81e+012 0.0 1.39e+000 12.8 1.00e+000
7.60e-003h 1 FL
46r 2.9076622e+003 6.78e+001 1.00e+003 1.8 0.00e+000 12.3 0.00e+000
4.02e-007R 7
47r 3.8972185e+003 3.35e+002 3.50e+003 -5.0 5.51e+004 - 5.38e-004
1.10e-003f 1 sigma=2.22e-011 xi=2.81e-011 z
48r 3.8654909e+003 3.13e+002 1.54e+003 0.0 1.65e+001 2.0 8.30e-001
6.65e-002h 1 sigma=6.31e-001 xi=1.00e-010
49r 3.7310981e+003 2.35e+002 2.05e+003 0.0 1.04e+001 2.4 4.20e-001
2.61e-001f 1 sigma=6.74e-001 xi=3.53e-004
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du
alpha_pr ls
50r 3.5646081e+003 1.53e+002 3.21e+003 0.0 5.46e+000 2.9 1.16e-001
4.14e-001f 1 sigma=1.80e+000 xi=8.94e-003 LA
RGESIGMA
51r 3.4980832e+003 1.09e+002 2.08e+003 0.0 8.12e+000 2.4 5.63e-001
4.20e-001f 1 sigma=5.97e-001 xi=1.23e-002
52 3.4973446e+003 1.09e+002 7.42e+001 0.0 2.46e+003 - 2.69e-004
1.60e-003f 1 LL sigma=1.97e+001 xi=3.70e-002
LARGESIGMAL
53 3.4973249e+003 1.09e+002 7.41e+001 -0.3 6.43e+002 - 2.03e-003
3.97e-004h 1 LL sigma=5.49e-001 xi=7.77e-004
L
54 3.4988626e+003 1.07e+002 6.99e+011 0.0 9.88e-001 11.9 1.00e+000
6.65e-002h 1 LL sigma=1.00e+002 xi=6.11e-005
LARGESIGMA
....===>>> Now coasting into abnormal termination <<<==========
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du
alpha_pr ls
280r 2.9778833e+003 1.00e+000 5.64e-002 -5.0 3.00e+000 - 1.00e+000
1.00e+000h 1 sigma=3.21e-001 xi=9.97e-001
281r 2.9889141e+003 1.00e+000 2.54e-001 -5.0 1.99e+000 - 1.00e+000
1.00e+000h 1 sigma=5.28e-001 xi=6.98e-002 C
282r 2.9945604e+003 1.00e+000 2.65e-002 -5.0 9.55e-001 - 1.00e+000
1.00e+000h 1 sigma=4.72e-001 xi=5.59e-001 C
283r 2.9985700e+003 1.00e+000 7.22e-003 -5.0 5.22e-001 - 1.00e+000
1.00e+000h 1 sigma=4.94e-001 xi=7.67e-001 C
284r 3.0017930e+003 1.00e+000 5.59e-003 -5.0 5.08e-001 - 1.00e+000
1.00e+000h 1 sigma=4.39e-001 xi=7.58e-001 C
285r 3.0042192e+003 1.00e+000 3.39e-003 -5.0 4.06e-001 - 1.00e+000
1.00e+000h 1 qS sigma=4.15e-001 xi=7.68e-001
C
286r 3.0057995e+003 1.00e+000 1.74e-003 -5.0 2.58e-001 - 1.00e+000
1.00e+000h 1 qSS sigma=4.20e-001 xi=7.75e-001
C
287r 3.0067827e+003 1.00e+000 7.00e-004 -5.0 1.69e-001 - 1.00e+000
1.00e+000h 1 q sigma=3.95e-001 xi=7.76e-001 C
Exception of type: RESTORATION_FAILED in file "IpRestoFilterConvCheck.cpp"
at line 130:
Exception message: Restoration phase converged to a point with small
primal infeasibility
exit code 4
<BREAK>
Here's a run which eventually achieves solution. Only difference from the
run above, is I numerically tightened the "lace" edge length constraint
upper bound:
=======================================================================
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du
alpha_pr ls
0 2.4459442e+005 7.93e+003 5.86e+002 0.0 0.00e+000 - 0.00e+000
0.00e+000 0
1 1.7710790e+005 1.20e+004 8.35e+009 0.0 8.94e+001 -4.0 2.33e-003
9.99e-001f 1 LL sigma=8.98e+001 xi=5.02e-002
LARGESIGMA
2 1.7297579e+005 1.17e+004 3.61e+011 0.0 5.29e+001 9.8 1.00e+000
2.36e-002f 1 LL sigma=1.00e+002 xi=2.36e-004
LARGESIGMA
3 1.7290147e+005 1.17e+004 5.75e+013 0.0 4.81e+001 12.1 1.00e+000
5.30e-004f 1 LL sigma=1.00e+002 xi=1.00e-002
LARGESIGMA
4 4.6795453e+004 3.72e+003 2.35e+013 0.0 5.20e+001 11.6 1.00e+000
1.00e+000f 1 LL sigma=1.46e-001 xi=1.19e-002
5 2.1667937e+004 1.46e+003 1.61e+013 0.0 2.27e+001 12.0 1.00e+000
1.00e+000f 1 LL sigma=6.39e-002 xi=8.30e-002
6 7.9911562e+003 4.70e+002 7.75e+012 0.0 2.36e+001 11.5 1.00e+000
1.00e+000f 1 LL sigma=3.34e-001 xi=5.34e-002
7 1.5968713e+003 2.42e+002 3.46e+012 0.0 2.26e+001 11.1 1.00e+000
1.00e+000f 1 LL sigma=3.34e-001 xi=7.90e-002
8 6.4805843e+002 4.15e+002 1.49e+012 0.0 1.76e+001 10.6 1.00e+000
1.00e+000f 1 LL sigma=4.80e-001 xi=4.71e-002
9 6.4214989e+002 3.13e+002 1.26e+012 -5.0 5.02e+000 11.0 4.80e-001
3.31e-001h 1 LL sigma=1.35e-011 xi=5.47e-002
....===>>> Similar kind of "restart" behavior from before .... <<<===
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du
alpha_pr ls
40r 6.4246486e+002 2.50e+001 9.85e+002 0.0 9.23e+003 - 1.55e-002
2.27e-003f 1 sigma=7.51e-001 xi=5.41e-005
41r 6.9409732e+002 2.48e+001 9.88e+002 0.0 1.49e+001 2.0 9.08e-002
2.03e-001f 1 sigma=2.02e-001 xi=1.12e-004
42 6.9743986e+002 2.44e+001 2.09e+001 -5.0 5.24e+001 - 7.67e-003
1.37e-002h 1 LL sigma=9.62e-011 xi=2.29e-003
L
43 7.3879719e+002 2.94e+001 2.36e+001 0.0 7.06e+001 - 1.58e-002
2.41e-001f 1 LL sigma=2.15e-001 xi=2.37e-004
L
44 7.2928717e+002 4.64e+001 2.26e+001 0.0 1.21e+002 - 1.60e-001
1.48e-001f 1 LL sigma=8.41e-001 xi=1.42e-004
L
45 7.3197857e+002 4.54e+001 4.61e+008 0.0 4.95e+000 8.0 1.00e+000
2.18e-002h 1 LL sigma=1.00e+002 xi=3.14e-003
LARGESIGMA
46 7.3215186e+002 4.53e+001 2.22e+009 0.0 1.64e+000 9.3 7.58e-001
2.43e-003h 1 FL
47 7.4036943e+002 4.02e+001 8.04e+009 0.0 1.54e+000 9.7 8.32e-001
1.36e-001h 1 FL
48 7.7373960e+002 2.12e+001 1.60e+010 0.0 1.39e+000 10.2 9.75e-001
7.10e-001h 1 FL
49 7.7435238e+002 2.10e+001 2.63e+010 0.0 6.33e-001 10.6 1.00e+000
1.93e-002h 1 FL
..... And finally a solution .....
220 6.0508181e+002 1.08e-001 6.86e+006 -1.1 4.70e+000 4.0 2.26e-001
1.25e-001f 4 FL
221 6.0507691e+002 1.03e-001 8.65e+006 -1.1 4.26e+000 3.5 8.79e-001
5.46e-002h 1 FL
222 6.0498743e+002 1.14e-001 7.98e+005 -1.1 6.42e-001 3.0 9.50e-001
1.00e+000f 1 FL
223 6.0213392e+002 1.22e-001 6.16e+005 -1.1 1.29e+000 2.5 2.74e-001
1.00e+000f 1 FL
224 6.0205016e+002 6.54e-003 6.04e+003 -1.1 8.30e-002 2.1 9.89e-001
1.00e+000f 1 FL
225 6.0174872e+002 2.37e-003 5.68e+002 -1.1 7.71e-002 1.6 9.01e-001
1.00e+000f 1 FL
226 6.0181161e+002 1.27e-003 6.53e-001 -1.1 4.99e-002 1.1 1.00e+000
1.00e+000f 1 FL
227 6.0093229e+002 3.44e-003 3.66e-001 -1.5 9.21e-002 0.6 9.30e-001
1.00e+000f 1 LL sigma=4.30e-001 xi=1.22e-001
228 5.9785469e+002 3.23e-002 5.23e-001 -2.2 3.60e-001 0.2 1.00e+000
1.00e+000f 1 LL sigma=1.51e-001 xi=2.15e-002
229 5.9399308e+002 8.09e-002 3.41e-001 -1.7 7.04e-001 -0.3 1.00e+000
7.13e-001f 1 LL sigma=3.11e+000 xi=6.64e-002
LARGESIGMA
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du
alpha_pr ls
230 5.8943234e+002 9.62e-002 2.75e-001 -2.2 1.38e+000 -0.8 5.61e-001
5.03e-001f 1 LL sigma=3.61e-001 xi=1.97e-002
231 5.8071692e+002 4.25e-001 5.09e-001 -2.3 2.75e+000 -1.3 8.67e-001
8.78e-001f 1 LL sigma=4.16e-001 xi=2.02e-002
232 5.7610349e+002 3.01e-001 4.20e-001 -2.7 3.26e+000 -1.7 8.40e-001
8.31e-001f 1 LL sigma=3.74e-001 xi=2.76e-002
233 5.7464794e+002 1.59e-001 2.53e-001 -2.5 2.96e+000 -2.2 9.71e-001
1.00e+000f 1 LL sigma=1.00e+000 xi=2.35e-002
234 5.7448613e+002 2.69e-001 4.76e-002 -3.1 1.87e+000 -2.7 9.90e-001
1.00e+000h 1 LL sigma=3.05e-001 xi=1.71e-002
235 5.7446688e+002 2.14e-001 8.39e-002 -4.4 1.21e+001 - 6.53e-001
1.00e+000h 1 LL sigma=4.76e-002 xi=1.96e-002
LC
236 5.7446334e+002 8.98e-003 2.62e-002 -4.7 1.93e+000 - 9.24e-001
1.00e+000h 1 LL sigma=5.57e-002 xi=4.90e-002
LC
237 5.7446276e+002 1.30e-002 5.90e-003 -5.0 6.41e-001 - 9.78e-001
1.00e+000h 1 LL sigma=8.16e-003 xi=5.06e-002
LC
238 5.7446216e+002 4.65e-002 1.55e-003 -5.0 8.76e-001 - 9.69e-001
1.00e+000h 1 LL sigma=2.21e-002 xi=1.61e-001
LC
239 5.7446166e+002 2.77e-001 3.48e-003 -5.0 1.12e+000 - 8.98e-001
1.00e+000h 1 LL sigma=1.64e-002 xi=4.15e-002
LC
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du
alpha_pr ls
240 5.7446124e+002 6.14e-002 3.01e-003 -5.0 6.20e-002 -1.4 1.00e+000
7.81e-001h 1 LL sigma=1.00e+002 xi=1.29e-002
LARGESIGMA
241 5.7446116e+002 4.67e-004 3.46e-004 -5.0 2.34e-002 -1.8 1.00e+000
1.00e+000h 1 LL sigma=3.91e+000 xi=1.01e-002
LARGESIGMA
242 5.7446076e+002 1.33e-002 1.62e-003 -5.0 1.40e-001 -2.3 1.00e+000
6.67e-001h 1 LL sigma=6.05e-001 xi=5.42e-001
243 5.7445927e+002 1.21e-001 5.05e-003 -5.0 8.41e-001 -2.8 4.61e-001
3.37e-001h 1 LL sigma=8.57e-002 xi=1.44e-003
244 5.7445797e+002 6.42e-003 1.84e-003 -4.8 2.33e-001 -2.4 1.00e+000
9.70e-001h 1 LL sigma=1.46e+001 xi=1.80e-002
LARGESIGMA
245 5.7445742e+002 8.56e-003 1.45e-002 -5.0 8.62e-001 -2.9 6.40e-001
9.92e-002h 1 LL sigma=6.42e-005 xi=1.02e-002
246 5.7445768e+002 8.88e-003 1.02e-002 -3.2 3.65e+000 -3.3 1.09e-001
2.46e-002f 1 LL sigma=1.00e+002 xi=9.18e-003
LARGESIGMA
247 5.7445600e+002 2.04e-002 5.75e-003 -3.9 5.92e-001 -2.9 2.27e-001
1.00e+000h 1 LL sigma=1.80e+000 xi=2.41e-003
LARGESIGMA
248 5.7445361e+002 4.52e-002 3.88e-002 -5.0 3.31e+000 -3.4 7.04e-001
1.44e-001h 1 LL sigma=1.20e-005 xi=3.42e-002
249 5.7443814e+002 1.10e+000 4.72e-002 -4.7 3.43e+002 -3.9 1.28e-002
1.18e-002h 1 FL
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du
alpha_pr ls
250 5.7443421e+002 1.07e+000 9.34e-002 -4.7 2.33e+001 - 2.76e-001
4.05e-002h 1 FL
251 5.7442930e+002 4.95e-001 8.28e-002 -4.7 2.63e+001 - 4.94e-002
5.39e-001h 1 FL
252 5.7442729e+002 2.97e-001 1.41e-002 -4.7 1.03e+001 - 8.82e-001
4.00e-001f 1 FL
253 5.7442516e+002 2.26e-002 9.45e-003 -4.7 1.17e+001 - 1.55e-001
1.00e+000h 1 FL
254 5.7442521e+002 1.91e-003 1.91e-003 -4.7 3.24e+000 - 7.99e-001
1.00e+000h 1 FL
255 5.7442497e+002 7.02e-005 3.62e-005 -5.0 7.01e-002 - 9.81e-001
1.00e+000h 1 LL sigma=2.64e-002 xi=7.24e-005
LC
Number of Iterations = 255
Objective Value = 5.7442496531155632e+002
Primal Infeasibility = 7.0215073861845667e-005
Dual Infeasibility = 3.6164516794445767e-005
Complementarity = 1.1225427732328427e-006
Frank J. Iannarilli, franki at aerodyne.com
Aerodyne Research, Inc., 45 Manning Rd., Billerica, MA 01821 USA
www.aerodyne.com/cosr/cosr.html
More information about the Coin-ipopt
mailing list