Sie sind nicht angemeldet.

  • Anmelden

1

29.07.2008, 16:14

Mathematiker? ;)

Hi,

hab hier ein mehr oder weniger interessantes Problem. Meine Mathe-Vorlesungen haben sich leider auf die "Basics" beschränkt, aber vielleicht hat jmd von euch ne Idee, wie sich folgendes elegant lösen lässt:



Bin für jegliche Ideen/Links/etc dankbar ;)

2

29.07.2008, 16:47

Verrät mir auch jemand ne praktische Anwendung zu sowas?

3

29.07.2008, 16:54

Die w_j so wählen, dass die Faktoren im zu maximierenden Produkt alle gleich gross sind? Oder zumindestens möglichst gleich (Euklidische Distanz usw.)?

4

29.07.2008, 17:57

Sorry Sheep falls ich auf der Leitung stehe, mein Mathe ist echt eingerostet.

Woraus ergibt sich, dass die Faktoren im Maximum alle (möglichst) gleich groß sein müssen?

Beispiel:

Quellcode

1
2
3
4
R=
      [,1]  [,2]
[1,] 0.999 0.001
[2,] 0.250 0.750


Das Maximum liegt hier bei w ~(0.75,0.25). Die Faktoren sind in dem Punkt 0.75 und 0.375. Vielleicht versteh ich dich falsch?

PS: Falls es eine Rolle spielt, reale Anwendungsfälle sind etwa in der Größenordnung von n=10k, m=100. Bin sicher in der Lage das recht gut heuristisch zu lösen, aber ein "exakter" Weg wäre halt eleganter / und evtl auch effizienter.

Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von »plexiq« (29.07.2008, 18:38)


5

29.07.2008, 18:35

Habs jetzt nicht ausprobiert, aber eine Idee wäre: Optimierung unter Nebenbedingungen:
1 Gleichungsnebenbedingung (Lagrangemultiplikator) für die Summe über die w = 1
sowie
m Ungleichungsnebenbedingen die sicherstellen, dass jedes w_{i} positiv bleibt.

Kannst mal nach Karush-Kuhn-Tucker Conditions googlen, wenn dich der Ansatz interessiert.

Kann jetzt aber nicht überblicken, ob du das auf die Weise analytisch lösen kannst.

6

29.07.2008, 18:46

Werds mir mal ansehn, danke schonmal.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »plexiq« (29.07.2008, 18:46)


ADA_Juger_

unregistriert

7

29.07.2008, 19:30

Zitat

Original von nC_$kittle_
Verrät mir auch jemand ne praktische Anwendung zu sowas?

8

29.07.2008, 19:34

ohne das produkt in der zielfunktion wäre es ein relativ simples LP, welches man mit den bekannten solvern lösen kann (geht sogar in excel zb).

durch das produkt ist die zf aber nimmer linear, KKT bedingunden sind da schonmal ein stichwort. habe dieses semester zwar fortgeschr. nichtlineare optimierung gehört aber ohne übungen oder lernen steige ich da nicht durch, sry^^

9

29.07.2008, 19:45

Zitat

Original von plexiq
Vielleicht versteh ich dich falsch?


Nö, es war nur eine Idee, weil das bei einem deutlich einfacheren Optimierungsproblem auch klappt. Für das Beispiel kommt man damit nicht auf die optimale Lösung, damit ist es natürlich hinfällig. Ok, man hätte vielleicht deutlich machen können, dass es nur ein nicht geprüfter Ansatz ist. :O

10

29.07.2008, 20:06

Zitat

Original von plexiq
Beispiel:

Quellcode

1
2
3
4
R=
      [,1]  [,2]
[1,] 0.999 0.001
[2,] 0.250 0.750


Ist es Zufall, oder ist die Zeilensumme von R immer 1?
Die Laufuindices sollen immer von 1 bis n,m laufen, oder? Ansonsten hat der Vektor w nicht Länge m sondern (m+1).
Ist die Matrix wirklich (n x m) oder doch (m x n), was üblicher wäre. Also bezeichnest du mit n die Zeilen und mit m die Spalten?!

