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 =[072;72144 ;144216;216288;288360;360432;432504;504576;576648;6481059]; %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;
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 ;)
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.
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 ;)
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 ), 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.
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 ;)
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 ;)
Einstellungen und Berechtigungen
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
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.