DMUG-Archiv 2004

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: FindMinimum mit selbstdefinierten Funktionen


Ok, der gezeigte Code drückte nicht aus, was ich wirklich tun will.
Hier nun das Original:

lw[l_] := LinearProgramming[{-4.32782601300991 + l[[1]]*1 + l[[2]]*1 + \
l[[3]]*0 + l[[4]]*0 + l[[5]]*0, -2.48029145527645 + l[[1]]*0 + l[[
        2]]*1 + l[[3]]*1 + l[[
        4]]*0 + l[[5]]*0, -6.15346408269995 + l[[
          1]]*0 + l[[2]]*1 + l[[3]]*1 + l[[4]]*1 + l[[
        5]]*0, -3.8197107770572 + l[[1]]*0 + l[[2]]*0 + l[[3]]*1 +
          l[[4]]*1 + l[[5]]*1}, {{}}, {}, {{0, 1}, {0, 1}, {
      0, 1}, {0, 1}}];

w[l_] := Sum[l[[i]], {i, 5}] + Part[lw[l],
1]*(-4.32782601300991 + l[[1]]*1 + l[[2]]*1 + l[[3]]*0 + l[[4]]*0 +
        l[[5]]*0) + Part[lw[
      l], 2]*(-2.48029145527645 + l[[1]]*0 + l[[2]]*1 + l[[3]]*1 +
        l[[4]]*0 + l[[5]]*0) + Part[lw[l], 3]*(-6.15346408269995 + l[[
        1]]*0 + l[[2]]*1 + l[[3]]*1 + l[[4]]*1 + l[[
    5]]*0) + Part[lw[l],
       4]*(-3.8197107770572 + l[[1]]*0 + l[[2]]*0 + l[[3]]*1 +
     l[[4]]*1 + l[[5]]*1);


w liefert also einen skalaren Wert.
Wie kann ich nun Minima von w suchen? (Der Code ist natürlich generiert, die reellen Koeffizienten variieren).

Eigentlich würde ich erwarten, dass

FindMinimum[w[{l1, l2, l3, l4, l5}], {l1, 0}, {l2, 0}, {l3, 0}, {l4, 0}, {l5, 0}]

korrekt ist, schließlich bietet die Dokumentation als Beispiel

FindMinimum[x\^4 + 3 \( x\^2\) y + 5  y\^2 + x + y, {x, 0.1}, {y,0.2}]

Hier ist die zu minimierende Funktion inline definiert, bei mir extern, was anscheinend micht erlaubt ist.

Vom erwähnten, zugegebenermassen unverstandenen FunctionalFindMinimum hatte ich mir eine Lösung erhofft.

Ich habe w so umdefiniert:
w[{l1_, l2_, l3_, l4_, l5_}] := l1 + l2 + l3 + l4 + l5 +
      Part[lw[{l1, l2, l3, l4, l5}], 1]*(-4.32782601300991 + l1*1 +
      l2*1 + l3*0 + l4*0 + l5*0) + Part[lw[{l1, l2, l3,
l4, l5}], 2]*(-2.48029145527645 + l1*0 + l2*1 + l3*1 + l4*0 +
            l5*0) + Part[lw[{l1, l2, l3, l4, l5}],
            3]*(-6.15346408269995 + l1*0 +
      l2*1 + l3*1 + l4*1 + l5*0) + Part[lw[{l1, l2, l3,
              l4, l5}], 4]*(-3.8197107770572 + l1*0 + l2*0 + l3*1 + l4*1 +
            l5*1);
um dann FunctionalFindMinimum so anzuwenden:

FunctionalFindMinimum[w, {1, 2, 3, 4, 5}]

kriege aber nur Fehlerausschriften.

From In[13]:=
Thread::tdlen: Objects of unequal length in \
1+\[LeftSkeleton]3\[RightSkeleton]+{{0,0},{0,0},{0,0},{0,0}} cannot be \
combined.
From In[13]:=
Thread::tdlen: Objects of unequal length in \
1.\[InvisibleSpace]+{}+{{}}+{-2.65565,\[LeftSkeleton]2\[RightSkeleton],8.\
18029}+{{0.,0.},{0.,0.},{0.,0.},{0.,0.}} cannot be combined.
From In[13]:=
Thread::tdlen: Objects of unequal length in \
1+\[LeftSkeleton]3\[RightSkeleton]+{{0,0},{0,0},{0,0},{0,0}} cannot be \
combined.
From In[13]:=
General::stop: Further output of Thread::tdlen will be suppressed during this \
calculation.
From In[13]:=
FindMinimum::fmgl: Gradient {\[LeftSkeleton]1\[RightSkeleton]} is not a \
length 5 list of real numbers at {x$18,x$19,x$20,x$21,x$22} = \
{1.,2.,3.,4.,5.}.
From In[13]:=
ReplaceAll::reps: {{x$22,5}} is neither a list of replacement rules nor a \
valid dispatch table, and so cannot be used for replacing.


Jens-Peer Kuska schrieb:

Hallo,

vielleicht l"ost Du erst mal das Problem, heraus zu finden,
das FindMinimum[] eine Zielfunktion mit einem *skalaren*


--
Intelligente Netze und Management verteilter Systeme
TU Berlin
Fakultät 4, Sekretariat EN 6
Einsteinufer 17
D-10587 Berlin
Tel. +49 30 314 79835 Fax +49 30 314 24573
http://www.ivs.tu-berlin.de


Antworten:
Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html