Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1252to1256
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Arrays umschaufeln 2.0 (Downhill Simplex)

Arrays umschaufeln 2.0 (Downhill Simplex)
Heiko
Hallo Leute,
Die Sache mit der Uebertragung von Werten von einem Array in ein anderes geht in die naechste Runde....
Bitte nur weiterlesen, wer sich wirklich dafuer interessiert... sonst waere es zu langweilig...
Hintergrund:
Ich verwende einen Downhill-Simplex Algorithmus zur Kurvenapassung. Dabei wird die Summe der kleinsten Quadrate minimiert.
Der Simplex ist eine geometrische Figur, die aus allen anzupassenden Parametern gebildet wird.
Die Parameter stehen bei mir in einer Tabelle aus 5 Spalten und 7 Zeilen. Daraus bastle ich einen Parameter-Array P(m, p) (bei Option Base 1). Dabei steht m fuer die maximale Anzahl der einzubeziehenden Modelle. Diese Zahl ist variabel (1<= m <=5). p sind die jeweiligen Parameter dieser Modelle (Profilfunktionen wie z.B. Gauss).
Der Simplex interessiert sich jedoch nur fuer die absolute Anzahl n der Parameter, also n = m * p.
Im Extremfall sind das 35 Parameter. Der Simplex sieht dann so aus S(n, n+1).
Bisher ist es kein Problem, die Daten aus meinem 2-dimensionalen Array P(m, p) in S(n,n+1) zu uebertragen und auch wieder umgekehrt, weil alle Parameter eines Modells m benutzt werden und dann einfach untereinander gereiht werden koennen.
Jetzt kommt das eigentliche Problem:
Bei der Optimierung kann es sinnvoll sein, willkuerlich einzelne Parameter zu "fixieren", d. h., diese nicht in den Simplex mit einzubeziehen. Das macht den Simplex deutlich kleiner und auch schneller.
Frage:
Wie koennte man es hinkriegen, dass jeder Parameter, der "mitmachen darf", das auch weiss und vor allem auch spaeter noch weiss, wo er herkam.
Wenn ich z.B. aus Modell 1 (also Spalte 1) nur die Parameter 1,3 und 6 verwende und aus Modell 2 2, 3 und 5, werden die ja im Simplex einfach neu angeordnet und durchnummeriert, hier von 1 bis 6, also
S(1,...) = P(1, 1)
S(2,...) = P(1, 3)
S(3,...) = P(1, 6)
S(4,...) = P(2, 2)
S(5,...) = P(2, 3)
S(6,...) = P(2, 5)
... steht fuer n+1, darum kuemmert sich der Algorithmus selbst...
Wie koennte eine Loesung aussehen, dass jeder Parameter spaeter noch weiss, welcher er vorher war...?
Ich freue mich auf Vorschlaege und Diskussionen.
Danke im voraus, Heiko

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Arrays umschaufeln 2.0 (Downhill Simplex)
27.02.2012 18:24:44
Christian
Hallo Heiko.
das bezieht sich wohl auf diesen Thread:
https://www.herber.de/forum/archiv/1252to1256/t1252223.htm
ohne jetzt zu tief in dein Problem zu tauchen, schlage ich vor:
- lass den Algorithmus mit Ganzzahl und Rest Rückwärts laufen um an die alte Pos. zu kommen
oder
- speicher die alte Postion im Array (zB. in der 3.Dimension, oder sonstwo...)
Gruß
Christian
AW: Arrays umschaufeln 2.0 (Downhill Simplex)
27.02.2012 18:34:06
Heiko
hi, Christian,
gut aufgepasst ;-)
Der alte thread war geloest, daher hatte ich mich nicht darauf bezogen.
Ich hatte auch schon daran gedacht, den Simplex Array zu erweitern, ich denke aber, dass er das nicht moegen wuerde...
Vermutlich geht es aber nur ueber diesen Ansatz, dem Parameter seine alte Position irgendwie mitzugeben...
Anzeige
AW: Arrays umschaufeln 2.0 (Downhill Simplex)
27.02.2012 19:06:48
Christian
Warum er das nicht moegen sollte, hab ich nicht ganz verstanden.
Die Zuordnung könntest du natürlich auch in einem weiteren Array speichern, ggf. auch ein assoziativen Array, s'gibt viele Wege nach Rom...
das Prinzip meiner ersten beiden Vorschläge bei einem 2x4-Array - auf Basis 0:
Option Explicit
Sub TestIt1()
Dim vntSrc, vntDst(1, 3), vntPos(7)
Dim i&
'Quelle:
vntSrc = Array("a", "b", "c", "d", "e", "f", "g", "h")
'Ziel: umwandeln in "2x4" Array
For i = 0 To UBound(vntSrc)
vntDst(i \ 4, i Mod 4) = vntSrc(i)
Next
'zurück in "1x8" Array
For i = 0 To UBound(vntSrc)
vntPos(i) = vntDst(i \ 4, i Mod 4)
Next
End Sub
Sub TestIt2()
Dim vntSrc, vntDst(1, 3, 1)
Dim i&
'Quelle:
vntSrc = Array("a", "b", "c", "d", "e", "f", "g", "h")
'Ziel: umwandeln in "2x4" Array
For i = 0 To UBound(vntSrc)
vntDst(i \ 4, i Mod 4, 0) = vntSrc(i)
vntDst(i \ 4, i Mod 4, 1) = i           'alte Position merken
Next
End Sub
wie man den Spaß auf Basis 1 umrechnet kennst du ja aus dem alten Thread.
Gruß
Christian
Anzeige
AW: Arrays umschaufeln 2.0 (Downhill Simplex)
27.02.2012 20:10:09
Heiko
Hi, Christian,
vielen Dank fuer den Vorschlag.
Der Simplex ist auf 2 Dimensionen ausgelegt. Ob er sich um eine weitere ergaenzenn laesst, muss ich probieren. Vielleicht klappt das auch, weil die relevanten Parameter werden ja nur in den ersten beiden Dimensionen veraendert. Die Dritte sollte dann die "Adresse" beinhalten und statisch sein...
Ich werde Deinen os Vorschlag gerne gleich testen.
Vielen Dank,
Heiko
Evtl können die AltPositt ja auch in einem ...
27.02.2012 19:09:08
Luc:-?
…parallelen Datenfeld gehalten wdn, Heiko,
falls das irgendwie mit dem Algorithmus kompatibel wäre.
Gruß Luc :-?
AW: Evtl können die AltPositt ja auch in einem ...
27.02.2012 19:39:02
Heiko
Hi, Luc,
vielen Dank fuer den Vorschlag. Sollte kein Problem sein, ein "Adress-Array" mitlaufen zu lassen...
Werde beide Wege (auch den von Christian) mal ausprobieren.
Gruesse, heiko
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige