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

Particleswarm

 

maki
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 23.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2020, 10:28     Titel: Particleswarm
  Antworten mit Zitat      
Hallo,

ich würde gerne den Particleswarm zur Optimierung nutzen.

Code:
%Initial values einzelner Stufen
Xv0   = [0.3*10^6 ,0.3*10^6    ,0.3*10^6    ,0.3*10^6    ,0.4*10^6    ,0.4*10^6    ,0.25*10^6   ,0.3*10^6    ,0.38*10^6  ,0.38*10^6];
Xd0   = [6*10^3   ,6*10^3      ,6*10^3      ,6*10^3      ,6*10^3      ,6*10^3      ,6*10^3      ,6*10^3      ,6*10^3     ,6*10^3];% ,0.3*10^6];
cGlc0 = [6.8      ,6.8         ,6.8         ,6.8         ,6.8         ,6.8         ,6.8         ,6.8         ,6.8        ,6.8];    
cLac0 = [0.3      ,0.3         ,0.3         ,0.3         ,0.3         ,0.3         ,0.3         ,0.3         ,0.3        ,0.3];    
cGln0 = [0.9      ,0.9         ,0.9         ,0.9         ,0.9         ,0.9         ,0.9         ,0.9         ,0.9        ,0.9];      
cAmm0 = [1        ,1           ,1           ,1           ,1           ,1           ,1           ,1           ,1          ,1];    
v0    = [0.25     ,0.5         ,1           ,2           ,2           ,10          ,50          ,80          ,400        ,2000];    
%%
%Parameters()
Parameters(1) = 0.055;     % my_max   [h^-1]          Maximum Specific Growth Rate  
Parameters(2) = 0.03;      % my_d_max [h^-1]          Maximum Specific Death Rate  
Parameters(3) = 0.002;     % my_d_min [h^-1]          Minimum Specific Death Rate                  
Parameters(4) = 1.8*10^-8; % qGlc_max [mmol/cells *h] Maximum Cell-specific Glucose Uptake Rate
Parameters(5) = 0.8*10^-8; % qGln_max [mmol/cells *h] Maximum Cell-specific Glutamine Uptake Rate
Parameters(6) = 1.2*10^-12;% qLac_max [mmol/cells *h] Maximum Cell-specific Lactate Uptake Rate
Parameters(7) = 0.19;      % kGlc     [mmol/L]        Monod Kinetic Constant for Glucose Uptake
Parameters(8) = 0.3;       % kGln     [mmol/L]        Monod Kinetic Constant for Glutamine Uptake
Parameters(9) = 0.03;      % KsGlc    [mmol/L]        Monod Kinetic Constant for Glucose          
Parameters(10) = 0.03;     % KsGln    [mmol/L]        Monod Kinetic Constant for Glutamine  
 %%
%constants
%Constants(1) = 0.01;       % KLys        [h^-1]          Constant for Cell Lysing    
Constants(2) = 4*10^-12;   % qAmm_uptake [mmol/cells *h] Maximum Cell-specific Ammonia Uptake Rate  
Constants(3) = 0.4;        % YAmm/Gln    [mmol/mmol]     Kinetic production Constant for Ammonia by consuming Glutamine  
Constants(4) = 1.6;        %YLac/Glc     [mmol/mmol]     Kinetic production Constant for Lactate by consuming Glucose  
Constants(5) = 0;          %             [L]             Sample Volume
Constants(6) = 0.5;        %                             Correction Factor for Ammonia uptake
%%
n = 10; %Anzahl an Stufen
%Laufdauer
t=0;
y=[0,0,0,0,0,0,0];
Laufdauer =[0 72;72 144 ;144 216;216 288;288 360;360 432;432 504;504 576;576 648;648 1059]; %Laufdauer der einzelnen Stufen
for k = 1:n
    tRange= Laufdauer(k,:);  
    c0 = [ Xv0(k); Xd0(k); cGlc0(k); cLac0(k);  cGln0(k);  cAmm0(k); v0(k)]; %Vector that contains all the Initial values  
%%
%ODE45
[tSpeicher,ySpeicher] = ode15s(@Model_BI130_1, tRange, c0, Parameters, Constants);
 
 t = vertcat(t,tSpeicher);
 y= vertcat(y,ySpeicher);
