       Keeping global parameters in an evaluated function

• To: mathgroup at smc.vnet.net
• Subject: [mg113251] Keeping global parameters in an evaluated function
• From: Davide Mancusi <d.mancusi at ulg.ac.be>
• Date: Wed, 20 Oct 2010 04:10:08 -0400 (EDT)

```Hello everyone,

I have a function that depends on some variables and a parameter (say
c). My goal is to find the global minimum of the function for a given
value of the parameter, say c=0. However, the function has a lot of
local minima for c=0, and is thus very difficult to hit the global
one. For c=1, however, the function is much smoother, and the
minimization algorithms work pretty well.

What I'm trying to do is to change the value of the parameter
continuously while Mathematica minimizes the function. By doing so I
hope to trap the minimization algorithms close to the global minimum
using the smooth version of the function, and then slowly let c go to
0.

I have come up with the following toy model (I use NMinimize in the
real problem, but that shouldn't be important):
f[x_] := (x - c)^4
c=1;
iterations=1;
FindMinimum[ f[x], {x, 1001}, StepMonitor :> {c = c/2; iterations+
+} ]
Print[{c // N,iterations}]
If I run this I get
{4.48416*10^-32, {x -> 1.}}
{1.45519*10^-11,37}
The algorithm finds the minimum at x==1 while I would like it to find
it close to 1.45519*10^-11.

I think the problem lies in the fact that f[x] is evaluated only once,
at the beginning of the minimization algorithm, and the global value
of c gets substituted. Thus, even if I change c later, that doesn't
affect the function being minimized.

Can anyone suggest a way to update c from within the minimization
routine?