= Practical 5 =
= Linear Programming and Flux Balance Analysis with ScrumPy =
In current research into biofuels, there is interest in investigating the feasibility of using microorganisms to produce alkanes for biodiesel from renewable carbon sources. The starting points for alkane formation are fatty acids, which are formed by the fatty acid biosynthesis pathway. Here we will investigate the feasibility and efficiency of making a representative C15 alkane in ''E. coli'' from various carbon substrates, starting with glucose.
We will use a small model of about 70 reactions that represents the central carbon metabolism of ''E. coli''. It is a derivative of a model developed in Srienc's group (Trinh, C. T., Unrean, P., Srienc, F., 2008. Applied and environmental microbiology.74, 3634-3643) for designing metabolic engineering strategies. The model was used in our theoretical/experimental project to increase alkane prooduction in E coli: Fatma'' et al, Model-assisted metabolic engineering of Escherichia coli for long chain alkane and alcohol production'', Metabolic Engineering, 45, 134-141 (2018). [[https://doi.org/10.1016/j.ymben.2018.01.002|DOI]]
Before you start, read the documentation of the {{{ScrumPy}}} LP module, [[http://mudshark.brookes.ac.uk/ScrumPy/Doc/LinProg|here]]. It would be a good idea to open this page in a separate tab so that you can refer to it as you work on the practical. (Note that the examples in the documentation are '''not for the same model''' that you will be using; they are generic examples.)
1. Download the archive containing the [[http://mudsharkstatic.brookes.ac.uk/Download/Models/Nepal/EcoliCCMforNepal.zip|model]] and extract the files.
a. Start !ScrumPy in the folder containing the .spy files and load the top-level model file EcoliCCM.spy to create a model object. Note that the model is created in a modular fashion, and the top-level file will load the different components of the model and open a window for each.
a. Examine how the model is created. Note that the reactions that you need to manipulate for this practical are those contained in Transport.spy.
a. If you want to check the details of any of the reactions or metabolites in the database-derived component of the model - !AutoColi.spy - you can paste the reaction or metabolite identifier into the search box at [[http://www.metacyc.org|MetaCyc]].
1. Your first task is to set up and solve an LP problem where the objective is to minimise glucose consumption, as sole carbon source, while producing 1 flux unit of palmitate.
a. Create the LP object with the E coli model as argument as shown in the first steps of the documentation.
a. Constrain the flux of the pentadecane transport reaction to -1.0 using the {{{SetFixedFlux}}} function of the LP object.<
>
. [[Meetings/Nepal2018/Prac5/Hint1|Hint 1]]
a. As can be seen from Transport.spy, the model can allow both uptake and production of a number of carbon compounds. To make sure that glucose is used as the only substrate, the import of the other carbon substrates must be constrained to zero, though their export can be allowed so that we can determine whether production of pentadecane requires the formation of any co-products. This can be done with the {{{SetFluxBounds}}} function, which constrains fluxes within a specified range. For example, to prevent uptake of ethanol and acetate, whilst allowing their production, we could write the following. Check that you understand how the range specifiers below work :<
>
. {{{#!highlight python
lp = m.GetLP()
Bounds = {
"eth_tx":(None, 0),
"ACE_tx":(None, 0)
}
lp.SetFluxBounds(Bounds)
}}}
a. Since the optimisation direction is minimisation, and this is set by default, you don't need to change the direction, though the documentation explains how to do this. <
>
a. Next, identify the name of the glucose uptake reaction that should be minimised and enter this as an argument to the objective function method described in the documentation. (Note that the argument must be a list of reaction(s), i.e. your argument should be a list with one reaction).<
>
a. Solve the LP. (ie lp.Solve()) The message 'Optimal solution' should appear. To obtain the solution use the LP method {{{GetPrimSol()}}}. This method returns a dictionary object of reactions in the solution as keys and flux values as values, so for convenience assign a name to this solution, e.g. ''sol''. Examine the solution as follows:<
>
. {{{#!highlight python
for k in sol.keys():
print k, sol[k]
}}}
a. What is the objective value, i.e. the flux of the glucose uptake reaction, representing the minimum amount of glucose to make 1 pentadecane? What fraction of the glucose carbon is converted to pentadecane? What are the relative fluxes of glucose through glycolysis (e.g. 6PFRUCTPHOS-RXN) and the pentose phosphate pathway (e.g. GLU6PDEHYDROG-RXN)? <
>
1. Now determine which of the other carbon metabolites listed in Transport.spy can function as substrates for fatty acid production. To do this
a. Generate a new lp object.
a. Set the flux constraint on pentadecane transport, and set appropriate flux bounds on the other carbon metabolites;
a. Set uptake of your target substrate as the minimisation objective.
a. For those substrates that can be used, what is the carbon conversion efficiency to pentadecane? <
>
1. The results so far have corresponded to aerobic conditions. Pentadecane cannot be made in strict anaerobic conditions as the final reaction requires one oxygen per pentadecane. It might be possible to make pentadecane in micro-aerobic condtions from some of the substrates. Which ones can be utilised?
a. Represent micro-aerobic conditons by constraining the oxygen transport flux to 1.0 (the same as the pentadecane formation rate).
a. Repeat the analyses above. For those substrates that can be used, determine any change in the carbon conversion efficiency and whether co-products are formed.