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

Werte/Vektor aus Optimierungsfunktion ausgeben

 

newbee

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2022, 10:31     Titel: Werte/Vektor aus Optimierungsfunktion ausgeben
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein kleines Problem mit einer Optimierung.
Ich nutze Patternsearch für eine Mehrzieloptimierung. die Struktur sieht so aus:

Code:

[v_opt,fval]= patternsearch(@ausführung(v), v)
 


dabei ist ausführung ein Skirpt mit einer Function, die weitere Skripte ausführt. Das sieht dann so aus:

Code:

%Skript ausführung

function [J]= Ausführung1(v)

run
run
run

%Ersatzfunktionswertberechnung
J = ...

end
 



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

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.03.2022, 12:01     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
newbee

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2022, 12:17     Titel:
  Antworten mit Zitat      
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

Forum-Meister


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

Zitat:
Könntest du mir ein Beispiel für den Aufruf geben?

Code:
[J, out2]= Ausfuehrung1(v)


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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
newbee

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2022, 12:47     Titel:
  Antworten mit Zitat      
Ich habe in dem Ausführungsskript die Funktion so ergänzt:

Code:


function [J, out2]= Ausführung1(v)

 


gleichzeitig habe ich am Ende der Optimierung das ergänzt:

Code:


[J, out2]= Ausfuehrung1(v)

 


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

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.03.2022, 13:02     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
newbee

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2022, 13:13     Titel:
  Antworten mit Zitat      
Sorry ,es hat sich wohl irgendwo ein Fehler im Skript eingeschlichen.

das ist die Fehlermeldung:

Too many output arguments.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.03.2022, 13:17     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
newbee

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2022, 13:20     Titel:
  Antworten mit Zitat      
ja, allerdings ist die Variable auch Orange unterstrichen mit der Warnung: the function return value might be unset
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.03.2022, 13:28     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
newbee

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2022, 14:16     Titel:
  Antworten mit Zitat      
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:

Code:

[J, out2]= Ausfuehrung1(v)
 


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

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.03.2022, 15:38     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
newbee

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2022, 16:12     Titel:
  Antworten mit Zitat      
Alles gut, trotzdem vielen Dank!
 
Jonathaan
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.11.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2023, 14:55     Titel:
  Antworten mit Zitat      
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
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: 17.04.2023, 11:02     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.