Die Größenordung ist durchaus wichtig für das Problem. Was nützt dir eine geschlossene Lösung, wenn sie nicht praktikabel anwendbar ist? Vielleicht kommt man dann mit simulated annealing oder ähnlichem viel besser und robuster ans Ziel.
Bei der Lösung ist jedes Gewicht w_j eine Funktion aller Matrixeinträge R_ij, so wies auf den ersten Blick aussieht. Selbst bei einer (3x4)-Matrix wird es schon nervig, das hinzuschreiben - bei einer (100x100)-Matrix kannst du es vergessen.

Wenn du auch der Meinung bist, dass du die Lösung approximativ numerisch bestimmen willst, dann kann ich nochmal anfangen drüber nachzudenken. ;)

€dit:
Ach ja, ich glaube Physiker oder irgendwelche Angewandten lösen dir eventuell das Problem besser als Mathematiker. Also eventuell dahingehend den Threadtitel ändern.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »AtroX_Worf« (29.07.2008, 20:12)


11

29.07.2008, 20:40

Zitat

Original von AtroX_Worf
Ist es Zufall, oder ist die Zeilensumme von R immer 1?


Ist ursprünglich nicht der Fall, aber man kann ja ohne weiteres die Zeilen auf Summe 1 transformieren, ohne dass sich die Lösung ändert.

Zitat


Die Laufuindices sollen immer von 1 bis n,m laufen, oder? Ansonsten hat der Vektor w nicht Länge m sondern (m+1).
Ist die Matrix wirklich (n x m) oder doch (m x n), was üblicher wäre. Also bezeichnest du mit n die Zeilen und mit m die Spalten?!


Stimmt, die Laufindices sind eigentlich von 1 bis n,m. Und ja, n Zeilen / m Spalten. (Sorry wenn ich da unübliche / falsche Notation verwendet hab, werd später im OP nachbessern)

Größenordnung in der realen Anwendung ist wie gesagt ~10.000 Zeilen x 100 Spalten.

Bzgl Heuristischer Opimierung hab ich eh einigermaßen brauchbare Vorkenntnisse, war mir nur nicht sicher obs für das Problem evtl. auch ne einfache exakte Lösung gibt. Hätte ja sein können dass die versammelten Mathematiker alle "trivial!" schreien ;)

Schonmal großes Thx an alle :)

@Anwendung:
Problem ist bei einem meiner Projekte bei pokerstrategy.de aufgetaucht. (Gab kürzlich ein kleines Interview, für alle die interessiert was ich da so treibe.)

12

29.07.2008, 21:03

Je nachdem was dahinter steckt kann ich die Zeilensummen auf 1 transformieren (wenn die Matrix R beispielsweise nur zeilenweise was zusammenfasst etc.).

Wie schon gesagt, für mich schaut es auf den ersten Blick so aus als ob jedes Element des Gewichtungsvektors bei der geschlossenen Lösung eine Funktion aller Matrixeinträge wäre. Bei 10^4 * 10^2 = 10^6 Elementen und 10^2 verschiedenen Gewichtungsvektoren (eigentlich 10^2 - 1, da du einen Freiheitsgrad durch die Normierungseigenschaft verlierst) wäre das imho nicht praktikabel.

Ich muss aber zugeben das Problem interessiert mich auch. Poste also mal weiter, welche Lösungsstrategie du gewählt hast.
Du hast ja nen 100-dimensionalen Raum, den deine Gewichte aufspannen. Da müsste man eine Strategie formulieren, wie man den Gewichtsvektor variiert. Man kann zwar numiersch Richtungsableitungen bilden, aber 100 Stück sind ein bißchen viele und es ist die Frage, ob Gradientenabstiege (naja, hier wohl eher ~anstiege ^^) so viel bringen - ich bezweifle es.
Wie gesagt, alles auf den ersten Blick. Simulated Annealing scheint mir am besten geeignet, wenn du vernünftig definieren kannst, was Nachbarschaft heißt.

