|
|
Werte/Vektor aus Optimierungsfunktion ausgeben |
|
newbee |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.03.2022, 09:31
Titel: Werte/Vektor aus Optimierungsfunktion ausgeben
|
|
Hallo zusammen,
ich habe ein kleines Problem mit einer Optimierung.
Ich nutze Patternsearch für eine Mehrzieloptimierung. die Struktur sieht so aus:
dabei ist ausführung ein Skirpt mit einer Function, die weitere Skripte ausführt. Das sieht dann so aus:
Unteranderem werden in einem Skript die Zielfunktionen in dem Vektor Fun zusammengetragen. Aus diesen Zielfunktionen wird dann ein Wert J gebildet der durch die Optimierung zu minimieren ist.
Am Ende der Optimierung wird der Wert in f_val ausgegeben. Jetzt möchte ich nicht nur den Funktionswert J als f_val in meinem Workspace, sondern auch die einzelnen Zielfunktionswerte bzw. den Vektor Fun im Workspace haben.
Hat dafür jemand eine Lösung?
Vielen Dank
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 24.03.2022, 11:01
Titel:
|
|
Hallo,
ich würde die zusätzlichen Informationen als zweites Argument der Funktion (wird beim Zielfunktionsaufruf durch patternsearch nicht verwendet) zurückgeben und nach Ende der Optimierung einen zusätzlichen Aufruf nachlagern.
Skripte aus Funktionen heraus aufzurufen ist fehleranfällig und daher nicht empfohlen. Die Skripte würde ich in Funktionen umwandeln und auch als solche aufrufen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
newbee |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.03.2022, 11:17
Titel:
|
|
Könntest du mir ein Beispiel für den Aufruf geben? Ich hatte das schon probiert, aber hat nicht so ganz geklappt
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 24.03.2022, 11:23
Titel:
|
|
Hallo,
Zitat: |
Könntest du mir ein Beispiel für den Aufruf geben? |
Zitat: |
Ich hatte das schon probiert, aber hat nicht so ganz geklappt |
Bitte schreibe genau, was du versucht hast und was daran nicht geklappt hat.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
newbee |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.03.2022, 11:47
Titel:
|
|
Ich habe in dem Ausführungsskript die Funktion so ergänzt:
gleichzeitig habe ich am Ende der Optimierung das ergänzt:
dann bekomme ich die Fehlermeldung
Not enough input arguments.
Ich denke das Problem liegt daran, dass der Zeilfunktionsvektor von sehr sehr vielen Variablen abhängt, die nicht alle bekannt sind und ich nicht alle als Eingabeargumente einfügen kann.
Gibt es noch eine andere Möglichkeit? die Funktion global kommt auch nicht in Frage
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 24.03.2022, 12:02
Titel:
|
|
Hallo,
du änderst die Outputs und bekommst eine Fehlermeldung für die Inputs?
Da scheint etwas anderes nicht zu passen.
Zitat: |
Ich denke das Problem liegt daran, dass der Zeilfunktionsvektor von sehr sehr vielen Variablen abhängt |
Die Anzahl der Variablen ist egal.
Zitat: |
die nicht alle bekannt sind und ich nicht alle als Eingabeargumente einfügen kann. |
Wenn sie nicht bekannt sind, woher soll MATLAB sie dann kennen? Warum schreibst du von Eingabeargumenten, wenn es dir doch um zusätzliche Rückgabeargumente geht?
Ich fürchte, dass wir hier nur mit einem reproduzierbaren Beispiel weiterkommen werden.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
newbee |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.03.2022, 12:13
Titel:
|
|
Sorry ,es hat sich wohl irgendwo ein Fehler im Skript eingeschlichen.
das ist die Fehlermeldung:
Too many output arguments.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 24.03.2022, 12:17
Titel:
|
|
Hallo,
hast du denn die Deklarationszeile der Funktion entsprechend angepasst?
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
newbee |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.03.2022, 12:20
Titel:
|
|
ja, allerdings ist die Variable auch Orange unterstrichen mit der Warnung: the function return value might be unset
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 24.03.2022, 12:28
Titel:
|
|
Hallo,
dann solltest du die Warnung beheben: wie soll denn das zweite Rückgabeargument aus den vorhandenen Informationen ermittelt werden?
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
newbee |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.03.2022, 13:16
Titel:
|
|
Ich habe eine Lösung gefunden, allerdings gefällt mir diese nicht ganz so gut, aber ist ok wenn es nicht anders geht.
Vielleicht hatte ich zu wenige Informationen gegeben. Es soll ein Motor optimiert werden. dazu gibt es ein Simulink Modell, das auch durch die Ausführungsfunktion gestartet wird.
wenn ich jetzt am Ende der Optimierung:
wird die Simulation des Motors nochmal ausgeführt.
ersetzte ich v durch v_opt, welche die optimierten geometrischen Parameter des Motors sind, erhalte ich in meinem Workspace J und out2. Unschön ist, dass halt noch eine Simulation durchgeführt werden muss.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 24.03.2022, 14:38
Titel:
|
|
Hallo,
Zitat: |
Unschön ist, dass halt noch eine Simulation durchgeführt werden muss. |
Einen eleganteren Weg kenne ich nicht.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
newbee |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.03.2022, 15:12
Titel:
|
|
Alles gut, trotzdem vielen Dank!
|
|
|
Jonathaan |
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 11.11.22
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.04.2023, 13:55
Titel:
|
|
Hallo,
ist zwar inzwischen über ein Jahr her, aber vllt sieht ja hier trotzdem noch jemand meine Frage. Ich stehe vor der Aufgabe, dass ich einen Prozess, welcher in einem Simulink Modell abgebildet ist, mithilfe von Matlab optimieren soll. Habe mich bereits recht ordentlich in die Möglichkeiten zur Optimierung in Matlab eingelesen, aber ich finde keinen Weg, wie ich die "objective function" für die Optimierung in Matlab aus meinem Simulink Modell bekommen kann. Hier in diesem Beispiel wurde das ja offensichtlich durchgeführt, mir ergibt sich aus den Code Schnipseln aber nicht genau wie. Der dazugehörige Code als Beispiel oder eine Erklärung könnten echt sehr hilfreich sein! Würde mich freuen.
VG
Jonathan
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 17.04.2023, 10:02
Titel:
|
|
Hallo,
du kannst das Simulink-Modell mit dem sim-Befehl simulieren und dann die Rückgaben analysieren. Da du den Aufruf aus einer Funktion heraus machen wirst, darauf achten, dass die richtigen Parameter verwendet werden, z.B. mit Simulink.SimulationInput.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
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.
|
|