end
%Total Cell Density
Xv = y (:,1);
Xd = y (:,2);
Xt = Xv + Xd;
%Viability
Viability = (Xv./Xt)*100;

[x,fval,exitflag,output]  = particleswarm(@Model_BI130_1,10,[],[])


mit der Funktion

function [dcdt] = Model_BI130_1(t,c,Parameters,Constants)
%%
%Parameters()
Parameters(1) = 0.055;     % my_max   [h^-1]          Maximum Specific Growth Rate  
Parameters(2) = 0.03;      % my_d_max [h^-1]          Maximum Specific Death Rate  
Parameters(3) = 0.002;     % my_d_min [h^-1]          Minimum Specific Death Rate                  
Parameters(4) = 1.8*10^-8; % qGlc_max [mmol/cells *h] Maximum Cell-specific Glucose Uptake Rate
Parameters(5) = 0.8*10^-8; % qGln_max [mmol/cells *h] Maximum Cell-specific Glutamine Uptake Rate
Parameters(6) = 1.2*10^-8;% qLac_max [mmol/cells *h] Maximum Cell-specific Lactate Uptake Rate
Parameters(7) = 0.19;      % kGlc     [mmol/L]        Monod Kinetic Constant for Glucose Uptake
Parameters(8) = 0.3;       % kGln     [mmol/L]        Monod Kinetic Constant for Glutamine Uptake
Parameters(9) = 0.03;      % KsGlc    [mmol/L]        Monod Kinetic Constant for Glucose          
Parameters(10) = 0.03;     % KsGln    [mmol/L]        Monod Kinetic Constant for Glutamine  
 %%
%constants
%Constants(1) = 0.0000;       % KLys        [h^-1]          Constant for Cell Lysing    
Constants(2) = 4*10^-12;   % qAmm_uptake [mmol/cells *h] Maximum Cell-specific Ammonia Uptake Rate  
Constants(3) = 0.4;        % YAmm/Gln    [mmol/mmol]     Kinetic production Constant for Ammonia by consuming Glutamine  
Constants(4) = 1.0;        %YLac/Glc     [mmol/mmol]     Kinetic production Constant for Lactate by consuming Glucose  
Constants(5) = 0;          %             [L]             Sample Volume
Constants(6) = 0.5;        %                             Correction Factor for Ammonia uptake
%%
%Parameters()
my_max   = Parameters(1);
my_d_max = Parameters(2);
my_d_min = Parameters(3);
qGlc_max = Parameters(4);
qGln_max = Parameters(5);
qLac_uptake_max = Parameters(6);
kGlc     = Parameters(7);
kGln     = Parameters(8);
KsGlc    = Parameters(9);
KsGln    = Parameters(10);

%constants()
%Klys            = Constants(1);
qAmm_uptake_max = Constants(2);
YAmm_Gln        = Constants(3);
YLac_Glc        = Constants(4);
Fsample         = Constants(5);
kAmm            = Constants(6);
%%
%Bennenung der Variablen
Xv   = c(1); %viable cell density
Xd   = c(2); %total cell density
cGlc = c(3); % Glucose concentration
cLac = c(4); % Lactate concentration
cGln = c(5); % Glutamin concentration
cAmm = c(6); % Ammonia concentration
v    = c(7); % Volume
%%
%Parameter Berechnung
my = my_max * (cGlc/(cGlc + KsGlc)) * (cGln/(cGln + KsGln))*0.5;                                     %Cell specific growth rate
my_d = my_d_min + my_d_max * (KsGlc/(KsGlc + cGlc)) * (KsGln/(KsGln + cGln));                 %Cell specific death rate
qGlc = qGlc_max * (cGlc/(cGlc + kGlc)) * (my/(my + my_max)+0.5);                                 %Glucose Updake Rate
qGln = qGln_max * (cGln/(cGln + kGln));                                                         %Glutamine Uptake Rate
qLac = YLac_Glc * qGlc * (cGlc/cLac) - qLac_uptake_max * ((my_max - my)/my_max);                  %Lactate production Rate
qAmm = YAmm_Gln * qGln * cGln/cAmm - kAmm * qAmm_uptake_max * ((my_max - my)/my_max);           %Ammonia production Rate                                                            %Limiting substrate  
%%
%Differential Equations
dXvdt   = Xv * (my - my_d);              % Equation 1 - dXv/dt
dXddt   = Xv * my_d;                     % Equation 2 - dXt/dt  
dcGlcdt = -1.0 * Xv * qGlc;              % Equation 4 - dcGlc/dt
dcLacdt  = Xv * qLac;                    % Equation 5 - dcLac/dt
dcGlndt = -1.0 * Xv * qGln;              % Equation 6 - dcGln/dt
dcAmmdt = Xv * qAmm;                     % Equation 7 - dcAmm/dt
dvdt    = Fsample;                       % Equation 8 - dV/dt


