Re: Re: variable metric method automatic gradient yields Indeterminate
- To: mathgroup at smc.vnet.net
- Subject: [mg70460] Re: [mg70448] Re: variable metric method automatic gradient yields Indeterminate
- From: "Chris Chiasson" <chris at chiasson.name>
- Date: Tue, 17 Oct 2006 02:58:18 -0400 (EDT)
- References: <egse3s$crc$1@smc.vnet.net> <200610160636.CAA27862@smc.vnet.net>
that's weird I would have expected the same answer with and without PiecewiseExpand On 10/16/06, Peter Pein <petsie at dordos.net> wrote: > 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 > > -- http://chris.chiasson.name/
- References:
- Re: variable metric method automatic gradient yields Indeterminate
- From: Peter Pein <petsie@dordos.net>
- Re: variable metric method automatic gradient yields Indeterminate