Re: Mathematica in conjunction with outside program; NMinimize fails.

• To: mathgroup at smc.vnet.net
• Subject: [mg98938] Re: Mathematica in conjunction with outside program; NMinimize fails.
• From: "Sjoerd C. de Vries" <sjoerd.c.devries at gmail.com>
• Date: Wed, 22 Apr 2009 05:11:59 -0400 (EDT)
• References: <gsivfv\$9dj\$1@smc.vnet.net>

```Hi ANdreas,

NMinimize as a first step tries to evaluate the function symbolicaly.
You can see this by using a function like

In[39]:= f[x_] := Module[{}, Print[x]; x]

In[40]:= NMinimize[f[y^2], y]

y^2

Out[40]= {0., {y -> 0.}}

You can prevent this behaviour by explicitely defining the function as
numeric:

g[x_?NumberQ] := Module[{}, Print[x]; x]

NMinimize[g[y^2], y]

0.0929857

0.0708309

0.133682

...

SingleModelRun[ parametervalue_?NumberQ ] := etc.

Cheers -- Sjoerd

On Apr 21, 1:11 am, Andreas Pape <ap... at binghamton.edu> wrote:
> Hello mathgroup.  I am using Mathematica in conjunction with an
> outside program (Netlogo is the program.)  In a nutshell, my error is =

> the following: I can call the outside program with a numeric value
> successfully, and Plot can call the outside program as one would
> expect.  However, NMinimize calls the outside program with the
> variable name, not a value, so it fails.  In short, I need to force
> NMinimize to pass a numeric value to the objective function, not a
> variable name.
>
> More details:
>
> I have the following functions defined in Mathematica:
>
>         SingleModelRun[ parametervalue_ ] := ....(definition ir=
relevant)
>                 This function (successfully) runs the out=
side program, setting a
> parameter equal to "parametervalue" (which is some number when I call
> the function).  It returns a value from the model.
>
>         Plot[ SingleModelRun[ x ], {x , 0, 1} ]
>                 Does what you expect: runs SingleModelRun=
for parameter values 0
> through 1, and plots the resulting return value each time.
>
>         NMinimize[ - SingleModelRun[ myvalue ], {myvalue} ]
>                 Does not work.  Returns the following e=
rror:
>
>                 NetLogo`Private`NetLogo::"compilerExcepti=
on" : "Nothing named
> MYVALUE has been defined"
>
>         (Note: NetLogo is the name of the outside program.)
>
> Which means that, oddly, NMinimize passes the *variable name*
> (myvalue) instead of the *variable value* to the function
> SingleModelRun; otherwise, there is no way the outside program would
> be aware of the variable name.
>
>         Is there a way to force Mathematica to evaluate the funct=
ion with a
> numeric value, not the variable name?  (I thought that's what "N" in =

> "NMinimize" meant, but apparently not.)
>
>         In case you were wondering, this fails in an identical wa=
y with:
> NMaximize, FindMaximum, FindMimimum, etc.
>
>         Thank you.
>
>                         Sincerely,
>                         Andreas Duus Pape

```

• Prev by Date: Re: Help with Speeding up a For loop
• Next by Date: Re: Help with Speeding up a For loop
• Previous by thread: Re: Mathematica in conjunction with outside program; NMinimize fails.
• Next by thread: Re: Mathematica in conjunction with outside program; NMinimize fails.