[dcdt]=[dXvdt; dXddt; dcGlcdt; dcLacdt; dcGlndt; dcAmmdt; dvdt]; % concentration changes as ouput

end


bringt mir die Fehlermeldung

Code:
Not enough input arguments.

Error in Model_BI130_1 (line 44)
Xv   = c(1); %viable cell density

Error in particleswarm>makeState (line 694)
        firstFval = objFcn(state.Positions(1,:));

Error in particleswarm>pswcore (line 169)
state = makeState(nvars,lbMatrix,ubMatrix,objFcn,options);

Error in particleswarm (line 151)
[x,fval,exitFlag,output] = pswcore(objFcn,nvars,lbRow,ubRow,output,options);

Error in Call_Model_BI130_1 (line 56)
[x,fval,exitflag,output]  = particleswarm(@Model_BI130_1,10,[],[])

Caused by:
    Failure in initial objective function evaluation. PARTICLESWARM cannot continue.



Warum sind es nicht genügend Input Paramter? Und bezieht es sich auf die Syntax des Partikelschwarms? Dieser hat als Input laut Dokumentation
Zitat:
(fun,nvars,lb,ub)
, was eigentlich erfüllt ist.

Und warum wird der Fehler in
Zitat:
Error in Model_BI130_1 (line 44)
Xv = c(1); %viable cell density
angezeigt?

Vielen Dank schon mal für euren Input

Viele Grüße,
Martin
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: 07.05.2020, 11:40     Titel:
  Antworten mit Zitat      
Hallo,

vorab: es ist nicht sinnvoll, Parameters und Constants in der Funktion als Input Arguments entgegenzunehmen und sie in der Funktion zu überschreiben.

particleswarm braucht eine Funktion, die es mit einem Argument aufrufen kann. Deine Funktion benötigt (Stand jetzt) 4 Argumente.

