|
|
Optimierungsproblem - Mit welchem Algorithmus versuchen? |
|
jomowe |
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 18.08.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2008b
|
|
|
|
|
|
Verfasst am: 18.08.2009, 12:41
Titel: Optimierungsproblem - Mit welchem Algorithmus versuchen?
|
|
|
|
|
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?
Schon mal 1000 Dank für Eure Hilfe.
Beste Grüße,
Hannes
|
|
|
|
|
Bijick |
Ehrenmitglied
|
|
Beiträge: 914
|
|
|
|
Anmeldedatum: 18.06.07
|
|
|
|
Wohnort: Nürnberg
|
|
|
|
Version: R2006b, R2008b
|
|
|
|
|
|
Verfasst am: 23.08.2009, 18:41
Titel:
|
|
|
|
|
Hallo Hannes,
3. die Problembeschreibung sieht ziemlich vollständig aus.
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
|
|
|
jomowe |
Themenstarter
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 18.08.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2008b
|
|
|
|
|
|
Verfasst am: 24.08.2009, 07:48
Titel:
|
|
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
|
|
|
Bijick |
Ehrenmitglied
|
|
Beiträge: 914
|
|
|
|
Anmeldedatum: 18.06.07
|
|
|
|
Wohnort: Nürnberg
|
|
|
|
Version: R2006b, R2008b
|
|
|
|
|
|
Verfasst am: 24.08.2009, 19:11
Titel:
|
|
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
|
|
|
davidm |
Forum-Newbie
|
|
Beiträge: 6
|
|
|
|
Anmeldedatum: 07.06.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.09.2009, 18:20
Titel:
|
|
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
|
|
|
davidm |
Forum-Newbie
|
|
Beiträge: 6
|
|
|
|
Anmeldedatum: 07.06.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.10.2009, 11:07
Titel:
|
|
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
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|