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

'EqualityGoalCount' als Option in FGoalAttain

 

TobiasSOK

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2016, 07:25     Titel: 'EqualityGoalCount' als Option in FGoalAttain
  Antworten mit Zitat      
Hallo liebe Matlab-Gemeinde,

ich möchte mittels der Option 'EqualityGoalCount' die Anzahl der Goals setzen, die bei der Optimierung mit 'FGoalAttain' genau erreicht werden sollen (wird als Option in der Documentation & im Optimtool angeboten). Allerdings erhalte ich die folgende Fehlermeldung:

'EqualityGoalCount' is not an option for FGOALATTAIN.
A list of options can be found on the FGOALATTAIN documentation page.


Hier der entsprechende Code-Ausschnitt, welchen ich verwende:

Code:

%% Define Goals

Goal = [CBTarget, UCUTarget, ...
    TP9Target, TP17Target];

%% Define Weighting

Weight = [CBSign * CBWeighting ,...
    UCUSign * UCUWeighting ,...
    TP9Sign * TP9Weighting ,...
    TP17Sign * TP17Weighting ];


%% Define initial point & bounds of optimization

LB = [BLU.xPitchmin; BLU.yPitchmin];
UB = [BLU.xPitchmax; BLU.yPitchmax];

%% Define Constraints Function

    function [c,ceq]=constraints(xPitch,yPitch,BLU,LEDs)
        c(1) = xPitch*(LEDs.CntX-1)-BLU.Lx;
        c(2) = yPitch*(LEDs.CntY-1)-BLU.Ly;
        c(3) = xPitch-BLU.xPitchmax;
        c(4) = yPitch-BLU.yPitchmax;
        c(5) = BLU.xPitchmin-xPitch;
        c(6) = BLU.yPitchmin-yPitch;
        c(7) = -xPitch;
        c(8) = -yPitch;
        ceq  = [];
    end

ConstraintsFunction = @(xPitch,yPitch) constraints(xPitch,yPitch,BLU,LEDs);

%% Define objective function

    function [Results]=AnalysisFunction(xPitch,yPitch,BLU,LEDs,TP,SingleLensDist)
       
        LEDs.xPitch = xPitch;
        LEDs.yPitch = yPitch;
       
        %Calculate BLU
        [BLU,~] = Calculation_BLU(BLU,LEDs,SingleLensDist);
       
        %Calculate Testpoint Performante
        BLU = Calculation_TPPerformance(BLU,TP);
       
        %Calculate Testpoint Unifomity (TP9)
        CopyData(2:4,2:4) = reshape(BLU.ninepoint_avg{1}*100,3,3);
        Results(3) = double(min(min(CopyData(2:4,2:4))));
       
        %Calculate Testpoint Unifomity (TP17)
        CopyData(5,1) = BLU.cornerpoint_avg{1}(1) *100;
        CopyData(5,5) = BLU.cornerpoint_avg{1}(3) *100;
        CopyData(1,1) = BLU.cornerpoint_avg{1}(7) *100;
        CopyData(1,5) = BLU.cornerpoint_avg{1}(9) *100;

        CopyData(1,3) = BLU.cornerpoint_avg{1}(2) *100;
        CopyData(5,3) = BLU.cornerpoint_avg{1}(8) *100;
        CopyData(3,5) = BLU.cornerpoint_avg{1}(4) *100;
        CopyData(3,1) = BLU.cornerpoint_avg{1}(6) *100;
   
       Results(4) = double(min(min(CopyData(CopyData~=0))));
       
        %Calculate CenterBrightness
        Results(1) = double(BLU.NitsScaleNits * BLU.ninepoint_val{1}(5));
       
        %Calculate Unit Cell Uniformity
        LeftEdge    = round(BLU.Ly/2-LEDs.yPitch/2,0);
        RightEdge   = round(BLU.Ly/2+LEDs.yPitch/2,0);
        BottomEdge  = round(BLU.Lx/2-LEDs.xPitch/2,0);
        UpperEdge   = round(BLU.Lx/2+LEDs.xPitch/2,0);
        BLU.CenterArea = BLU.Lum(LeftEdge:RightEdge,BottomEdge:UpperEdge);
        Results(2) = double(min(min(BLU.CenterArea))/max(max(BLU.CenterArea)))*100;
       
    end

ObjectiveFunction = @(xPitch,yPitch) -AnalysisFunction(xPitch,yPitch,BLU,LEDs,TP,SingleLensDist);
%The minus before "AnalysisFunction" is necessary for maximazation of
%performance parameters CB,UCU,TP9 and TP17 [max(f)=min(-f)].
%Without this setting "fgoalattain" minimize this parameters.


%% Optimization

options = optimoptions('fgoalattain','EqualityGoalCount',2,...
    'FinDiffRelStep',[.1,.1],...
    'MaxFunEvals',MaxFunEvals);
%The value of MaxFunEvals is defined in Config.txt.
% 'PlotFcns',@optimplotstepsize

[Pitch,~,~,exitflag] = fgoalattain(@(Pitch) ObjectiveFunction(Pitch(1),Pitch(2)),...
    Start,Goal,Weight,[],[],[],[],LB,UB,...
    @(Pitch) ConstraintsFunction(Pitch(1),Pitch(2)),options);



Sieht jemand zufällig eine Stelle, welche diesen Fehler verursachen könnte.

Ich nutze Matlab R2015b.

PS:Ich möchte bemerken, dass es nicht darum geht wie gut rechentechnisch optimiert die zu optimierende Funktion ist Smile


TobiasSOK

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2016, 08:11     Titel:
  Antworten mit Zitat      
Ich habe meinen Fehler selbst gefunden.

'EqualityGoalCount' ist erst ab R2016a verfügbar für 'FGoalAttain'.

Vielleicht weiß trotzdem jemand, wie man das relativ simple in R2015b implementieren kann.
 
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.