2016-04-27 17 views
0

Mit MATLAB versuche ich, einen Sattelpunkt einer Funktion im 4D-Raum zu finden. Genauer gesagt ist die Funktion f (x, y, z, w) und ich muss ihre Minima in Bezug auf x und y und Maxima in Bezug auf z und w finden. Mit anderen Worten, der Sattelpunkt im 4D-Raum ist ein Minimum in x und y und ein Maximum in z und w. Die Variablen x, y, z und w sind innerhalb der jeweiligen Domänen beschränkt.Extremize-Funktion im 4D-Raum (minimiere in Bezug auf zwei Variablen, maximiere in Bezug auf die anderen beiden Variablen) in MATLAB

Ich habe versucht mit fmincon, aber ohne Erfolg. Die Funktion f (x, y, z, w) muss sicher einen Sattelpunkt in der Domäne haben, in der sie definiert ist. Was ich getan habe, ist zuerst fmincon zu verwenden, um f in Bezug auf x und y zu minimieren, und dann fmincon in einem nächsten Schritt zu verwenden, um -f in Bezug auf z und w zu minimieren und dann zu iterieren. Ich habe auch versucht, fmincon zu verwenden, um f (x, y, z0, w0) -f (x0, y0, z, w) zu minimieren, wobei (x0, y0, z0, w0) ein Anfangspunkt oder einer aus einer vorherigen Iteration berechneten ist . Die letztere Methode (ich weiß, dass es ziemlich ineffizient ist, da es keine richtigen Gewichte gibt), hat auch nicht funktioniert.

Ich wäre sehr dankbar, wenn ihr irgendwelche Ideen hättet, wie das funktioniert. Vielen Dank im Voraus.

Antwort

0

Edit 3: Ein Problem könnte der eingeschränkte Optimierungsalgorithmus sein. Wenn Sie nur einen Sattelpunkt haben, sollte der alternierende Algorithmus den Zweck erfüllen, also könnte das Problem von der Beschränkung herrühren.

Versuchen Sie den Nelder-Mead-Algorithmus, implementiert in fminsearch, in Matlab, der ohne Einschränkungen optimiert. Überprüfen Sie dann, ob die Lösung Ihren Einschränkungen entspricht. Wenn die Beschränkungen nicht eingehalten werden, bestrafen Sie die Zielfunktion mit einer Nichteinhaltung der Einschränkungen (vergessen Sie nicht, das Zeichen der Strafe zu ändern, wenn Sie minimieren und dann maximieren).


Man könnte die Wirkung von x und y invertieren, so dass die Funktion maximiert on (-x, -y, z, w).

Schreiben Sie Ihr Ziel wie folgt um: g(x,y,y,z)=f(-x,-y,z,w) und maximieren Sie g.

Edit 2: erste Methode nutzlos und versuchte bereits

Wenn Sie das Optimierungsproblem denken, versuchen und zu minimieren gleichzeitig (auf der gleichen Stufe) maximieren machen nicht viel Sinn .

versucht, über Sattelpunkt Erkennung zu denken, eine Lösung könnte ein zweistufiger Prozess sein:

  1. die Funktion auf der Domäne Minimieren (x, y) ausgehend von (x0, y0, z0, w0)
  2. Sobald Sie bei einer Konvergenz auf sagen wir ankommen, (x1, y1), minimieren die Funktion auf der Domäne (z, w) ausgehend von (x1, y1, z0, w0)

Wiederholen, bis Konvergenz/Optimalitätsbedingung.

Edit: Ich habe visualisieren es nicht 4 Dimensionen in, aber es macht Sinn mit einer Funktion z = f (x, y)

+0

In der Tat, wie ich in der ursprünglichen Post erwähnen, dass etwas Ich habe es getan, aber es hat leider nicht funktioniert. – Jadohito

+0

Mein schlechtes. Haben Sie den Farbverlauf/Hessian zu Matlab fmincon angegeben? –

+0

Nein, ich kann das nicht tun, da es keinen analytischen Ausdruck für den Gradienten gibt. – Jadohito