|
|
fmincost ändert Iterationspunkte nicht |
|
PreOptimierer |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.08.2014, 06:57
Titel: fmincost ändert Iterationspunkte nicht
|
|
|
|
|
Hallo, ich sitze vor einem Optimierungsproblem, für welches ich fmincost nehmen wollte.
Bin nicht ganz sicher, ob die Funktion die richtige ist:
Ich habe ein Finite Elemente Modell, dessen Materialdaten ich in jedem Durchlauf ändere und mit einem Sollergebnis (Kraft - Verschiebungs-Plot) vergleiche.
Das Vergleichen ist meine zu optimierende Funktion, hierbei wird im Endeffekt die Summe der Abstandsquadrate von Ziel- und Istplot bestimmt.
Ich habe dies jedoch genau genommen als Integral |soll - ist| dx bestimmt und das Integral numerisch durch die Obersumme bestimmt. (Sollte aber keinen Unterschied machen).
Nun hatte ich für den fmincost solver folgende Randbedingungen definiert:
Die Matrix A und der Vektor b (aus A*x <= b) lauten:
A
C
Diese Größen stammen aus folgender Überlegung:
Ich arbeite mit 14 Variablen, wobei 7 davon Spannungen sind die anderen 7 dazugehörige Dehnungen (kann beides frei verändert werden).
Zwangsbedingungen ist, dass die Spannungen und Dehnungen in aufsteigender Reihenfolge vorliegen d.h.
x1 < x2 < ... < x7 (Spannungen)
-> x1 - x2 < 0 usw
x8 < x9 < ... < x14 (Dehnungen)
-> x8 - x9 < 0 usw
Ferner soll x1 größer sein als die Spannung am Ende des linearen Materialbereiches d.h.
const <= x1
und es muss gelten 0 < x d.h. -x < 0
Dies steckt alles in den Matrizen und das sind auch alle Randbedingungen die ich habe.
Wenn ich jedoch nun fconmin anwende ändert diese den Vektor x nicht bei jeder Iteration sondern setzt immer die selben Werte ein (GANZ selten scheinen MINIMALST veränderte Werte eingesetzt zu werden, aber das zeigt sich in der 34234 Nachkommastelle).
Die Vermutung liegt nahe, dass ich die Constraints derart gesetzt habe, dass diese keine Iteration zulassen (ala x1 = x1), aber mir scheint dem nicht so zu sein.
Optimiere ich mittels fmincost mit der selben Objectivefunktion und dem selben Startvektor x0 so funktioniert das ganze (dauert aber leider ewig).
Würde gerne fconmin probieren, aber wieso funktioniert das nicht?
Sorry für die Wall of Text, vielen Dank für jede Hilfe!
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 09.08.2014, 08:35
Titel:
|
|
Hallo,
stelle doch bitte den Code und die Daten als .mat-Datei zur Verfügung, dann kann man sich das deutlich leichter ansehen.
Mit fmincost und fconmin meinst du fmincon?
Grüße,
Harald
|
|
|
PreOptimierer |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.08.2014, 01:24
Titel:
|
|
|
|
|
Hi,
danke für deine Nachricht.
Ich meinte immer fmincon, sorry, war schon spät^^
Mein Code ist angehängt, jedoch trivial, ich habe fmincon dann auf der Kommandozeile aufgerufen (also nicht in irgendeinem separaten Skript oder so) mit den Werten für A und b.
A und b kann man oben entnehmen, diese wurden mittels des angehängten Skripts createConstrants erzeugt.
Nochmal das Problem:
A und b beschreiben meine Randbedingungen und ich sehe nicht, dass die irgendeine der Variablen fixieren. (Es sollten sich schlicht Ordnungen gemäß x1 < x2 < ... < xn ergeben, trotzdem kann man die Variablen ja in gewissem Maße variieren ohne die Ordnung zu verletzen)
Dennoch verändert fmincon die Variablen nicht und in jedem Iterationsschritt werden die selben Werte verwendet (bis auf sehr seltene Ausnahmen, aber dann sind die Abweichungen ebenso MINIMALST (d.h. nur in der x-ten Nachkommstelle zu erkennen, völlig unerheblich))
Beschreibung: |
Dies ist die Objective Function, wobei implizit dies eigentlich das aufgerufene Pythonskript ist. Das Skript berechnet schlicht die Abstandsquadratsumme zwischen Simulationsergebnisplot und Zielplot. (D.h. Returnvalue ist > 0 |
|
Download |
Dateiname: |
PythonTest.m |
Dateigröße: |
852 Bytes |
Heruntergeladen: |
599 mal |
Beschreibung: |
Diese Funktion erstellt die Zwangsbedingungen, die ich auch schon schon erläutert habe. Zwangsbedingungen sind z.B. das die Spannungen in aufsteigender Reihenfolge vorliegen müssen (sonst kann die Simulation schief gehen) und die unterste Spannung grö |
|
Download |
Dateiname: |
createConstraints.m |
Dateigröße: |
596 Bytes |
Heruntergeladen: |
519 mal |
Beschreibung: |
Erstellt den Startvektor. Schätzung basiert auf dem üblichen Verlauf einer Spannungsdehnungskurve (konkav) und dem bekannten Initialspannungswert ab welchem plastisches Verhalten vorliegt. |
|
Download |
Dateiname: |
createInitialValues.m |
Dateigröße: |
365 Bytes |
Heruntergeladen: |
529 mal |
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 11.08.2014, 08:48
Titel:
|
|
Hallo,
das sind nun 3 Funktionen, aber wie wird das ganze denn von fmincon aufgerufen?
Ich würde gerne das Problem reproduzieren, aber dazu bräuchte man das vollständige Problem. Wenn ich das richtige sehe, bräuchte ich dazu Abaqus, insofern scheidet diese Möglichkeit wohl ohnehin aus.
Mir scheint, dass du in Pythontest.m die Nebenbedingungen noch einmal aufgenommen hast, indem du die Zielfunktion ggf. auf NaN setzt - das halte ich für keine gute Idee.
Was ist denn die Statusmeldung von fmincon?
Poste bitte auch mal iterativen Output von fmincon.
Eine Möglichkeit: wenn numerische Simulationen in der Zielfunktion gemacht werden, dann können die Fehler darin die Gradienten stark verfälschen. Da hilft es manchmal, die Option 'DiffMinChange' hochzusetzen.
Grüße,
Harald
|
|
|
PreOptimierer |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.08.2014, 02:57
Titel:
|
|
Hi,
habs nun mal sehr lange laufen lassen und nach einer Weile passiert da auch mehr, jedoch iteriert er immer sehr lange um die selben Werte rum, das Ergebnis war auch nicht berauschend (habe es irgendwann abgebrochen), fminsearch ist da deutlich besser.
Die PythonTest.m hatte ich nachträglich nochmal für Nutzung mit fminsearch geändert, hatte das beim Uploaden vergessen.
Ich habe nun wie du es mir rietest DiffMinChange hochgesetzt, jedoch müsste ich das eigentlich für jede variable einzeln bestimmen, da die variablen verschiedene sachen beschreiben und nicht für jede der selbe wert sinnvoll ist.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 12.08.2014, 09:49
Titel:
|
|
Hallo,
Zitat: |
habs nun mal sehr lange laufen lassen und nach einer Weile passiert da auch mehr, jedoch iteriert er immer sehr lange um die selben Werte rum, das Ergebnis war auch nicht berauschend (habe es irgendwann abgebrochen), fminsearch ist da deutlich besser. |
Das deutet sehr darauf hin, dass aus den zuvor genannten Gründen die Gradientenschätzung keine guten Ergebnisse liefert.
Zitat: |
Ich habe nun wie du es mir rietest DiffMinChange hochgesetzt, jedoch müsste ich das eigentlich für jede variable einzeln bestimmen, da die variablen verschiedene sachen beschreiben und nicht für jede der selbe wert sinnvoll ist. |
Dann müsstest du das mit der Option 'TypicalX' kombinieren.
Wenn fminsearch an sich gut funktioniert, dann kann es auch noch interessant sein, patternsearch (Global Optimization Toolbox) zu versuchen. Dadurch ist es wahrscheinlicher, dass globale Minima gemieden werden.
Grüße,
Harald
|
|
|
PreOptimierer |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.08.2014, 17:47
Titel:
|
|
Besten Dank! Werde in der Zukunft noch mehr mit Optimierung zu tun haben, jetzt reicht leider die Zeit nicht mehr aus noch viel herumzuprobieren, daher werde ich fminsearch nehmen ("Never change a running system") mit sinnvollen Startwerten, danke für deine Informationen, hat mich aufjedenfall weitergebracht!
|
|
|
|
|
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.
|
|