On Mon, 8 Sep 2014 08:57:18 +0000, Olexiy Movchan wrote:
Hi Gilles,
Looks good to me. It is the explicit update now. I would like to
propose different names for the new function:
"applyConstraints()" or "renormalize()"
I had thought about the second one.
But, IMO, the (cosmetic) problem would be that those names could
seem to imply that the method is optional (i.e. users that don't
need the feature might implement a method that returns "null"),
whereas a validation is always applied (and the no-op behaviour
is thus to return the point).
Regards,
Gilles
Thanks,
Olexiy
-----Original Message-----
From: Gilles [mailto:gil...@harfang.homelinux.org]
Sent: Monday, September 08, 2014 3:11 AM
To: dev@commons.apache.org
Subject: Re: [math] Side effect of LevenbergMarquardtOptimizer
On Thu, 4 Sep 2014 12:52:24 -0400, Evan Ward wrote:
Hi Olexiy,
In my field we often encounter a similar problem when estimating
attitude since a quaternion is only a valid rotation when it is
normalized. We often escape this issue by estimating a "small"
adjustment to an apriori guess. (For the details see [1].) For this
technique to work the cost function must be smooth and the apriori
guess must be "close enough" to the true value. Both of these
assumptions are also required to apply a non-linear least squares
optimizer. Perhaps you can apply a similar technique to your
problem.
(It seems that your 'A'
parameter is orientation in 3D space.)
If there is a need for an extra steps, I would prefer to make those
explicit rather than depending on side effects of cost function
evaluation.
IIUC, the feature could be made explicit by adding a method to the
"MultivariateJacobianFunction" interface to allow the user to change
the point about to be evaluated:
interface MultivariateJacobianFunction {
Pair<RealVector, RealMatrix> value(RealVector point);
/** @param point Point provided by the optimizer. */
/** @return the point that will actually be evaluated. */
RealVector validate(RealVector point); }
Thus, in "LeastSquaresFactory":
private static class LocalLeastSquaresProblem
extends AbstractOptimizationProblem<Evaluation>
implements LeastSquaresProblem {
// ...
private final MultivariateJacobianFunction model;
// ...
public Evaluation evaluate(final RealVector point) {
final RealVector p = model.validate(point).copy(); // <---
Change here (at line 403).
if (lazyEvaluation) {
return new LazyUnweightedEvaluation(model,
target,
p);
} else {
final Pair<RealVector, RealMatrix> value = model.value(p);
return new UnweightedEvaluation(value.getFirst(),
value.getSecond(),
target,
p);
}
}
// ...
}
What do you think?
Best,
Gilles
Best Regards,
Evan
[1] Crassidis, John L., and John L. Junkins. /Optimal Estimation of
Dynamic Systems/. Boca Raton, FL: CRC, 2012.
On 09/04/2014 05:37 AM, Olexiy Movchan wrote:
Hello,
I created the math issue
https://issues.apache.org/jira/browse/MATH-1144.
In version 2.0, LevenbergMarquardtOptimizer passed point to
evaluator
by reference. So our software could modify it on every step of
algorithm.
In version 3.3, point is copied and then passed to evaluator, so it
can't be updated by evaluator.
We use LevenbergMarquardtOptimizer for 3d surface fitting
(cylinders,
cones, tori) by sampled points. And surface parameters should be
renormalized on every step of algorithm. Please see this
article:
http://nvlpubs.nist.gov/nistpubs/jres/103/6/j36sha.pdf
Also please read the description of MATH-1144 jira issue.
Can you modify optimizer or evaluator interface to allow in/out
parameters there?
Thanks,
Olexiy Movchan
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org