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

**Follow-Ups**:**Re: Re: variable metric method automatic gradient yields Indeterminate***From:*"Chris Chiasson" <chris@chiasson.name>