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

**References**:**Constraint evaluation in NMinimize***From:*Ray Koopman <koopman@sfu.ca>