Die Frage ist halt, wenn man ganz naiv rangeht, was besser ist: über die 100 Einträge drüber iteriieren, jeweils numerisch ne Ableitung bestimmen und dann nur einen Schritt gehen (oder auch 3-10, dann erst wieder neue Richtugn suchen, je nachdem). Oder man variiert sowieso zufällig den aktuellen gewichtsvektor und geht damit in eine nahe Umgebung. Eh man 100 Ableitungen gerechnet hat kann man auch 100 Schritte probieren --> daher meine Meinung, dass Simulated Annealing besser geeignet ist.

Ganz greedy würde ich nicht loslaufen. Weiß zwar nicht, wie gutmütig das Problem letzlich ist, aber nur steepest descent führt nicht evt. immer nur in Nebenminima, also ist bei weitem nicht so robust.

€dit:
Habe gerade mal den Artikel überflogen. Habt ihr einfach mal nen State Space Modell mit all euren Daten gemacht und geschaut, was da rauskommt?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »AtroX_Worf« (29.07.2008, 21:06)


13

29.07.2008, 23:05

Werd wohl erst mal ganz simple Nachbarschafts-Suchen testen, davon ausgehend vermutlich in Richtung Simulated Annlealing.

Das ganze ist erst mal nur ein "abchecken", wie gut/effizient sich das Problem lösen lässt, will dafür eigentlich nicht wahnsinnig viel Zeit investiern. Also gut möglich dass ich da einfach in ner ganz andren Richtung weiter mache, wenn sich die Problematik hier als harter Brocken entpuppt :)

Gibt noch reichlich Spielraum für sinnvolle vereinfachende Annahmen,...man muss sichs ja nicht immer unnötig schwer machen :)

Aber ich werd hier updaten falls sich was interessantes ergibt.

14

30.07.2008, 12:59

schon mit linearer Optimierung probiert?
(ich weiß, dass es nicht wirklich linear ist ;) )

CoK_a_cola

Erleuchteter

Beiträge: 4 016

Wohnort: Arnsberg

Beruf: Immobilienkaufmann

  • Nachricht senden

15

30.07.2008, 13:21

mal für nen mathe-lk-vor-elf-jahren-abi-menschen, worüber wird hier gesprochen, und wie weit weg bin ich von solchen dingen? mein mathematik beschränkt sich mitlerweile auf die grundrechenarten ;)

nur mal rein interessehalber, verstehe und sehe nur bahnhof... wie lange muss ich in etwa studieren für das? also aus meiner schulzeit sind mir vielleicht noch "lnx" e^x ein begriff...

16

30.07.2008, 14:23

Mit der Mathegrundausbildung bei einem technischen Studiengang verstehst du zumindest das Problem und auch teilweise was danach so geschrieben wurde.

17

30.07.2008, 15:11

Ich denke mit eienr Mathe-Grundausbildung in einem technischen oder naturwissenschaftlichen Stdium verstehst du praktisch alles.

Eigentlich kann man es sich ganz einfach veranschaulichen. Man benötigt nur etwas Wissen über Vektoren und lineare Algebra - das braucht man aber sowieso immer und überall.

plexiq hat eine Zielfunktion z(w), welche er maximieren will. w ist dabei ein (m x 1)-Vektor mit m Komponenten w_i. Hier im Beispiel besteht also w aus 100 Einträgen jeweils zwischwen 0 und 1.
Die Zielfunktion z ordnet jedem w, also jeder beliebigen Kombination der 100 w_i zwischen 0 und 1 jeweils eine reelle Zahl zu. Ziel ist es denjenigen w-Vektor, also für jedes der 100 w_i den genauen Wert zwischen 0 und 1 zu erfahren, so dass z(w) maximal ist.

