[Coin-ipopt] Filter foiling Least-Absolute-Deviations (LAD) models?
Frank J. Iannarilli
franki at aerodyne.com
Fri Jul 7 21:18:28 EDT 2006
Hi All,
I've been putz'ing for weeks on an NLP model, which employs a
Least-Absolute-Deviations (LAD) idiom. I'm concerned that the IPOPT filter
method (and perhaps filter mechanisms in general?) may hamper the ready
solution of LAD formulations. So I ask you if you agree with my point,
and/or might offer any remediating suggestions (model re-formulation, IPOPT
tuning/tweaks).
The NLP model attempts to wrap an "overlay" polyhedral mesh around the
outside (the convex hull) of an inner "cage" mesh. Furthermore, I want the
resulting overlay *edges* (distances between vertex pairs) to not differ
from pre-defined desired lengths by more than "stretch".
The "stretch" variable measures the maximum absolute deviation, that I wish
to minimize; ideally, it will optimize to near-zero. This is the source of
the LAD idiom to be employed. The primal variables of interest are the
overlay vertex coordinates v_i=(x_i,y_i,z_i), and absolute deviation
"stretch", so the NLP is formulated as so:
===================================================================
Minimize: sum_m(laceEdgeLength_m) + k*stretch
s.t.:
(LAD-a) -stretch <=
overlayDesiredEdgeLength_n - overlayActualEdgeLength_n
<= stretch;
(LAD-b) stretch >= 0; := bigNumber ## initialize stretch to be large
(a) alias: overlayActualEdgeLength_n := (v_n[i]-v_n[j]).(v_n[i]-v_n[j]);
(x).(y) is inner product of x,y vectors
(b) alias: laceEdgeLength_m := (v_m-r_m).(v_m-r_m);
r_m are fixed (constant) vectors (anchor points for "laces")
(c) laceEdgeLength_m < upperBound_laceEdgeLength_m;
(keeps overlay mesh from "wandering aimlessly" in solution space)
(d) overlay vertices to stay outside cage-mesh convex hull (expressed as
set of linear constraints, involving some auxiliary separating plane
variables; details omitted for brevity).
===================================================================
In diagnostic printout, I can see that IPOPT is NOT monotonically
decreasing the "stretch" variable. In fact, given the filter logic, this is
understandable. The solver can alternately reduce stretch (thereby
reducing the primal objective function), then increase stretch (thereby
reducing the LAD constraint violation).
By increasing the weight "k" on stretch (in the objective function), IPOPT
eventually returns a nice solution. However, for well-smaller or larger k
values, IPOPT returns solutions where "stretch" is objectionably too large.
I'm not understanding how/why stretch gets "stuck" in this manner.
I can live with such iterative tuning, for each problem instance, but I'd
rather not, and more importantly, I fear that others who attempt employing
LAD formulations may be pre-maturely frustrated.
BTW, my problem scaling seems well-posed (all my variables are centered and
typically of unit scale). I'm using IPOPT 3.1.0. Earlier, in place of the
LAD constraint, I employed fixed-edge-length equality constraints, to wit:
overlayDesiredEdgeLength_n == overlayActualEdgeLength_n
but this seemed to make the problem nearly unsolvable (i.e.,
hundreds-thousands of iterations, success only with finely-tuned lace
constraints).
Thanks in advance, and kudos to Andreas for his recent work on the build
infrastructure!
Regards,
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