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 ^^).