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

gamultiobj Outputfunction

 

simonwilbertz
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 17.03.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2015, 11:17     Titel: gamultiobj Outputfunction
  Antworten mit Zitat      
Hallo zusammen,
ich nutze den Optimierungsalgorithmus gamultiobj. Ich möchte Informationen über jede Generation haben. Die Standartausgabe

Code:
[X,FVAL,EXITFLAG,OUTPUT,POPULATION,SCORE] = gamultiobj(FITNESSFCN,NVARS,A,b,Aeq,beq,LB,UB,options);


liefert leider immer nur die letzte Generation. Weiß jemand wie man dies macht? Das Kapitel Outputfunctions aus der Dokumentation bringt mich leider nicht weiter.

Viele Grüße

Simon
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.05.2015, 14:15     Titel: Re: gamultiobj Outputfunction
  Antworten mit Zitat      
Hallo simonwilbertz,
Zitat:
Das Kapitel Outputfunctions aus der Dokumentation bringt mich leider nicht weiter.

Doch, um genau zu sein bringt Dich nur dieses Kapitel weiter:
http://www.mathworks.com/help/gads/.....rithm-options.html#f17837 . Du findest dort auch Beispiel-Code.

Bitte erkläre also, was genau Dir bei der Dokumentation nicht klar ist. Es wäre nicht effizient, wenn man hier die Seite einfach nochmal nacherzählt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
simonwilbertz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 17.03.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2015, 14:36     Titel:
  Antworten mit Zitat      
Okay, ein bisschen weiter bin ich schon:
Code:

options=gaoptimset('OutputFcns',{@myfun})

[X,FVAL,EXITFLAG,OUTPUT,POPULATION,SCORE] = gamultiobj(FITNESSFCN,NVARS,A,b,Aeq,beq,LB,UB,options);


die Vorlage aus der Dokumentation habe ich übernommen, auch wenn ich noch nciht ganz verstanden habe warum ich die switch case Sache einfügen muss. Also meine myfun sieht so aus:

Code:
function [x,options,optchanged] =myfun (options,state,flag)
optchanged = false;
if ~isfield(state,'Population')
      title('Rank Histogram: not available','interp','none');
    return;
end
 
switch flag
 case 'init'
        disp('Starting the algorithm');
         x=state.Population;
    case {'iter','interrupt'}
        disp('Iterating ...')
         x=state.Population
    case 'done'
        disp('Performing final task');
               
end
end


nach dem Berechnen der Startpopulation erfolgt dann allerdings immer folgende Fehlermeldung:

Starting the algorithm
Attempt to reference field of non-structure array.

Error in gaoutput (line 30)
if ~isempty(state.StopFlag)

Error in gamultiobjsolve (line 16)
[state,options] = gaoutput(FitnessFcn,options,state,currentState);

Wo ist mein Fehler?

Viele Grüße

Simon
Private Nachricht senden Benutzer-Profile anzeigen
 
simonwilbertz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 17.03.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2015, 14:45     Titel:
  Antworten mit Zitat      
Das hier ist übrigens noch der Code von gaoutput bis zu Zeile 32

Code:
function [state,options,optchanged] = gaoutput(~,options,state,flag)
%GAOUTPUT Helper function that manages the output functions for GA.
%
%   [STATE, OPTIONS, OPTCHANGED] = GAOUTPUT(~, OPTIONS, STATE, FLAG)
%   runs each of the display functions in the options.OutputFcns cell
%   array.
%
%   This is a helper function called by ga between each generation, and is
%   not typically called directly.

%   Copyright 2003-2011 The MathWorks, Inc.
%   $Revision: 1.1.6.5 $  $Date: 2012/10/24 04:18:01 $


% get the functions and return if there are none
optchanged = false;
functions = options.OutputFcns;
if(isempty(functions))
    return
end

% call each output function
stopFlag = [];
args = options.OutputFcnsArgs;
for i = 1:length(functions)
    % Always clear state.StopFlag before calling OutputFcns so that each
    % function can independently set a termination message.
    state.StopFlag = '';
    [state,optnew,changed] = feval(functions{i},options,state,flag,args{i}{:});
    if ~isempty(state.StopFlag)
        stopFlag = [stopFlag state.StopFlag ';'];
    end
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.05.2015, 17:28     Titel:
  Antworten mit Zitat      
Hallo simonwilbertz,

Erwartet werden die Outputs:
Code:
function [state,options,optchanged]

Deine Funktion liefert:
Code:
[x,options,optchanged] =myfun (options,state,flag)

Offenbar ist er erste Output kein Struct.
Du kannst den Debugger benutzen, um herauszufinden, was genau warum übergeben wird.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
simonwilbertz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 17.03.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2015, 08:51     Titel:
  Antworten mit Zitat      
Okay, alles klar dann habe ich es denke ich verstanden. x ist ja in meinem Falle kein struct mehr, weil ich die Werte von Population auf x ablege.

Habs geändert, jetzt klappt es. Vielen Dank für den Tipp!

Simon
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 - 2025 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.