optimization slow convergence

Dear Sirs,
I'm trying to invert some geophyisical data using non linear optimization functions like fminunc and fmincon.
My ojective function is non linear but quite smooth,I guess.I don't have any analitical expression of the forward operator, since it's an output from a finite element code; for the same reason I don't have an analytical gradient of the objective function. For this reasons, I can use only medium-scale algortithm (BFGS).
My models are 2D representations of subsurface conductivities, and the minimum size for a real-life (not syntehtic) case, is about 1000 blocks (or parameters),each of them is of homogeneous conductivity.
The forward response of such models is a vector of resistivities taht must match at best the observed data; normally, the size of this vector is 20.
The obective function I must minimize, is a function of the misfit between obseved (or syntehtic) data and model response and a regularition term.
I've tried with different models, but as the size of the model grows, the convergence seems to be even more difficult: the difference from an iteration to the subsequent is very small, and so the solution is very close to the initial point. This occurs also after more than 30000 function evaluations.
At the beginning of my trials, using fminunc, I couldn't get convergence neither for small synthetic models (about 150 blocks), but changing the DiffMinChange and DiffMaxChange options (setting min=1 and max=10), after about 3000 function evaluations, I could get an acceptable solution.
With the aim to use the large scale algortihms, I tried to computed the gradient of the obj function numerically, but I came across big errors (discovered by 'DerivativeCheck' option).
Somewhere I read about the bad or good scaling if the objective function, and someone suggested to scale it to about 1; obviously, I tried also this, but without success.
Can anyone suggest me some possible solution?
Thanks a lot

回答(1 个)

Alan Weiss
Alan Weiss 2012-1-12

0 个投票

It is possible that you are trying to minimize a sum of squares of differences between your model and the observed response.
Instead of forming the sum of squares and minimizing, which is what I suspect you are doing with fminunc, perhaps you should try lsqcurvefit or lsqnonlin. For these two solvers, return the vector of response values and the vector of observed responses, but do not sum the squares. These solvers are often much more efficient than fminunc or fmincon on such fitting problems.
You might need to keep your rather high values of DiffMinChange and DiffMaxChange.
Good luck,
Alan Weiss
MATLAB mathematical toolbox documentation

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by