Abhilfe:
Code:
particleswarm(@(t) Model_BI130_1(t,c,Parameters,Constants), ...


Das ist übrigens auch in der Doku von particleswarm ziemlich oben verlinkt:
https://www.mathworks.com/help/opti.....ing-extra-parameters.html

Zitat:
Und warum wird der Fehler in
Error in Model_BI130_1 (line 44)
Xv = c(1); %viable cell density
angezeigt?

Weil du dort versuchst c zu verwenden, und c in diesem Workspace nicht bekannt ist.

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
 
maki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 23.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2020, 12:04     Titel:
  Antworten mit Zitat      
Hallo, vielen Dank.

Zitat:
vorab: es ist nicht sinnvoll, Parameters und Constants in der Funktion als Input Arguments entgegenzunehmen und sie in der Funktion zu überschreiben.


Sobald ich die Parameter und constants aber nicht in der Funktion überschreite, kommt der Fehler

Code:
Index exceeds the number of array elements (6).

Error in Model_BI130_1 (line 30)
kGlc     = Parameters(7);


Das hängt wohl mit den Constants zusammen, diese gehen bis constants(6). Denn sobald ich einen constants(7) hinzufüge, kommt der Fehler

Code:
Index exceeds the number of array elements (7).

Error in Model_BI130_1 (line 31)
kGln     = Parameters(8);


Warum hängen die zusammen? Ich verstehe das nicht.

Viele Grüße,
Martin
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: 07.05.2020, 13:20     Titel:
  Antworten mit Zitat      
Hallo,

da hängt nichts zusammen.

Ein Schlüsselproblem ist, dass du die Funktion zwei Mal verwendest, einmal für ode15s und einmal für particleswarm. Die beiden benötigen aber unterschiedliche Schnittstellen. Bei ode15s verwendest du zudem eine undokumentierte Syntax (schlechte Idee!) für die Übergabe der Parameter.

Ich habe mal angepasste Dateien angehängt.

Offen bleiben folgende Fragen:
* was soll particleswarm denn variieren? Ich habe mal vermutet: c.
* noch wichtiger: was soll denn optimiert werden? particleswarm erwartet einen einzigen Wert als Rückgabe, deine Funktion gibt aber einen Vektor zurück.

Davon abgesehen frage ich mich, warum man einen Ableitungsvektor minimieren wollen würde.

Grüße,
Harald

Model_BI130_1.m
 Beschreibung:

Download
 Dateiname:  Model_BI130_1.m
 Dateigröße:  3.82 KB
 Heruntergeladen:  298 mal
testOptim.m
 Beschreibung:

Download
 Dateiname:  testOptim.m
 Dateigröße:  3.23 KB
 Heruntergeladen:  286 mal

_________________

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
 
maki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 23.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2020, 14:34     Titel:
  Antworten mit Zitat      
Hallo,

wow, vielen Dank für die Dateien!

Eigentlich sollten die Parameter variiert werden. Deshalb auch der Vektor, ich dachte ich kann 10 Parameter gleichzeitig optimieren.

Zitat:
Davon abgesehen frage ich mich, warum man einen Ableitungsvektor minimieren wollen würde.


Minimiert werden soll eigentlich die Differenzen zwischen Kurven.


Die Idee ist (immer noch Smile), Daten aus meinem Model (mit angenommenen Parametern) und experimentellen Daten abzugleichen und dadurch optimale Parameterwerte zu erhalten.

Ich dachte bisher, particleswarm wäre ein besserer lsqnonlin oder fminsearch.
Ich tappe im Dunkeln.

Viele Grüße,
Martin
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: 07.05.2020, 15:27     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Minimiert werden soll eigentlich die Differenzen zwischen Kurven.

Welchen Kurven? Tatsächliche Beobachtungen und parametrisierte Simulation mit ode15s? Dann führt kein Weg daran vorbei, ode15s in der Zielfunktion aufzurufen.

Zitat:
Die Idee ist (immer noch Smile), Daten aus meinem Model (mit angenommenen Parametern) und experimentellen Daten abzugleichen und dadurch optimale Parameterwerte zu erhalten.

Ohne mich jetzt durch das Forum zu wühlen meine ich, dass wir schon ein paar Themen dazu hatten. Wichtig ist eine sehr klare Vorstellung, was genau gemacht werden soll. Die Umsetzung ist dann oft das kleinere Problem.

Zitat:
Ich dachte bisher, particleswarm wäre ein besserer lsqnonlin oder fminsearch.

Jein. particleswarm ist ein globaler Optimierer und hat daher größere Chancen, ein globales statt einem lokalen Minimum zu finden. Hier sehe ich aber die Herausforderung eher in der Formulierung des Optimierungsproblems, und da hilft particleswarm auch nicht weiter.

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
 
maki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 23.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2020, 16:50     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Welchen Kurven? Tatsächliche Beobachtungen und parametrisierte Simulation mit ode15s

Genau, die experimentellen Daten lad ich von einer Excel hoch und die Simulation macht ode15s. Das Bild zeigt es eigentlich ganz gut.

Zitat:
Ohne mich jetzt durch das Forum zu wühlen meine ich, dass wir schon ein paar Themen dazu hatten.

Hatten wir, ich verfolge gerne mehrere Ansätze. Es war ds Problem, dass mein optimierer immer ein lokales Minimum hatte.

Kann eine Pauschalaussage getroffen werden, welcher Optimierer hier am besten passen würde?

Viele Grüße,
Martin

Model Data vs. Exp. Data.fig
 Beschreibung:

Download
 Dateiname:  Model Data vs. Exp. Data.fig
 Dateigröße:  156.99 KB
 Heruntergeladen:  291 mal
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: 07.05.2020, 17:11     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Es war ds Problem, dass mein optimierer immer ein lokales Minimum hatte.

Wenn das das Problem ist, können globale Solver wie particleswarm helfen.

Die Doku schlägst allerdings andere Solver vor:
https://www.mathworks.com/help/gads.....or-choosing-a-solver.html

Zitat:
Hatten wir, ich verfolge gerne mehrere Ansätze.

Finde ich ja durchaus gut... andererseits gibt es hier leider nicht viele Leute, die regelmäßig Fragen beantworten. Wenn ich dann die 5. Variation von ein und demselben Problem sehe, hält sich meine Begeisterung zugegebenermaßen in Grenzen. ;)

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.