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

Response Optimization: DesignVars/Plot aus Matlab Code

 

Len

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2020, 13:56     Titel: Response Optimization: DesignVars/Plot aus Matlab Code
  Antworten mit Zitat      
Hallo zusammen,

ich verwende für eine Optimierungsaufgabe die Response Optimization aus der Simulink Design Optimization. Bei Verwendung der GUI in Simulink über Analysis/Response Optimization können diverse Plots zu Designvariablen und in meinem Fall zu einem optimierten Signal ausgegeben wereden. Da ich die Response Optimization aber als Teil eines größeren Skripts durchlaufen lassen möchte, habe ich die Optimierung als Matlab Code ausgeben lassen. Die Optimierung ansich funktioniert auch und ich bekomme als Zwischenschritte die Iterationen, F-count, f(x), stepsize und die first-order optimality im Command Window angezeigt.

Meine Frage ist: Gibt es eine Möglichkeit die verwendeten DesignVars für die einzenlen Iterationen anzeigen zu lassen und im Optimalfall auch plotten zu können? Mir würde eine Übersicht nach der Optimierung reichen, das heißt es muss nicht während der Iterationsschritte sein.


Vielen Dank vorab! Smile

Viele Grüße
Len


Harald
Forum-Meister

Forum-Meister


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

Zitat:
Da ich die Response Optimization aber als Teil eines größeren Skripts durchlaufen lassen möchte, habe ich die Optimierung als Matlab Code ausgeben lassen. Die Optimierung ansich funktioniert auch und ich bekomme als Zwischenschritte die Iterationen, F-count, f(x), stepsize und die first-order optimality im Command Window angezeigt.

Wie sieht der MATLAB-Code denn aus? Generell würde ich zu Plot Functions raten, siehe
https://de.mathworks.com/help/optim/ug/plot-functions.html
Nach Abschluss der Optimierung kannst du die Ergebnisse natürlich weiterverarbeiten (insbesondere auch plotten) wie du willst.

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
 
Len

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2020, 14:39     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für die schnelle Antwort. Ich habe den von Simulink automatisch generierten Code unten aufgeführt. Wenn ich ihn in Matlab durchlaufen lasse werden meine meine beiden DesignVariablen A und B mit den Werten ersetzt, die output maximieren. Ich würde gerne eine Art Verlauf zwischenspeichern. Ich kann mir gut vorstellen, dass die Werte schon irgendwo zwischengespeichert werden, ich weiß nur nicht wo Smile

Viele Grüße
Len


Code:

function [Optimized_DesignVars, Info] = sdo_model(DesignVars)
%SDO_model
%
% Solve a design optimization problem for the model model.
%
% The function returns optimized parameter values, Optimized_DesignVars,
% and optimization termination information, Info.
%
% The input argument, DesignVars, defines the model parameters to optimize,
% if omitted the parameters specified in the function body are optimized.
%
% Modify the function to include or exclude new design requirements or
% change the optimization options.
%
% Auto-generated by SDOTOOL on 28-Sep-2020 17:46:29.
%

%% Open the model.
open_system('model')

%% Specify Design Variables
%
% Specify model parameters as design variables to optimize.
if nargin < 1 || isempty(DesignVars)
    DesignVars = sdo.getParameterFromModel('model',{'A','B'});
    DesignVars(1).Minimum = 1;
    DesignVars(1).Maximum = 300;
    DesignVars(2).Minimum = 1;
    DesignVars(2).Maximum = 20;
end

%% Specify Design Requirements
%
% Specify design requirements to satisfy during optimization.
Requirements = struct;
Requirements.output = sdo.requirements.SignalProperty(...
    'Function', @(ts)sdo.requirements.signalPropertyAlgs(ts,'final'), ...
    'Type', 'max');

%% Simulation Definition
%
% Specify model signals to log during model simulation.
Simulator = sdo.SimulationTest('model');

Sig_Info = Simulink.SimulationData.SignalLoggingInfo;
Sig_Info.BlockPath = 'model/Ausgang/Divide1';
Sig_Info.LoggingInfo.LoggingName = 'Sig';
Sig_Info.LoggingInfo.NameMode = 1;

Simulator.LoggingInfo.Signals = Sig_Info;

%% Create Optimization Objective Function
%
% Create a function that is called at each optimization iteration
% to evaluate the design requirements.
%
% Use an anonymous function with one argument that calls model_optFcn.
optimfcn = @(P) model_optFcn(P,Simulator,Requirements);

%% Optimization Options
%
% Specify optimization options.
Options = sdo.OptimizeOptions;
Options.MethodOptions.ConstraintTolerance = 0.1;
Options.MethodOptions.FunctionTolerance = 0.1;
Options.MethodOptions.MaxIterations = 20;
Options.MethodOptions.OptimalityTolerance = 0.1;
Options.MethodOptions.StepTolerance = 0.1;
Options.ParallelPathDependencies = cell([1 0]);
Options.OptimizedModel = 'model';

%% Optimize the Design
%
% Call sdo.optimize with the objective function handle, parameters to
% optimize, and options.
[Optimized_DesignVars,Info] = sdo.optimize(optimfcn,DesignVars,Options);

%% Update Model
%
% Update the model with the optimized parameter values.
sdo.setValueInModel('model',Optimized_DesignVars);
end

function Vals = model_optFcn(P,Simulator,Requirements)
%model_OPTFCN
%
% Function called at each iteration of the optimization problem.
%
% The function is called with a set of parameter values, P, and returns
% the objective value and constraint violations, Vals, to the optimization
% solver.
%
% See the sdoExampleCostFunction function and sdo.optimize for a more
% detailed description of the function signature.
%

%% Model Evaluation

% Simulate the model.
Simulator.Parameters = P;
Simulator = sim(Simulator, 'Timeout', 180);

% Retrieve logged signal data.
SimLog = find(Simulator.LoggedData,get_param('model','SignalLoggingName'));
Sig_Log = find(SimLog,'Sig');

% Evaluate the design requirements.
F_output = evalRequirement(Requirements.output,Sig_Log.Values);

%% Return Values.
%
% Collect the evaluated design requirement values in a structure to
% return to the optimization solver.
Vals.F = F_output;
end
 
 
Harald
Forum-Meister

Forum-Meister


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

falls dir das hilft: Optimized_DesignVars sind die Ergebnisse.

Die PlotFcn solltest du hier über Options.MethodOptions angeben können, also z.B.
Code:
opts.MethodOptions.PlotFcn = "optimvalx";


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



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.