WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Optimierung mit fmincon

 

HaraldPeter
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.06.2010, 13:08     Titel: Optimierung mit fmincon
  Antworten mit Zitat      
Hallo zusammen!
Wahrscheinlich eine ganz einfach zu beantwortende Frage.
Ich möchte diese Funktion minimieren:
Code:

function[sigma]=f(w);
covmatrix=[0.002 0.0009 0.001; 0.0009 0.0004 0.0004; 0.001 0.0004 0.005];
sigma=sqrt(w*covmatrix*w');
end

Die Nebenbedingung habe ich so formuliert:
Code:

function  [c, ceq] = NB(w)
ceq=w*[1 1 1]'-1;
c=0;
end

Wie muss ich nun den fmincon-Befehl in das Command-Window eingeben, damit es läuft?
Grüße
Harald
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.06.2010, 13:53     Titel:
  Antworten mit Zitat      
Hallo,

in der jetzigen Form würdest du das so aufrufen:
Code:
[code]sol = fmincon(@f, x0, [], [], [], [], [], @NB)[/code]

x0 ist ein noch zu definierender Startwert.

Allerdings ein paar Hinweise:
- wenn du nur Gleichungen hast, c = [] setzen statt 0.
- die Gleichungsnebenbedingungen sind linear, sollten also auch als solche übergeben werden.
- die Zielfunktion ist quadratisch bei linearer Nebenbedingung; man kann also auch (oder sollte sogar) quadprog verwenden, in der Notation:
Code:
doc quadprog
x = quadprog(H,f,A,b,Aeq,beq)


Grüße vom Namensvetter
Private Nachricht senden Benutzer-Profile anzeigen
 
HaraldPeter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.06.2010, 14:07     Titel:
  Antworten mit Zitat      
Hallo,

nach Definition des Startwertes
x=[0.1 0.1 0.8];
und Eingabe des Befehls
>> sol = fmincon(@f, x, [], [], [], [], [], @NB)
bekomme ich folgenden Fehlerhinweis:
??? Error using ==> fmincon at 232
FMINCON only accepts inputs of data type double.

Ziel der Funktion soll sein, das Sigma zu minimieren, wobei sich die Gewichtsvektoren zu 1 addieren sollen.
Ist der Startvektor (hier x) legitim? Und warum muss der überhaupt mitgegeben werden?

Grüße

Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.06.2010, 15:02     Titel:
  Antworten mit Zitat      
Hallo,

es fehlen Klammern, sorry.
Code:
sol = fmincon(@f, x, [], [], [], [], [], [], NB);

Das Ergebnis mag etwas merkwürdig anmuten, aber ich vermute, dass deine Gewichte positiv sein sollen? Dann siehts besser aus:

Code:
sol = fmincon(@f, x, [], [], [], [], [0 0 0], [1 1 1], @NB, opts)


Der Startwert ist in Ordnung. Gebraucht wird er, weil es sich bei fmincon um einen Algorithmus für lokale Optimierung handelt. Dieser braucht dann logischerweise einen Startwert.

Ich würde das ganze wie gesagt mit quadprog angehen, weil dieser Algorithmus eben genau dafür gedacht ist.

Code:
sol = quadprog(covmatrix, [0 0 0], [], [], [1 1 1], 1, [0 0 0], [1 1 1]);

Da brauchst du auch keinen Startwert Smile

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
HaraldPeter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2010, 12:12     Titel:
  Antworten mit Zitat      
Hallo!

OK, das mit quadprog funktioniert (subkjektiv sogar schneller?).
Ich minimiere jetzt aber nicht mehr die Funktion, dessen Ergebnis sigma ist, oder?
Problem: Eigentlich möchte ich eine Portfoliooptimierung durchführen. Dafür gibt es ja die portopt-Funktion. Diese aber gibt das Minimum-Varianz-Portfolio aus. Ich möchte allerdings eine Minimum-Value-at-risk-Optimierung durchführen.
Vorliegende Parameter:
-Ertragsprognose jedes einzelnen Assets
-Vola jedes einzelnen Assets
-Korrelationsmatrix resp Kovarianzmatrix
-Assetklassenrestriktion
-Value-at-Risk des Ausgangsportfolios
-Erwartungswert des Ausgangsportfolios
Ich dachte, da wäre ich mit fmincon gut bedient.
Wie müsste ich da am besten vorgehen?

(Wieso kommt bei der Lösung mit fmincon der imaginäre Anteil dazu?)

Grüße
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.07.2010, 12:40     Titel:
  Antworten mit Zitat      
Hallo,

quadprog ist deutlich schneller, weil dahinter ein Algorithmus steht, der die Problemstruktur ausnutzt. Damit wird das Quadrat von sigma minimiert (bzw die Hälfte davon, siehe Problemformulierung in quadprog), was aber aufs selbe rauskommt, da Quadrat monoton ansteigt.

Wenn dahinter Portfoliooptimierung steht, sollte meines Wissens die Covarianz-Matrix positiv definit sein.

Zu der anderen Frage: formuliere doch bitte deine Zielfunktion und Nebenbedingungen dafür im Detail, dann kann man weiter sehen. So tief, dass ich die ganzen Formeln aus dem Ärmel schütteln könnte, bin ich da nicht drin.

Warum wirds bei fmincon negativ? - Vermutung ist, dass der Betrag unter der Wurzel kurzfristig negativ wird -> komplexe Zielfunktion -> komplex weiterrechnen.

portopt gibt meines Wissens Portfolios auf der Efficient Frontier zurück. Wenn man anders optimieren möchte, muss man selber Arbeit reinstecken - da bist du ja schon dabei.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
HaraldPeter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2010, 10:29     Titel:
  Antworten mit Zitat      
Hallo!
Ich glaube, ich möchte mich ganz gerne weiter in der Welt von fmincon rumtreiben. Ich vermute, dass quadprog am Ende nicht reichen wird.
Wie müsste ich die fmincon gestalten, wenn ich noch eine zweite Nebenbedingung
Code:

function[c, ceq]=NB2(w)
ceq=w*[0.05 0.08 0.09]-0.1;
c=0;
end
 

mit berücksichtigen möchte?
Also: Minimiere sigma unter Berücksichtigung von NB1 und NB2.
Grüße
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 02.07.2010, 13:59     Titel:
  Antworten mit Zitat      
Hallo,

ich beschäftige mich mit optimization toolbox erst seit 7 stunden. (newbie :))
aber ich denke schon man kann die beiden constraints zusammenfassen:

