Team:Aalto-Helsinki/Modeling synergy

Synergy model


Figure 1: Propane pathway

One big concern in our project was the efficiency of propane production. To solve this problem we wanted to use micelles to hold enzymes together and speed up the reactions. By having two of our most inefficient enzymes close together we try to increase the propane yield. Our only question regarding this is: Does it actually work?

The idea behind this approach is to get the majority of butyraldehyde to ADO and propane production than to other butyraldehyde-consuming enzymes. Intuitively this should happen if CAR and ADO are close together.

To address this not so trivial question of feasibility of this approach, the modeling team assembled and thought about the problem. This problem couldn’t be described easily with simple differential equations since then notions of distance, proximity and their relation with enzyme reaction rates would have to be thoroughly researched.

Instead, the modeling team wondered: Is it possible to model the enzyme reactions like they happen in a cell? In the real world, there are no simple numbers inside the cell: Notions like reaction rate and enzyme kinetics arise from the chaotic fluctuations between molecules inside the cell. Enzyme reactions between enzymes and substrates are dependent on many factors, such as molecules having the right energy and orientation.

As such, this problem is quite difficult and would undoubtedly need a lot of research. Instead, we decided to simplify the situation: Could we simulate enzymes and substrates as particles in a cell and model enzyme reactions by simulating their interactions with each other?

It just so happens that we can do that. So we did. Our modeling team created a model using Python called the synergy model, as it models the effect of having different enzymes working together.

Assumptions and other background

The model is built on a big list of assumptions. Some of these assumptions were made to simplify the situation, some of them were made to include some aspects of enzyme activity. Here are some of the most important ones.

Fundamental assumptions that are not changeable in the simulation

Enzymes and substrates are smallish particles floating in the cell. These particles move because of Brownian motion. This motion is affected by the size of the particles.

Enzymes and substrates only react when they are in close enough proximity with each other. In addition to this, enzymes and substrates only react with the correct type of substrate and enzyme, respectively.

Reactions between enzymes and substrates are difficult to model. Since we don’t have a good way of predicting when a reaction should happen given that an enzyme and a substrate meet, we decide this by giving a reaction a probability to succeed and polling this probability every time a substrate and enzyme meet.

Enzyme concentration and therefore particle number stays constant during the simulation.

Substrate amounts are decided in the beginning of the simulation.They can be set to be constant (good for for example initial substrate) or they can be set to be affected by the enzyme reactions.

The model keeps the enzymes and substrates on a 2D plane, as opposed to a 3D space. This is because we assume that the model's behaviour doesn't change much between 2D and 3D space.

To simplify this model, enzymatic reactions do not take into account cofactors or multiple substrates.

Optional assumptions that the user can either activate or leave unused

Enzyme reactions are not instantaneous, instead they take some time that is specific to the enzyme.

Some enzymes may be in close proximity with each other, if they are e.g. fused together or in micelles.

Some or all of the substrates can have a constant concentration, even if some enzymes consume them. This is the case if the substrate amount (not necessarily the concentration) is so huge when compared to enzyme amount that the enzyme’s effect on its amount is negligible.

The Model

To compare between enzymes being close together and not being close together, the model simulates enzyme reactions inside a cell. The model behaves stochastically, and needs to be ran multiple times to ensure reliable results, as its results will vary according to pseudorandom variables.

The model is a computer program made with Python that simulates a space filled with enzymes and substrates which react with each other. A simplified flowchart of the program is presented on the side, see Fig. 2.

Figure 2: Flowchart of the model

Now, let’s go through the different phases of the simulation:

Initialization: The program loads a settings file filled with information concerning the simulation, and creates a simulation according to these specifications. With this file the user can, for example, specify the length of the simulation, the different substrates with their amounts and masses, as well as the different enzymes and the types of substrates and products they either consume or produce.

Particle movement: The model moves particles according to Brownian motion in water. With particles of this size the governing attribute these particles have is their radius.

