Speeding up FindMinimum setup
- To: mathgroup at smc.vnet.net
 - Subject: [mg86652] Speeding up FindMinimum setup
 - From: Art <grenander at gmail.com>
 - Date: Sun, 16 Mar 2008 04:39:29 -0500 (EST)
 
I am having trouble with the time FindMinimum takes to make it's first
step in an optimization. I am doing something wrong but I am not sure
what. This is a repost of a previous question that I phrased poorly.
I am minimizing a convex f: R^n->R with derivative df: R^n->R^n using
FindMinimum. A toy example,
n = 1000;
f[k_] := k.k
df[k_] := 2k
I find the minimal k starting at random k0:
k0 = RandomReal[1, n];
ker = Array[k, n];
min = Reap[
  t0 = AbsoluteTime[];
  FindMinimum[f[ker], Transpose[{ker, k0}], Gradient -> df[ker],
    StepMonitor :> Sow[AbsoluteTime[] - t0]]
];
min[[2,1]] gives the times of the steps
(Above is a bad example as it converges in one step.)
For my particular convex f, FindMinimum takes a very long time before
it makes it's first step but then proceeds very quickly. And time
scales superlinearly with n. It takes so long that I have resorted to
a C Mathlink function that does BFGS or ConjugateGradient (from Press
et al., Numerical Recipes, v3) and calls f and df through Mathlink.
What is FindMinimum doing during this time before the first step?
Compiling f and df? It does this even when I precompile f and df and
specify Method. How do I specify my problem so it works faster? I
would like it to just start making optimization steps because it's
surprisingly efficient even with n large when it gets going.
Also, thanks to whoever wrote all the excellent tutorial documentation
for the optimization functions in Mathematica and the examples in
UnconstrainedProblems.m.
Art.
- Follow-Ups:
- Re: Speeding up FindMinimum setup
- From: Carl Woll <carlw@wolfram.com>
 
 
 - Re: Speeding up FindMinimum setup