Multiple outputs from FMINSEARCH function

9 visualizaciones (últimos 30 días)
Kevin Moerman
Kevin Moerman el 8 de Feb. de 2012
Editada: Cedric el 4 de Oct. de 2013
For FMINSEARCH in combination with a function MYFUN one could use:
[X,fval,exitflag,output]= fminsearch(@(X) myfun(X),X,options);
Normally the output of MYFUN is minimized through modification of the paramter(s) X. However if MYFUN is able to produce multiple outputs i.e.:
[ouput1,ouput2,ouput3,...,ouputN]=myfun(X)
It seems that FMINSEARCH aims to minimize ouput1 by default, which is fortunately what I need, and, following optimization FMINSEARCH outputs fval which is equivalent to the value of output1 for the best case of X. However I am also interested in the other outputs.
How can the other outputs be obtained? Function evaluations take a VERY long time so I'd like to avoid rerunning the problem.
Kevin

Respuestas (4)

Sean de Wolski
Sean de Wolski el 8 de Feb. de 2012
What you are describing is a multiobjective optimization problem. In the Optimization toolbox, fgoalattain will be your friend. If you have the Global Optimization Toolbox, gamultiobj may also be your friend.
  1 comentario
Kevin Moerman
Kevin Moerman el 8 de Feb. de 2012
Thanks for you rapid answer and for suggesting those functions I'll look into them in the future when I need to do multiobjective optimization. Currently though I'm not interested in that. I actually only want to optimize using output1. Its just that I want to view the other outputs (a set of quality metrics I've created) once optimizations is finished. Currently fminsearch does not provide me the other function outputs.
Kevin

Iniciar sesión para comentar.


Seth DeLand
Seth DeLand el 8 de Feb. de 2012
As long as myfun doesn't take a long time to evaluate, the simplest thing to do would be to call myfun again after the optimization with the optimal X that FMINSEARCH found.
It isn't guaranteed that the last time FMINSEARCH called myfun during the optimization, that it did so with the optimal X. The best X could have come from a previous evaluation. So it's a good idea to evaluate the function one final time to call it with the exact X that was returned.
  1 comentario
Kevin Moerman
Kevin Moerman el 8 de Feb. de 2012
This is what I've been doing so far but function evaluations take a very long time (>4hours) so its not ideal.

Iniciar sesión para comentar.


John D'Errico
John D'Errico el 8 de Feb. de 2012
By making one last call to MYFUN, with the converged values of your optimization.
If you really wanted to optimize some other output of MYFUN, this too is trivial to accomplish. Just put a wrapper function around MYFUN, selecting out only the output you want to optimize.
I think you are looking too hard for a solution to something obtainable by simple means.
  1 comentario
Kevin Moerman
Kevin Moerman el 8 de Feb. de 2012
IDEM Seth DeLand's answer. Function evaluations take >4hours so I'd like to know if there's an alternative. I can also save X and the other outputs which each run with a unique name (they dont take up too much space on disc) and then find the right data afterwards depending on the optimal X. However this seems a "ducktape" appraoch.

Iniciar sesión para comentar.


Alan Weiss
Alan Weiss el 8 de Feb. de 2012
I believe that Loren Shure's "memoize" post could be adapted to your problem: http://blogs.mathworks.com/loren/2006/02/08/use-nested-functions-to-memoize-costly-functions/

Categorías

Más información sobre Problem-Based Optimization Setup en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by