Annihilation of calcium oscillations (jModelica): Difference between revisions
Appearance
FelixMueller (talk | contribs) Created page with "This page contains the source code to solve the Annihilation of calcium oscillations problem with JModelica. The automatic differentiation tool CasADI and the solver IPOPT..." |
FelixMueller (talk | contribs) No edit summary |
||
Line 1: | Line 1: | ||
This page contains the source code to solve the [[Annihilation of calcium oscillations]] problem with JModelica. The automatic differentiation tool CasADI and the solver IPOPT were used to solve the problem. | This page contains the source code to solve the [[Annihilation of calcium oscillations]] problem with JModelica. The automatic differentiation tool CasADI and the solver IPOPT were used to solve the problem. | ||
As this problem is numerically challenging, the following implementation does not result in a fully converged optimal solution. | |||
Model file (calcium_opt.mop) | Model file (calcium_opt.mop) |
Latest revision as of 21:46, 27 June 2016
This page contains the source code to solve the Annihilation of calcium oscillations problem with JModelica. The automatic differentiation tool CasADI and the solver IPOPT were used to solve the problem. As this problem is numerically challenging, the following implementation does not result in a fully converged optimal solution.
Model file (calcium_opt.mop)
//-------------------------------------------------------------------------
//Annihilation of calcium oscillations with direct collocation using JModelica
//(c) Madeleine Schroter
//--------------------------------------------------------------------------
optimization calcium_opt (objective = cost(finalTime),
startTime = 0,
finalTime = 22)
// Parameters
parameter Real k1 = 0.09; // Parameter k1
parameter Real k2 = 2.30066; // Parameter k2
parameter Real k3 = 0.64; // Parameter k3
parameter Real K4 = 0.19; // Parameter K4
parameter Real k5 = 4.88; // Parameter k5
parameter Real K6 = 1.18; // Parameter K6
parameter Real k7 = 2.08; // Parameter k7
parameter Real k8 = 32.24; // Parameter k8
parameter Real K9 = 29.09; // Parameter K9
parameter Real k10 = 5.0; // Parameter k10
parameter Real K11 = 2.67; // Parameter K11
parameter Real k12 = 0.7; // Parameter k12
parameter Real k13 = 13.58; // Parameter k13
parameter Real k14 = 153.0; // Parameter k14
parameter Real K15 = 0.16; // Parameter K15
parameter Real k16 = 4.85; // Parameter k16
parameter Real K17 = 0.05; // Parameter K17
parameter Real p17 = 1.0; // Parameter p17
parameter Real p18 = 1.0; // Parameter p18
parameter Real umax = 1.3;
parameter Real p1 = 100; // Parameter p1
parameter Real x0tilde = 6.78677; // Parameter x0tilde
parameter Real x1tilde = 22.65836; // Parameter
parameter Real x2tilde = 0.384306; // Parameter x2tilde
parameter Real x3tilde = 0.28977; // Parameter x3tilde
// The states
Real x0(start=0.03966, fixed=true);
Real x1(start=1.09799, fixed=true);
Real x2(start=0.00142, fixed=true);
Real x3(start=1.65431, fixed=true);
Real cost(start=0, fixed=true);
// The control signal
input Real u(free=true);
equation
der(x0) = k1+k2*x0-((k3*x0*x1)/(x0+K4))-((k5*x0*x2)/(x0+K6));
der(x1) = k7*x0 - ((k8*x1)/(x1+K9));
der(x2)=(k10*x1*x2*x3)/(x3+K11)+p18*k12*x1+k13*x0-(k14*x2)/( p17*(1.0 + u*( umax - 1.0)) *x2+K15)-(k16*x2)/(x2+K17)+x3/10;
der(x3)=-(k10*x1*x2*x3)/(x3+K11)+(k16*x2)/(x2+K17)-x3/10;
der(cost)=(x0-x0tilde)*(x0-x0tilde)+(x1-x1tilde)*(x1-x1tilde)+
(x2-x2tilde)*(x2-x2tilde)+(x3-x3tilde)*(x3-x3tilde)+p1*u;
constraint
x0>=0;
x1>=0;
x2>=0;
x3>=0;
end calcium_opt;
Run file
#Import the function for transfering a model to CasADiInterface
from pyjmi import transfer_optimization_problem
op=transfer_optimization_problem("calcium_opt", "calcium_opt.mop")
res=op.optimize()