Global optimization strategy with local interpolation

4 Ansichten (letzte 30 Tage)
Francesco Mazza
Francesco Mazza am 3 Sep. 2024
Bearbeitet: John D'Errico am 3 Sep. 2024
I'm developing a fitting routine to compare experimental spectra to a library of synthetic spectra computed for a set of 6 physical parameters. I'm using the least-absolute-residuals (LAR) as the score function to be minimized. So I'm facing a global optimization problem, where I need to find the global minimum of the resulting 6-dimensional LAR hypersurface.
In order to minimize the size of the synthetic library to use, I would like to use a relatively coarse grid (~10 points per parameter), and have a local interpolation of the LAR surface in the neighbourhood of the global minimum.
I need this routine to evaluate a large sample of experimental spectra (>10.000), so each evaluation must be cost-effective.
Can someone suggest an effective strategy using the Global Optimization Toolbox?

Antworten (1)

John D'Errico
John D'Errico am 3 Sep. 2024
Bearbeitet: John D'Errico am 3 Sep. 2024
You want to use a high dimensional local interpolation method, so in 6 dimensions. Since you are using it to find a local optimum, it needs to be a higher order interpolation. It sounds like you have a complete 6-dimensional lattice where the grid lives. But you want everything to be fast. The result may be something that is not differentiable. Anyway, some sort of piecewise higher order interpolant. And you want all of this done inside calls from the GOTB.
You want an effective strategy, based on this terribly vague description? Far too much hand waving there.
Start by doing SOMETHING, ANYTHING that works, that makes you happy with the result. The process would be:
  1. Choose an interpolant. Again, whatever makes you happy. Recognize that higher order interpolation in high dimensions will do strange things. Even a putatively LINEAR interpolation in higher dimensions will have some very strange looking artifacts! And you can't plot anything in 6 dimensions, so you can't even look at the result. Life sucks. Live with it.
  2. Build an objective function that allows you to return a scalar value for any input. Test it.
  3. Wrap an optimizer around the objective. Your choice. You may or may not need to worry about constraints. We don't know, since you don't tell us.
There really is not much more of a strategy than that.
Only if you find it is too slow at some point should you worry about speed. If it is too slow, and you don't want to re-read the complete works of Shakespeare for the third time (don't skip the footnotes) while you are waiting for it to finish, then you will look for the bottleneck(s). You will only then make decisions about whch corners to cut, what simplifications are acceptable.

Produkte


Version

R2024a

Community Treasure Hunt

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

Start Hunting!

Translated by