Code:

function[c, ceq]=NB_ges(w)
ceq(1)=w(1)+w(2)+w(3)-1;
ceq(2)=0.05*w(1)+0.08*w(2)+0.09*w(3)-0.1
c=[];
end


 


würde auch gerne wissen ob meine überlegung richtig ist ;)

gruss
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.07.2010, 22:35     Titel:
  Antworten mit Zitat      
Hallo,

die Idee von Fourier ist prinzipiell richtig.
Jedoch sind das beides lineare NB und sollten auch so umgesetzt werden.
Also als 5. bzw. 6. Argument von fmincon [1 1 1; 0.05 0.08 0.09] und [1; 0.1] - und keine nichtlinearen NB!!

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
HaraldPeter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2010, 08:06     Titel:
  Antworten mit Zitat      
Hallo!
Und wie stelle ich sicher, dass auf beide Nebenbedingungen NB und NB2 zurückgegriffen wird? Mit NB als Argument in der fmincon spreche ich ja NB2 nicht an. Oder?
Grüße
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.07.2010, 08:41     Titel:
  Antworten mit Zitat      
Hallo,

Wie von Fourier und mir gesagt: du musst alle deine Nebenbedingungen in ein Code-File oder (meiner Meinung nach besser!) eine Matrix von linearen Nebenbedingungen integrieren.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
HaraldPeter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2010, 08:45     Titel:
  Antworten mit Zitat      
Hallo!
Ist mir ja schon fast peinlich: wie mache ich das?
Grüße
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.07.2010, 08:58     Titel:
  Antworten mit Zitat      
Hallo,

So wie von Fourier (2.7., 14:59) bzw. mir (3.7., 23:35) beschrieben.

Die Firma Mathworks bietet übrigens einen Kurs zu Optimierung mit MATLAB an:
http://www.mathworks.de/services/training/courses/MLOP_1.html

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
_Fourier

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2010, 09:03     Titel: aa
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

So wie von Fourier (2.7., 14:59) bzw. mir (3.7., 23:35) beschrieben.

Die Firma Mathworks bietet übrigens einen Kurs zu Optimierung mit MATLAB an:
http://www.mathworks.de/services/training/courses/MLOP_1.html

Grüße,
Harald


ich würde sehr gerne dran teilnehmen, aber es kostet 700 euro Confused !!!!!!!!!
ich lese lieber den 'User Guide' weiter Wink
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.07.2010, 11:48     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
ich würde sehr gerne dran teilnehmen, aber es kostet 700 euro !!!!!!!!!
ich lese lieber den 'User Guide' weiter


Meines Wissens bietet Mathworks für Studenten einen Rabatt von 50% auf Schulungen; frag doch bei Interesse einfach mal dort nach.
Das Besuchen einer Schulung hat ja nun auch seine Vorteile. Wer würde z.B. schon sein ganzes Studium nur aus Büchern lernen wollen? Ich zumindest nicht.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.