Wäre w 2-dimensional und jede Komponente zwischen 0 und 1, so könnte man sich jeden Vektor in einem 2-dim Koordinationsystem vorstellen, also einem Quadrat mit Kantenlänge 1. Bei 3 Dimensionen wäre es ein Würfel in 3 Dimensionen, bei 100 Dimensionen ein "Würfel" mit 100 Dimensionen. In diesem großen Würfel suchen wir jetzt genau den Punkt (wie im 3-dim Würfel, so stell ich es mir auch immer geometrisch vor), der die Funktion z maximiert.

Man könnte jetzt konkret ausrechnen, wie groß die w_i jeweils sein müssen, damit zu einem gegebenen R die Funktion z maximiert wird. Allerdings bringt dies wohl praktisch nichts, da, so siehts zumindest für mich aus, jede Komponente w_i wiederum eien Funktion aller R wäre, was 10.000 x 100 = 10^6 Parameter wären.

Man sucht deswegen numerisch die Lösung: Man fängt irgendwo im "Würfel" an, d.h. start an einem Punkt w und rechnet z(w) aus. Dann geht man in die Nachbarschaft von w zum Punkt w' udn rechnet z(w') aus. jetzt vergleicht man, ob sich der Zielfunktionswert erhöht hat oder nicht. Ist ersteres der Fall, so war die Richtung gut und man sollte verscuehn weiter in diese zu gehen. Bei zweiterem versucht man es in eine andere Richtung.

Das eigentliche Problem ist, wie genau ich zu "benachbarten" Vektoren w' komme, so dass meine Zielfunktion möglichst schnell und robust maximiert wird. Ich könnte einfach immer "blind raten", oder versuchen Ableitungen zu berechnen. Dazu geh ich von einem Punkt w jeweils in eine der 100 Richtungen und vergleiche die Funktionswerte. Die größte Differenz gibt mir die Richtung an, in welche ich laufen sollte. Allerdings müsste ich da vor jedem eigentlich Schritt 100 Ableitungen berechnen, also 1 Schritte in jede der 100 Richtungen gehen. Effizienter scheint es zu sein eben nicht alle 100 Ableitungen zu berechnen sondern "irgendwie anders" vorzugehen.

Um das "irgendwie anders" geht es.
Teilproblem a) Was heißt eigentlich Nachbarschaft? Variiere ich immer nur eine Richtung oder auch mehrere (d.h. ich gehe "diagonal"). Wie weit gehe ich, d.h. welche Schrittweite habe ich? Am Anfang sollte sie vielleicht groß sein, damit man schnell zu dem Maxima kommt. Danach sollte sie immer kleiner werden, damit ich die Maxima auch finde.
Teilproblem b) Erlaube ich nur Verbesserungen auf meinem Weg oder bewußt auch (ab und zu) Verschlechterungen der Zielfunktion?
Stellt man sich die Alpengipfel vor, wenn ich immer nur Verbesserungen erlaube, d.h. nur Bergauf laufen kann - sobald ich mich einmal auf einem Berg befinde, der vielleicht neben einem größeren liegt, so komme ich nicht mehr von diesem Berg runter und auf den größeren, den dazu müsste ich erlauben, dass sich die Zielfunktion zwischenzeitlich auch verschlechtern darf. Ich möchte nicht in einem Nebenmaximum steckenbleiben sondern das globale Maximum finden.

Das Problem ist, dass man einen 100-dimensionalen Raum nicht einfach durchsuchen kann sondern eine gute Strategie benötigt (und/oder nen sehr schnelle Comp ^^).

18

30.07.2008, 16:15

Ich studier hier Maschinenbau & Verfahrenstechnik und im 4. Semester gehört Numerik (als Wahlfach jedoch) dazu, zusammen mit den Grundkenntnissen Linearer Algebra.
Damit verstehe ich eigentlich, worum es geht. Allerdings habe ich nicht sehr viel Ahnung, wie man das Problem lösen müsste - habe mich jedoch auch nicht damit beschäftigt.

