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

Optimierungsproblem - Mit welchem Algorithmus versuchen?

 

jomowe
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 18.08.09
Wohnort: ---
Version: 2008b
     Beitrag Verfasst am: 18.08.2009, 12:41     Titel: Optimierungsproblem - Mit welchem Algorithmus versuchen?
  Antworten mit Zitat      
Hallo zusammen,

nach Durchforsten des Forums und der MATLAB-Hilfe sowie einigem probieren bin ich immer noch unschlüssig, welches Lösungsverfahren ich für mein Optimierungsproblem versuchen soll. Ich versuche mal, das Problem verallgemeinert zu beschreiben:

Ich habe eine Funktion die erst einmal linear und einfach aussieht z.B.
Z= F1*X1 + F2*X2 + F3*X3 +F4*X4+...+Fn*Xn mit
Fi= Gewichtungsfaktoren
Xi= Variablen

Aber:
X1, X2=f(y1, y2, y3, y4, ... , yn) %d.h. X1 und X2 berechnen sich aus Funktionen, die von ca. 20 weiteren Variablen y abhängen)
X3=f(y1, y2)

Weiterhin wissenswert:
- Die Funktionen zur Bestimmung von X1 und X2 sind nichtlinear und nicht in allen Punkten ableitbar;
- einige Variablen yi sind diskret, andere kontinuierlich;
- einige yi könnte man als konstant deklarieren, aber 10 Variablen bleiben mindestens übrig
- Nebenbedingungen müssten bei der Optimierung berücksichtigt werden
- Die Berechnung von X1 und X2 erfolgt im Rahmen einer komplexen (größtenteils analytischen) Simulation, die ihrerseits aus ca. 20 m.-files und mehreren tausend Codezeilen bestehen.
- Eigentlich soll Z maximiert werden... (Aber zur Not muss man die Z-Funktion eben umstellen..)

Meine Fragen:
1. Welche Optimierungsverfahren könnten erfolgversprechend sein? fmincon oder fminunc?
2. Wie gehe ich das an? (Ich kenn mich inzwischen zwar einigermaßen aus mit Matlab, da ich seit einigen Jahren an meiner Simulation rum-code, aber weder höhere Mathematik noch programmieren ist meine Stärke und dies ist mein erstes OpTimierungsproblem)
3. Welche Infos habe ich vergessen und braucht Ihr noch? Wink

Schon mal 1000 Dank für Eure Hilfe.

Beste Grüße,
Hannes
Private Nachricht senden Benutzer-Profile anzeigen


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 23.08.2009, 18:41     Titel:
  Antworten mit Zitat      
Hallo Hannes,

3. die Problembeschreibung sieht ziemlich vollständig aus. Smile

1. Ich versuch mich mal an einer Analyse: Die Variablen x sind nur Durchgangsschritte, die zwar der Übersicht dienen, aber letztlich keine Rolle spielen. Im Endeffekt heißt das Problem

max z(y_1,...,y_20)
unter Nebenbedingungen
g(y_1,...y_20)<=0
h(y_1,...,y_20)=0

wobei z nichtlinear (und nicht analytisch differenzierbar) ist. Die Nebenbedingungen können linear oder nichtlinear sein. Wenn alle y_i kontinuierlich sind, bietet sich eindeutig fmincon an, da fminunc keine Nebenbedingungen erlaubt. Das automatische Differenzieren wird auch mit Differenzierbarkeitslücken ganz gut fertig. 20 Variablen sind schon am oberen Ende dessen, was ich bisher gut gelöst habe, aber noch machbar. (Das waren Funktionen, die auf Simulationen beruhten, bei analytischen gehen auch 100 noch gut.) Schwierig sind dagegen diskrete Variablen. Für Mixed Integer gibt es in Matlab keine Funktion, höchstens im File Exchange.

2. Hier im Forum finden sich schon einige Beispiele zu fmincon, die Suche müsste einiges ergeben. Bei Detailfragen gibt es weitere Hilfe hier.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
jomowe
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 18.08.09
Wohnort: ---
Version: 2008b
     Beitrag Verfasst am: 24.08.2009, 07:48     Titel:
  Antworten mit Zitat      
Hallo Bijick,

dank Dir für Deine hilfreiche und ausführliche Antwort.

Ja, fmincon habe ich auch favorisiert, so dass ich es jetzt damit versuche...

Die Sache mit den diskreten Variablen könnte in der Tat hässlich werden, aber ich suche aktuell noch im File Exchange kann auch parallel noch versuchen, kontinuierliche Variablen zu "erzwingen". Wenn das alles nicht ginge, dann blieben als Ausweg meiner Ansicht nach im schlimmsten Falle noch Genetische Algorithmen...

Beste Grüße aus ER nach ER,
Hannes
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 24.08.2009, 19:11     Titel:
  Antworten mit Zitat      
Hallo Hannes,

ich dachte auch immer, Genetische Algorithmen sind "pfui", weil man das als Mathematiker so lernt, aber in der Praxis bieten die oft gute Ergebnisse, vor allem auch globale Lösungen. In der GA-Toolbox von Mathworks sind diskrete Variablen aber leider auch nicht vorgesehen.

Wenn jede einzelne Variable nur wenige Werte annehmen darf, kommt eventuell eine vollständige Aufzählung aller Einzelergebnisse infrage. Sinnvoller wäre natürlich ein Branch-and-Bound, aber den muss man erstmal implementieren.

Ach ja, Suchwort im File Exchange wäre MINLP (Mixed Integer Nonlinear Programming) oder ähnlich.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
davidm
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 07.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2009, 18:20     Titel:
  Antworten mit Zitat      
Hi, ich versuche, das gleiche Problem zu lösen:

Ich möchte mit fmincon herangehen und für die diskreten Variablen und ihre möglichen Werte einfach eine vollständige Suche durchführen.
Nun bin ich bei folgendem Problem:
Meine Funktion (R^3 -> R^1), beispielsweise f(X,Y,Z) = a * X + b * Y + c * Z soll minimiert werden. Nun ist das Problem, dass die Funktion Z als Übergabeparameter braucht, Z Aber konstant gehalten werden (sprich, die Optimierung soll nur über Variation von X und Y durchgeführt werden) soll. Gut, Z ließe sich theoretisch immer wieder neu laden, in jeder Unterfunktion von f, so müsste sie nicht übergeben werden. aber das wäre viel überflüssiger Rechenaufwand meiner Meinung nach.
Hat jemand elegante Abhilfe?

Freue mich über gute Ratsachläge!

Gruß David
Private Nachricht senden Benutzer-Profile anzeigen
 
davidm
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 07.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.10.2009, 11:07     Titel:
  Antworten mit Zitat      
Ich habe eine Lösung gefunden (jedenfalls in der Theorie).
Beispielsweise ich habe zwei Variablen in meiner Zielfunktion, die die Werte Null und Eins annehmen dürfen. Ihnen seien die Variablenvektoreinträge X(1) und X(2) zugeordnet. Dann kann ich doch einfach sagen:
-X(1) <= 0;
-X(2) <= 0;
X(1) <= 1;
X(2) <= 1;
Nur funktioniert fmincon überhaupt richtig, wenn man als mögliche Werte nur die Ränder der Schranken zulässt?

Gruß David
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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.