Re: Re: optimization
- To: mathgroup at smc.vnet.net
- Subject: [mg96584] Re: [mg96534] Re: [mg96523] optimization
- From: Francisco Gutierrez <fgutiers2002 at yahoo.com>
- Date: Mon, 16 Feb 2009 16:40:25 -0500 (EST)
Many thanks Bob. This is extremely useful and clear.By the way, I believe it is a perfect example of the reason why this list is so useful.If he cost is a little bit of noise, it is quite low with respect to the benefits.Fg --- On Mon, 2/16/09, Bob Hanlon <hanlonr at cox.net> wrote: From: Bob Hanlon <hanlonr at cox.net> Subject: [mg96584] [mg96534] Re: [mg96523] optimization To: mathgroup at smc.vnet.net Date: Monday, February 16, 2009, 6:54 AM A simplification u = Array[a, {3, 2}]; MapThread[Equal, {Map[Apply[Plus, #] &, u], Table[1, {Length[u]}]}] === Thread[Total /@ u == 1] True Another simplification largo = Flatten[u]; MapThread[Greater, {largo, Table[0, {Length[largo]}]}] == Thread[largo > 0] True Fix error Flatten[Thread[Total /@ u == 1]; Thread[largo > 0]] {a(1,1)>0,a(1,2)>0,a(2,1)>0,a(2,2)>0,a(3,1)>0,a(3,2)>0} Note that the semi-colon suppresses all of the first expression (i.e., the constraints that the rows sum to 1). You intended Join[Thread[Total /@ u == 1], Thread[largo > 0]] Nested tables can be written as a single Table Table[Table[a[k, i], {k, 1, 5}], {i, 1, 3}] == Table[a[k, i], {i, 3}, {k, 5}] True You don't need to Flatten prior to using Total Total[Flatten[u]] == Total[u, 2] True You have a circular definition for u (u defined in terms of u) paso2[individuo_, centro_, m_] := Module[ {largo, a, u}, u = Array[a, {Length[individuo], Length[centro]}]; largo = Flatten[u]; NMinimize[{Total[ Table[ EuclideanDistance[individuo[[k]], centro[[i]]]*u[[k, i]]^m, {i, Length[centro]}, {k, Length[individuo]}], 2], Join[Thread[Total /@ u == 1], Thread[largo > 0]]}, largo]] Bob Hanlon ---- Francisco Gutierrez <fgutiers2002 at yahoo.com> wrote: ============= Dear Friends:I have the following optimization function: paso2[individuo_,centro_,m_]:=Module[{largo,u=Array[u,{Length[individuo= ],Length[centro]}]},largo=Flatten[u];NMinimize[{Total[Flatten[Table[Table= [EuclideanDistance[individuo[[k]],centro[[i]]]*u[[k,i]]^m,{k,1,Length[indiv= iduo]}],{i,1,Length[centro]}]]], Flatten[MapThread[Equal,{Map[Apply[Plus,#]= &,u],Table[1,{Length[u]}]}];MapThread[Greater,{largo,Table[0,{Length[largo]= }]}]]},largo]] in Mathematica 7. However, this function is obviously not capturing the restriction that u[i,= j]+u[i,k]==1For example, u[1,1]+u[1,2] should sum up to 1this restricti= on corresponding to the following piece of code: Flatten[MapThread[Equal,{M= ap[Apply[Plus,#]&,u],Table[1,{Length[u]}]}] How can I solve this?In general, what I am doing wrong so as to not repeat = the error?ThanksFrancisco Guti=E9rrez