Mathematica in conjunction with outside program; NMinimize fails. Symbolic v. numeric evaluation problem?
- To: mathgroup at smc.vnet.net
- Subject: [mg98875] Mathematica in conjunction with outside program; NMinimize fails. Symbolic v. numeric evaluation problem?
- From: Andreas Pape <apape at binghamton.edu>
- Date: Mon, 20 Apr 2009 19:12:19 -0400 (EDT)
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 irrelevant)
This function (successfully) runs the outside 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 error:
NetLogo`Private`NetLogo::"compilerException" : "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 function 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 way with:
NMaximize, FindMaximum, FindMimimum, etc.
Thank you.
Sincerely,
Andreas Duus Pape