The movement of particles under the influence of Brownian motion follows a normal distribution. According to this reference, the mean squared displacement of particles experiencing Brownian motion is proportional to the time interval: \[ \left( | r(t + dt) - r(t) |^2 \right) = 2 \cdot d \cdot D \cdot dt \] where \( r(t)\) is the position of the particle, \(d\) is the number of dimensions, \(D\) is the diffusion coefficient and \(dt\) is time interval. For us to generate correct Brownian motion for our particles, we need to set the standard deviation of the normal distribution to \[ k = \sqrt{D \cdot d \cdot dt}, \]which is equal to scaling the distribution by k. For our simulation, \( d=2\) and \( dt\) is a time interval defined by the user. \( D\) or the diffusion coefficient is calculated from the Einstein relation: \[ D = \mu k_BT \] where \(k_B\) is the Boltzmann’s constant and \( T\) is the temperature, and \( \mu \) is the particle’s mobility: \[ \mu = \frac{1}{6 \pi \eta r} \] where \( \eta \) is the dynamic viscosity of the fluid and \( r\) is the particle’s radius.

Getting the radius of the particles is a bit trickier. To calculate this, we use the same method as in our Micelle modeling. Based on the information in this paper we can calculate the enzymes’ radii from their mass. Proteins' approximate density is 1.37 g/ml. Thus, the specific partial volume (or inverse density) is 0.73 ml/g. From this, we can calculate that the volume of an enzyme mainly consisting of amino acids is \[V(nm^3)=\frac{0.73\tfrac{cm^3}{g}10^{21}\tfrac{nm^3}{cm^3}}{6.023\cdot 10^{23} \tfrac{Da}{g}} M(Da).\] Then, if we approximate the enzymes as spheres with a volume \( V(r) = \frac{4}{3} \pi r^3 \), we can calculate the enzymes' radii:\[R_{min(nm)} = \left( \frac{3V}{4\pi} \right)^{1/3}\ = \left( \frac{3\cdot \frac{0.73\tfrac{cm^3}{g}10^{21}\tfrac{nm^3}{cm^3}}{6.023\cdot 10^{23} \tfrac{Da}{g}}}{4\pi} \right)^{1/3} \cdot \left( M(Da) \right) ^{1/3} = 0.066 \cdot (M(Da))^{1/3} \] For substrates this is not so easy. To simplify the situation we used the same method for calculating the approximate radii for the substrates as well, based on their molar mass.

Reactions: The simulation considers that a reaction is possible only when a right type of substrate and a right type of enzyme are close enough to react. When this happens, the simulation randomly decides if the reaction actually takes place with user-defined probability. If the reaction happened, the simulation changes the substrate to the enzyme’s product and makes both the substrate and enzyme unable to react for a short amount of time.

Data logging: the program collects only one type of data, and that is the particle numbers of each substrate at each point in time that the simulation runs. This makes it possible to make figures of the reactions and to determine the different reaction rates.

Post-Simulation tasks: After the simulation, the program creates a data file from the simulation data it gathered. This data file has data about the amounts of substrates at each point in time.


To get some concrete results from our model, we ran it using different starting settings and different starting conditions, such as the amount of enzymes or substrates in the cell, different amounts of competing enzymes as well as different reaction parameters for the enzymes.

Settings with both joined enzymes and no joined enzymes were used to get the results presented. In addition to this, the model was tested with settings with competing enzymes to better represent the real-world scenario inside E. coli, where there are multiple competing enzymes consuming butyraldehyde.

The simulation space was set to represent a cross section of an E. coli bacteria. Time resolution of the simulations was set to 1 µs. The simulations considered the initial substrate’s concentration to be constant. The reaction probabilities for different enzymes were set at 15%. Total elapsed simulation time was 0.1 s. The amount of competing enzymes varied from 0% to 1500% of the other enzymes’ amounts between simulations. The other enzymes’ amounts were not varied between simulations. The simulation setting files are available here. The data files that were gotten from the simulations are available here. The simulation itself can be downloaded here.

