6
$\begingroup$

I have been using FindMinimum to find a local minimum of a non-linear function within a constrained region.

How can I know which method Mathematica has selected to find the local minimum?

Thanks in advance!

$\endgroup$
  • $\begingroup$ Unfortunately, the practical answer is that you can't really find that out easily. However, you can specify which method to use. If you need to know what method is being used, I suggest you select the method yourself. There is a lot of helpful information on how to control methods in this tutorial: reference.wolfram.com/language/tutorial/… $\endgroup$ – Szabolcs Sep 5 '18 at 12:23
9
$\begingroup$

Excerpt from Some Notes on Internal Implementation of Mathematica:

  • With Method->Automatic and two starting values, FindMinimum uses Brent's principal axis method. With one starting value for each variable, FindMinimum uses BFGS quasi-Newton methods, with a limited memory variant for large systems.
  • If the function to be minimized is a sum of squares, FindMinimum uses the Levenberg–Marquardt method (Method->"LevenbergMarquardt").
  • With constraints, FindMinimum uses interior point methods.
$\endgroup$
  • $\begingroup$ Thank you. The problem is that I have a value for each variable and I have constraints, so I guess it uses interior point methods. Is there any way to know which one ? I need to know the exact method, since I have to report the method used. $\endgroup$ – Maria Sep 5 '18 at 12:07
  • $\begingroup$ There is a description of the Interior Point algorithm given on the reference side: reference.wolfram.com/language/tutorial/… $\endgroup$ – Julien Kluge Sep 5 '18 at 12:15
5
$\begingroup$

Select the Method that produces the SameQ result as Automatic

Select[{#, 
     FindMinimum[Abs[x + 1] + Abs[x + 1.01] + Abs[y + 1], {x, y}, 
       Method -> #] // Quiet} & /@ {"Gradient", "ConjugateGradient", 
    "InteriorPoint", "QuasiNewton", "Newton", "LinearProgramming", 
    "QuadraticProgramming", "LevenbergMarquardt"}, #[[2]] == 
    FindMinimum[Abs[x + 1] + Abs[x + 1.01] + Abs[y + 1], {x, y}, 
     Method -> Automatic] &] // Quiet

(* {{"QuasiNewton", {0.01, {x -> -1.00683, y -> -1.}}}} *)
$\endgroup$
  • $\begingroup$ Thanks! I just used your code and got the empty set. I just replaced your function by mine and added the constraints and the initial point. $\endgroup$ – Maria Sep 5 '18 at 14:58
  • $\begingroup$ @Maria - Without your function, constraints, and initial point, I cannot tell you what is going on. Recommend that you edit your question to include this information. Assuming that some random number is needed in the method used, you would need to use SeedRandom to force the same random number. $\endgroup$ – Bob Hanlon Sep 5 '18 at 15:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.