MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: variable metric method automatic gradient yields Indeterminate

  • To: mathgroup at smc.vnet.net
  • Subject: [mg70448] Re: variable metric method automatic gradient yields Indeterminate
  • From: Peter Pein <petsie at dordos.net>
  • Date: Mon, 16 Oct 2006 02:36:29 -0400 (EDT)
  • References: <egse3s$crc$1@smc.vnet.net>

Chris Chiasson schrieb:
> A user-defined augmented lagrange multiplier method for NMinimize
> drives a (user defined) variable metric method for FindMinimum. The
> NMinimize routine ends up creating penalty functions that have
> "discontinuous" first order derivatives due to the presence of
> functions like Max. At the points of discontinuity in the derivative,
> the Indeterminate result usually ends up multiplied by zero. The limit
> of the derivative exists.
> 
> for example, the function passed to FindMinimum is
> func=Max[0,-X[1]]^2+Max[0,-1+X[1]+X[2]]^2+(-1+X[1])^2+(-1+X[2])^2
> 
> its derivative with respect to X[1] is
> 2*(-1+Max[0,-1+X[1]+X[2]]*Piecewise[{{1,X[1]+X[2]>1}},0]+
> Max[0,-X[1]]*Piecewise[{{-1,X[1]<0},{0,X[1]>0}},Indeterminate]+X[1])
> 
> Notice that when X[1] is zero, the Piecewise returns Indeterminate,
> which is multiplied by zero from the nearby Max function. However,
> 0*Indeterminate is still Indeterminate in Mathematica. When the
> derivative is evaluated at X[1]=zero, the answer returned is
> Indeterminate. This totally messes up the numerical routine.
> 
> the limit of D[func,X[1]] as X[1]->0 is
> Piecewise[{{-2,X[2]<1}},2*(-2 +X[2])]
> 
> I am tempted to check the gradient vector for Indeterminate results,
> look up the "corresponding" variable (heh, how do I really know which
> one is responsible?), and take the limit as that variable approaches
> the value I wanted to evaluate at. I don't know how well that will
> work in practice.
> 
> So, does anyone have any suggestions?

Hi Chris,

PiecewiseExpand your func:

func =
PiecewiseExpand[Max[0,-X[1]]^2+Max[0,-1+X[1]+X[2]]^2+(-1+X[1])^2+(-1+X[2])^2];

FreeQ[grad = D[func, {X /@ {1, 2}}], Indeterminate, Infinity]
--> True

FindMinimum[func, {X[1], 1}, {X[2], 1}]
--> {0.33333333333333337,
  {X[1] -> 0.6666666666666667,
   X[2] -> 0.6666666666666666}}

Peter


  • Prev by Date: Re: Is it possible to "pre-evaluate" parts of pure function?
  • Next by Date: Re: Demostration
  • Previous by thread: Re: variable metric method automatic gradient yields Indeterminate
  • Next by thread: Re: Re: variable metric method automatic gradient yields Indeterminate