Sequential Activation of Metabolic Pathways

a Dynamic Optimization Approach 2009, Diego A. Oyarzuna, Brian P. Ingalls, Richard H. Middleton, Dimitrios Kalamatianosa

Contents

Problem description

The problem is described in the paper referenced above.

% Copyright (c) 2010-2010 by Tomlab Optimization Inc.

% Unbranched Pathway (n=4) with MM kinetics
kcat0 = 1; kcat1 = 2; kcat2 = 4; kcat3= 3;
Km = 1; s0 = 5; V = 0.2;
Et = 1; Umax = 1; lam  = 0.5; tfmax = 50;

% Terminal constraints, compatible with steady state flux V
s1f = 0.65; s2f = 0.32; s3f = 0.27;
e0f = V*(Km/kcat0/s0  + 1/kcat0);
e1f = V*(Km/kcat1/s1f + 1/kcat1);
e2f = V*(Km/kcat2/s2f + 1/kcat2);
e3f = V*(Km/kcat3/s3f + 1/kcat3);

Problem setup

N = [30 128]; % Number of collocation points
toms t tf
warning('off', 'tomSym:x0OutOfBounds');

for n = N
    p = tomPhase('p', t, 0, tf, n);
    setPhase(p);
    tomStates s1 s2 s3 e0 e1 e2 e3
    tomControls u0 u1 u2 u3

    % Initial guess
    if n == N(1)
        x0 = {tf == 2
            icollocate({
            [s1;s2;s3] == 0
            e0 == t/tf
            e1 == (t-0.2)/tf
            e2 == (t-1)/tf
            e3 == (t-1.2)/tf
            })
            collocate({u0 == 1
            [u1;u2;u3] == 0})};
    else
        x0 = {tf == tf_init
            icollocate({
            s1 == s1_init; s2 == s2_init; s3 == s3_init
            e0 == e0_init; e1 == e1_init; e2 == e2_init
            e3 == e3_init})
            collocate({u0 == u0_init
            u1 == u1_init; u2 == u2_init; u3 == u3_init})};
    end
    % Box constraints
    cbox = {0.1 <= tf <= tfmax
        0  <= icollocate([s1;s2;s3]) <= 100
        0  <= icollocate([e0;e1;e2;e3]) <= 1
        0  <= collocate([u0;u1;u2;u3])  <= Umax};

    % Boundary constraints
    cbnd = {initial({[s1;s2;s3] == 0; [e0;e1;e2;e3] == 0})
        final({s1 == s1f; s2 == s2f; s3 == s3f;
        e0 == e0f; e1 == e1f; e2 == e2f; e3 == e3f})};

    % Michaelis-Mentes ODEs and path constraints
    ceq = collocate({
        dot(s1) == kcat0*s0*e0/(Km + s0) - kcat1*s1*e1/(Km+s1)
        dot(s2) == kcat1*s1*e1/(Km+s1) - kcat2*s2*e2/(Km+s2)
        dot(s3) == kcat2*s2*e2/(Km+s2) - kcat3*s3*e3/(Km+s3)
        dot(e0) == u0 - lam*e0
        dot(e1) == u1 - lam*e1
        dot(e2) == u2 - lam*e2
        dot(e3) == u3 - lam*e3});

    % Objective
    objective = integrate(1 + e0 + e1 + e2 + e3);

Solve the problem

    options = struct;
    options.name = 'Metabolic Pathways, Unbranched n=4';
    solution = ezsolve(objective, {cbox, cbnd, ceq}, x0, options);

    % Collect solution as initial guess
    s1_init = subs(s1,solution);
    s2_init = subs(s2,solution);
    s3_init = subs(s3,solution);
    e0_init = subs(e0,solution);
    e1_init = subs(e1,solution);
    e2_init = subs(e2,solution);
    e3_init = subs(e3,solution);
    tf_init = subs(tf,solution);
    u0_init = subs(u0,solution);
    u1_init = subs(u1,solution);
    u2_init = subs(u2,solution);
    u3_init = subs(u3,solution);
Problem type appears to be: qpcon
Starting numeric solver
===== * * * =================================================================== * * *
TOMLAB - Tomlab Optimization Inc. Development license  999001. Valid to 2011-02-05
=====================================================================================
Problem: ---  1: Metabolic Pathways, Unbranched n=4  f_k       6.092698010914444900
                                            sum(|constr|)      0.000001117096574878
                                   f(x_k) + sum(|constr|)      6.092699128011020100
                                                   f(x_0)      4.220507512582272200

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

FuncEv    1 ConstrEv   34 ConJacEv   34 Iter   22 MinorIter 1807
CPU time: 0.703125 sec. Elapsed time: 0.719000 sec. 
Problem type appears to be: qpcon
Starting numeric solver
===== * * * =================================================================== * * *
TOMLAB - Tomlab Optimization Inc. Development license  999001. Valid to 2011-02-05
=====================================================================================
Problem: ---  1: Metabolic Pathways, Unbranched n=4  f_k       6.085709091573211700
                                            sum(|constr|)      0.000005873258930019
                                   f(x_k) + sum(|constr|)      6.085714964832141600
                                                   f(x_0)      6.092720075212315400

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

FuncEv    1 ConstrEv    7 ConJacEv    7 Iter    5 MinorIter 2096
CPU time: 8.562500 sec. Elapsed time: 8.610000 sec. 
end

% Collect data
t  = subs(collocate(t),solution);
s1 = subs(collocate(s1),solution);
s2 = subs(collocate(s2),solution);
s3 = subs(collocate(s3),solution);
e0 = subs(collocate(e0),solution);
e1 = subs(collocate(e1),solution);
e2 = subs(collocate(e2),solution);
e3 = subs(collocate(e3),solution);
u0  = subs(collocate(u0),solution);
u1  = subs(collocate(u1),solution);
u2  = subs(collocate(u2),solution);
u3  = subs(collocate(u3),solution);

Plot result

s = [s1 s2 s3];
e = [e0 e1 e2 e3];
r = [u0 u1 u2 u3];
subplot(3,1,1);
plot(t,[s1 s2 s3]);
subplot(3,1,2);
plot(t,[e0 e1 e2 e3 e0+e1+e2+e3]);
subplot(3,1,3);
plot(t,[u0 u1 u2 u3]);