# Park-Ramirez bioreactor

Dynamic optimization of chemical and biochemical processes using restricted second-order information 2001, Eva Balsa-Canto, Julio R. Banga, Antonio A. Alonso Vassilios S. Vassiliadis

Case Study I: Park-Ramirez bioreactor

## Problem description

This case study deals with the optimal production of secreted protein in a fed-batch reactor. It was originally formulated by Park and Ramirez (Park & Ramirez, 1988) and it has also been considered by other researchers (Vassiliadis, 1993; Yang & Wu, 1994; Banga, Irizarry & Seider, 1995; Luus, 1995; Tholudur & Ramirez, 1997). The objective is to maximize the secreted heterologous protein by a yeast strain in a fed-batch culture. The dynamic model accounts for host-cell growth, gene expression, and the secretion of expressed polypeptides. The mathematical statement is as follows:

Find u(t) over t in [t0,tf] to maximize: subject to:     with:   where x1 and x2 are, respectively, the concentration of the secreted protein and the total protein (l-1), x3 is the culture cell density (g l-1), x4 is the substrate concentration (g l-1), x5 is the holdup volume (l), u is the nutrient (glucose) feed rate (l h-1), and J is the mass of protein produced (in arbitrary units). The initial conditions are: For final time tf = 15 h, and the following constraints on the control variable: % Copyright (c) 2007-2008 by Tomlab Optimization Inc.


## Problem setup

toms t


## Solve the problem, using a successively larger number collocation points

for n=[20 40 80 120]

    p = tomPhase('p', t, 0, 15, n);
setPhase(p);

tomStates z1 z2 z3 z4 z5
tomControls u

if n>20
% Interpolate an initial guess for the n collocation points
x0 = {icollocate({z1 == z1opt; z2 == z2opt
z3 == z3opt; z4 == z4opt; z5 == z5opt})
collocate(u == uopt)};
else
x0 = {};
end

% Box constraints
cbox = {icollocate({z1 <= 3
z2 <= 3; 0   <= z3 <= 4
0 <= z4 <= 10; 0.5 <= z5 <= 25})
0 <= collocate(u) <= 2.5};

% Boundary constraints
cbnd = initial({z1 == 0; z2 == 0; z3 == 1
z4 == 5; z5 == 1});

% Various constants and expressions
g3 = 21.87*z4./(z4+.4)./(z4+62.5);
g1 = 4.75*g3./(0.12+g3);
g2 = z4./(0.1+z4).*exp(-5*z4);

% ODEs and path constraints
ceq = collocate({
dot(z1) == g1.*(z2-z1)-u./z5.*z1
dot(z2) == g2.*z3-u./z5.*z2
dot(z3) == g3.*z3-u./z5.*z3
dot(z4) == -7.3*g3.*z3+u./z5.*(20-z4)
dot(z5) == u});

% Secreted protein must be less than total protein
% proteinlimit = {z1 <= z2};

% Objective
if n == 120
objective = -final(z1)*final(z5)+var(diff(collocate(u)));
else
objective = -final(z1)*final(z5);
end


## Solve the problem

    options = struct;
options.name = 'Park Bio Reactor';
solution = ezsolve(objective, {cbox, cbnd, ceq}, x0, options);

% Optimal z and u, to use as starting guess in the
% next iteration
z1opt = subs(z1, solution);
z2opt = subs(z2, solution);
z3opt = subs(z3, solution);
z4opt = subs(z4, solution);
z5opt = subs(z5, solution);
uopt  = subs(u, solution);

Problem type appears to be: qpcon
===== * * * =================================================================== * * *
TOMLAB - Tomlab Optimization Inc. Development license  999001. Valid to 2010-02-05
=====================================================================================
Problem: ---  1: Park Bio Reactor               f_k     -35.421698724161942000
sum(|constr|)      0.000000000990670617
f(x_k) + sum(|constr|)    -35.421698723171275000
f(x_0)      0.000000000000000000

Solver: snopt.  EXIT=0.  INFORM=1.
SNOPT 7.2-5 NLP code
Optimality conditions satisfied

FuncEv    1 ConstrEv  134 ConJacEv  134 Iter  100 MinorIter  814
CPU time: 0.656250 sec. Elapsed time: 0.657000 sec.

Problem type appears to be: qpcon
===== * * * =================================================================== * * *
TOMLAB - Tomlab Optimization Inc. Development license  999001. Valid to 2010-02-05
=====================================================================================
Problem: ---  1: Park Bio Reactor               f_k     -33.571631159656995000
sum(|constr|)      0.000000000128376368
f(x_k) + sum(|constr|)    -33.571631159528621000
f(x_0)    -35.421698724161729000

Solver: snopt.  EXIT=0.  INFORM=1.
SNOPT 7.2-5 NLP code
Optimality conditions satisfied

FuncEv    1 ConstrEv  115 ConJacEv  115 Iter  101 MinorIter  504
CPU time: 1.703125 sec. Elapsed time: 1.719000 sec.

Problem type appears to be: qpcon
===== * * * =================================================================== * * *
TOMLAB - Tomlab Optimization Inc. Development license  999001. Valid to 2010-02-05
=====================================================================================
Problem: ---  1: Park Bio Reactor               f_k     -33.154158230075637000
sum(|constr|)      0.000000000115840908
f(x_k) + sum(|constr|)    -33.154158229959798000
f(x_0)    -33.571631159657159000

Solver: snopt.  EXIT=0.  INFORM=1.
SNOPT 7.2-5 NLP code
Optimality conditions satisfied

FuncEv    1 ConstrEv  189 ConJacEv  189 Iter  186 MinorIter  704
CPU time: 15.531250 sec. Elapsed time: 15.594000 sec.

Problem type appears to be: qpcon
===== * * * =================================================================== * * *
TOMLAB - Tomlab Optimization Inc. Development license  999001. Valid to 2010-02-05
=====================================================================================
Problem: ---  1: Park Bio Reactor               f_k     -32.718180228309564000
sum(|constr|)      0.000000004625834596
f(x_k) + sum(|constr|)    -32.718180223683731000
f(x_0)    -32.743854320903381000

Solver: snopt.  EXIT=0.  INFORM=1.
SNOPT 7.2-5 NLP code
Optimality conditions satisfied

FuncEv    1 ConstrEv  154 ConJacEv  154 Iter  139 MinorIter  866
CPU time: 45.765625 sec. Elapsed time: 46.656000 sec.

end

t  = subs(collocate(t),solution);
z1 = collocate(z1opt);
z2 = collocate(z2opt);
z3 = collocate(z3opt);
z4 = collocate(z4opt);
z5 = collocate(z5opt);
u  = collocate(uopt);


## Plot result

subplot(2,1,1)
plot(t,z1,'*-',t,z2,'*-',t,z3,'*-',t,z4,'*-',t,z5,'*-');
legend('z1','z2','z3','z4','z5');
title('Park Bio Reactor state variables');

subplot(2,1,2)
plot(t,u,'+-');
legend('u');
title('Park Bio Reactor control'); 