Das Problem sieht ziemlich ähnlich aus wie auch viele andere Dinge, die ich nebenbei noch mache (Arbeite im Labor für Kernenergiesystem, Hauptsächlich im Gebiet der Strömungstechnik)...
Allerdings ist das Forschung, sprich einfach mal berechnen^^

Denke also auch, dass man mit einer mathematischen Ausbildung eines technischen, mathematischen oder physikalischen Studium mehr oder weniger sowas versteht.
Schliesslich "endet" man am Ende eh immer überall bei der gleichen Mathematik...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »kOa_Master« (30.07.2008, 16:17)


19

30.07.2008, 18:48

so, hab jetzt Zeit noch was zur linearen Optimierung zu schreiben:

Frantic schrieb schon, dass es ziemlich einfach zu lösen wäre, wenn das Produkt in der Zielfunktion nicht wäre.
Prinzipiell könnte es aber trotzdem gehen, wenn man das Prob etwas umformuliert.
Maximiere das Produkt der y_i

mit den Nebenbed.:

y_i = Summe über w_j R_I

w_j >=0
Summe über w_j =1

aus dem Produkt, wenn nötig mithilfe von log eine Summe machen.

20

30.07.2008, 21:25

Dann hast du logs von Größen, auch nichtlinear... oder übersehe ich da was? Verändere ich 2 w_i, dann verändere ich auch jeden Faktor, die koppeln ja alle miteinander.

Zudem ist nicht wirkich die Frage, ob eine geschlossene Lösung existiert.
Die Frage ist, ob sie praktikabel zum konkreten Ausrechnen wäre.

Für mich siehts so aus, als wäre jedes w_i eine Funktion aller R_ij und eventuell der anderen w_j für j != i. Dann hätte man als FOC noch immer ein nichtlineares Gleichungssystem.

21

30.07.2008, 22:18

hast recht, ist Quatsch. War was ganz anderes wo das möglich war.

22

01.08.2008, 21:56

Mal ne andere Frage, numerisches (Stabilitäts-)Problem

Ich habe einen Optimierungsalgorithmus, der mit ausgehend von einem zuvor bestimmten Minimum eine Folge von optimalen Punkten bestimmt (ich suche auch genau den Pfad, der durch diese Punktefolge charakterisiert ist). Man kann den Abstand zwischen den Punkten so parametrisieren, dass man ihn mit einer Variable beschreiben kann, nennen wir sie t.

Ich habe also eine Folge optimale Punkte t_min = t_0, t_1, t_2, ... , t_i, ... t_T, wobei ich die Anzahl vorher nicht kenne, also speziell weder t_T noch T.

Ich berechne jetzt von t_i den folgenden Punkt t_i+1. Für diesen müsste gelten t_i+1 > t_i. Allerdings ist für bestimte i der Abstand beider Punkte ungefähr in der Größenordnung von eps (bissel größer, aber numerisch ungenau) und vor allem gilt t_i+1 < t_i. So gerade ich in eine endlos-Schleife rein.

Was kann ich da am sinnvollsten machen? Einen konstanten Wert auf t_i aufschlagen, der möglichst über den Rundungsfehlern liegt (können theoretisch sehr groß sein, sind ungefähr 5-8 Matrixinversionen drin -> ich kann ja nicht 1e-2 draufschlagen)? Eine Liste mit schon besuchten Orten anlegen und so den Schritt von t_i+1 zurück auf t_i verhindern?
Den Code numerisch stabiler umschreiben, indem man die meisten Matrixinversionen auflöst ist keine Option... Komplexität und so. Eine funktionierende ad hoc Lösung würde ich vorziehen. Allerdings muss sie robust sein, da es ein Anwendungsprogramm mit variablen Inputs wird. -_-