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

Optimization Toolbox, Fmincon Problem

 

Daniel2211
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 26.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.03.2018, 10:11     Titel:
  Antworten mit Zitat      
Ich habe nochmal eine Frage bzgl des Ablaufs eines Solvers. Ich werde da einfach nicht schlau draus.

Wie genau läuft der Solver ab. Ich habe ja im Main-Programm alle Parameter definiert und unter anderem auch den Function handle überlegen. Dieser verweist ja letztendlich auf ein "unter-Programm", indem die zu optimierende Funktion enthalten ist. Ich habe außerdem über den Function handle definiert, dass die Funktion nach x zu optimieren ist. Aber wie genau läuft es jetzt ab. Befindet sich der Solver so lange in diesem "unter-Programm" bis ein Solver abgeschlossen ist (wie eine While-Schleife). Gibt dann jedesmal den optimierteren x-Vektor wieder vorne rein?

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

ich würde nicht sagen, dass sich der Solver solange in dem Unterprogramm befindet, sondern dass er das Unterprogramm immer wieder mit neuem x aufruft.

Sehr vereinfacht:
x = x0;
while (Abbruchkriterien nicht erfüllt)
1. Zielfunktion wird bei x ausgewertet
2. Gradient wird über weitere Zielfunktionsauswertungen geschätzt oder analytisch ermittelt.
3. Neues x wird ermittelt, indem eine gewisse Schrittweite entlang des Gradienten gegangen wird.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 26.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.03.2018, 10:52     Titel:
  Antworten mit Zitat      
Wenn ich mir zum Beipsiel im Unterprogramm den aktuellen X-Vektor ausgeben lasse, dann bleibt dieser für die ersten ungefähr 50 "Durchläufe" bei den Startfaktoren.
Im Command window kann ich also immer sehen, dass der Solver aufgerufen wurde bzw. das Simulationsmodell, welches sich in dem Unterprogramm befindet. gefolgt von meinem Startfaktor. Erst danach (nach ungefähr 50 Aufrufen) ändert sich die Ausgabe meines Vektors von Aufruf zu Aufruf. Das verstehe ich nicht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Daniel2211
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 26.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.04.2018, 10:00     Titel:
  Antworten mit Zitat      
Guten Morgen,

über Ostern lief mein Solver jetzt mal durch und ich erhalte folgende Ergebnisse:

_____
1000 12187 0.587 0.5865 0.5865 Stage 2 Search

GlobalSearch stopped because it analyzed all the trial points.

All 44 local solver runs converged with a positive local solver exit flag.
_____

Verstehe ich das jetzt richtig, dass der Solver gar nicht richtig durchgelaufen ist, sondern lediglich die Startpunkte analysiert hat?

Außerdem habe ich das Problem, dass er das ganze Kennfeld anpasst, obgleich ich das eigentlich nicht möchte. Ich habe nämlich einen Bereich, der lediglich optimiert werden soll, da ich in meinen EIngangsdaten NANs habe. Das ist auch soweit richtig, da in diesem Bereich Daten fehlten, Kein Problem. Jetzt habe ich mit folgenden Code gedacht, das er die Funktion auch nur für diesen Bereich optimiert (also den Vektor x)

Code:


x_mat = VektorToMatrix(x);
CAL.PFlt_facCorSotLamBas6_M.data = x_mat;
sim('Sim.slx')
[xq,yq] = meshgrid(x_neng, y_trq);
vq2 = griddata(mod_neng,mod_trq,sim_soot,xq,yq);

sim_soot_vek = MatrixToVektor(vq2);

g = sim_soot_vek(~isnan(sim_soot_vek)).*x(~isnan(sim_soot_vek))-soll_soot_vek(~isnan(soll_soot_vek));


f = norm(g);
 


In dem Code nehme ich das aktuelle x, schreibe es in Matrixform in die Kalibrierung des Simulationsmodells. Erhalte meine simulierten Werte (welche in Abhängigkeit von dem Faktor x in dem Modell berechnet werden) Die simulierten Ergbnisse bringe ich ins Kennfeld und schreibe sie danach wieder in einen Vektor. Dann berechne ich den Fehler in jedem Element des Vektors. Und macht er auch nur für die Bereiche, wo keine nans vorliegen. Aber mein finaler x Vektor hat auch in diesen Bereichen Werte.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.04.2018, 14:49     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Verstehe ich das jetzt richtig, dass der Solver gar nicht richtig durchgelaufen ist

Nein, der letzte Satz in der Meldung sagt ja das Gegenteil.

Beim 2. Problem bin ich nicht sicher, ob ich das richtig verstehe.
Wenn du weniger Variablen verwenden möchtest, dann musst du auch den Startvektor entsprechend anpassen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 26.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.04.2018, 13:15     Titel:
  Antworten mit Zitat      
Ich habe das Problem, dass lediglich ein Teil des Kennfeldes optmiert werden soll über die Nebenbedingungen des Solvers jetzt gelöst.

Außerdem habe ich einen Logikfehler in meiner Funktion festgestellt. Hier hatte ich bei jedem Solveraufruf eine Simulation der Softwarestruktur gestartet mit den aktuellen Faktoren in der Kalibrierung. So wollte ich mir bezogen auf den aktuellen Stand immer die aktuellen IST-Werte berechen lassen und mit der anschließenden Fehlerfunktion zu den Vorgaben weiter optimieren. Aber wenn ich das so mache dauert es ewig und außerdem drehe ich mich im Kreis, weil die Faktoren bei Neusimulation der IST-Werte ja wieder andere sein müssen. Meine Funktion geht jetzt so (natürlich alles Vektoren):

f=norm(Ist_wert*x-soll_wert);

Ich denke, das sollte jetzt so passen. Stoße ich allerdings den GS an, erhalte ich folgendes Ergebnis. Stets Exitflag 5 und die initial points liefern häufig den besten Funktionswert.

______

Num Pts Best Current Threshold Local Local
Analyzed F-count f(x) Penalty Penalty f(x) exitflag Procedure
0 68704 0.005593 0.005593 5 Initial Point
200 142241 0.005585 0.005585 5 Stage 1 Local
300 142343 0.005585 1919 1.085 Stage 2 Search
400 142443 0.005585 2324 4.189 Stage 2 Search
438 214124 0.005585 0.4372 6.472 0.00559 5 Stage 2 Local
440 285995 0.005574 0.4255 0.4372 0.005574 5 Stage 2 Local
444 358545 0.005574 0.4113 0.4255 0.005577 5 Stage 2 Local
446 430867 0.005574 0.4087 0.4113 0.005578 5 Stage 2 Local
450 503191 0.005574 0.4076 0.4087 0.005578 5 Stage 2 Local
472 575534 0.005574 0.4138 0.6891 0.005582 5 Stage 2 Local
475 648083 0.005574 0.4132 0.4138 0.005583 5 Stage 2 Local
476 720630 0.005574 0.4122 0.4132 0.005584 5 Stage 2 Lo

.
.
.
983 4541007 0.005574 0.4011 0.4012 0.005579 5 Stage 2 Local
984 4612877 0.005574 0.4011 0.4011 0.005579 5 Stage 2 Local
998 4685211 0.005574 0.401 0.4011 0.005578 5 Stage 2 Local
1000 4685213 0.005574 0.4011 0.401 Stage 2 Search

GlobalSearch stopped because it analyzed all the trial points.

All 65 local solver runs converged with a positive local solver exit flag.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.