The simulation results indicate that simulations with joined enzymes as opposed to unjoined enzymes achieved higher product creation rates. When more competing enzymes were present in the simulation, the difference between joined and unjoined enzymes became more apparent. In some simulations, joined enzymes got up to 400% reaction rate as opposed to non-joined enzymes. In most simulations, joined enzyme reaction rate changed between 150% and 400% of unjoined enzyme reaction rate, depending on how much competing enzymes there were. In all of the simulations joined enzymes performed as well or better than unjoined enzymes.

Figure 3:Time course of end product amounts with both joined and unjoined enzymes and different amounts of competition.
Figure 4: Reaction rates of ADO with joined enzymes vs. unjoined enzymes
Figure 5: Substrate time spent as intermediate, comparing between joined enzymes and unjoined enzymes. Competitive enzymes set at 2 times the amount of ADO. The amount of particles' times recorded is scaled so that both add up to 100%.

As you can see in fig. 4, the relative joined enzymes’ reaction rate vs. the unjoined reaction rate becomes increasingly better when the amount of competing enzymes grows. In fig.5, we can see that with joined enzymes, the second enzyme reacts quite often almost immediately after the first enzyme has reacted. This is due to the fact that the second enzyme is very near the intermediate that the first enzyme created, and thus it is more likely that the second enzyme is the enzyme that processes it, instead of some other enzyme somewhere else. This means that our joined enzymes work just as we planned: by having the different enzymes close by, we make it more likely for the substrate to react with our enzymes, as opposed to the competing enzymes.


Our model of enzyme reactions inside a cell shows that enzymes that are joined together perform better than enzymes floating freely. In some cases, such as when surrounded with other, competing enzymes, joined enzymes showed up to 400% of the performance of the unjoined enzymes. For us, this implies that joining our enzymes together to form micelles is at least worth trying, as the two enzymes are not very active and can benefit from every help that we can give to them. Likewise, the fact that having other, competing enzymes against our second enzyme makes joined enzymes work relatively better than unjoined enzymes in our model encourages us to join our enzymes in micelles.

The model is, of course, not entirely perfect. For it to be simple enough, the model had to be simplified quite a bit. In doing so, some inaccuracy must creep into the results. While the results the model gives are very promising, they should not be taken as real, definite results and should instead be understood as encouraging and perhaps plausible outcomes.

One of these flaws is the fact that the model simplifies every reaction into a simple reaction between an enzyme and a substrate. However, if the reactions have some other limiting aspects than the simple act of building the enzyme-substrate complex, the model might miscalculate the effect of proximity totally. This flaw is one that the model explicitly does not take into account, since the flaw is concerned with the assumptions in enzyme reaction modeling. The model explicitly simplifies every enzyme reaction for the benefit of the ease of use and efficiency of the model, but at the same time loses specificity and accuracy.

One, perhaps the most critical flaw in the model’s design is the decision to simplify each enzymatic reaction to a simple chance. The benefits of this decision are that this makes the model quite fast and efficient, but the flaw is that most of the enzyme dynamics are lost. However, since the model is not so much meant to study enzyme kinetics but to see the effects of enzyme proximity, this flaw can be said not to be too big, as long as the model’s results are viewed as relative guidelines only.

Another flaw in the model is that it does not take into account any penalizing aspects that joining enzymes might have. More advanced modeling is needed to overcome this flaw.

The model models the joining of enzymes as two different enzymes having the same location and speed at all times. As such, this does not perfectly represent the case in our cells, where the enzymes are joined together in micelles that are much larger and where the enzymes do not actually share exactly the same point in space. However, it can be argued that our model actually measures the effect proximity has to the efficiency of our reactions. Since the enzymes are close by in micelles too, it can be said that the situation in our model resembles the real-world situation at least partially. However, our model might better resemble the situation that, for example, fusion proteins have.

The model has some virtues. One of these is that the model is quite lightweight, and can simulate thousands of particles with the resources of a single machine in a reasonable time. The model is also quite flexible, and can be easily configured through the use of its settings file, in which the user can choose both the general settings concerning the simulation space and timescale as well as set the enzymes and substrates that are relevant to the reactions using a human readable file.

All in all, the model can be useful if it's remembered that its predictions should be viewed as guidelines only, and if one remembers the simplifications made in the enzymes’ function.