Re: Constraint evaluation in NMinimize

• To: mathgroup at smc.vnet.net
• Subject: [mg122661] Re: Constraint evaluation in NMinimize
• From: Daniel Lichtblau <danl at wolfram.com>
• Date: Sat, 5 Nov 2011 04:45:49 -0500 (EST)
• Delivered-to: l-mathgroup@mail-archive0.wolfram.com
• References: <201111041102.GAA29272@smc.vnet.net>

```On 11/04/2011 06:02 AM, Ray Koopman wrote:
> I want to minimize f[x] with respect to x, subject to g[x].
> Both f and g depend in part on h[x], so to avoid calculating h[x]
> twice I use an auxiliary variable:
>
>    NMinimize[{t = h[x]; f[x,t], g[x,t]}, {x}].
>
> That appears to work, but it depends on the constraint never being
> evaluated without first evaluating the minimand, and I can't find
> anything in the documentation that says that that will always be
> the case. Can anyone help?
>
> (I asked a similar question several years ago, at which time DrBob
> pointed me to sec 2.6.4 in the book, but it's not obvious to me if
> the standard evaluation procedure necessarily applies here.)
>

Could memoize h[x] for numeric x. That way you don't need to second
guess the evaluation internals of NMinimize.

h[x_?NumericQ] := h[x] = ...

I have some familiarity with those and offhand I've no idea if your
method above is guaranteed to work.

For purposes of speed it might also be useful to memoize f and g. Some
methods in NMinimize, such as DifferentialEvolution, may recompute at
the same points quite often.

An alternative might be:

objandconstraint[x_?NumericQ] := Module[{t}, t=h[x]; {f[x,t],g[x,t]}]

(This could also be memoized.)
Then do:

NMinimize[objandconstraint[x], {x}]

Caveat: I have not tried this (short on time at the moment) and make no
guarantee as to whether it will work. It might be DOA.

Daniel Lichtblau
Wolfram Research

```

• Prev by Date: Re: bug in Mathematica?
• Next by Date: Re: Impossible to move objects in dynamic graphics
• Previous by thread: Constraint evaluation in NMinimize
• Next by thread: Re: Constraint evaluation in NMinimize