The kinetics of Mashing

Homebrew Talk - Beer, Wine, Mead, & Cider Brewing Discussion Forum

Help Support Homebrew Talk - Beer, Wine, Mead, & Cider Brewing Discussion Forum:

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.

prankster1590

Well-Known Member
Joined
Sep 24, 2019
Messages
58
Reaction score
11
Recently I found this paper: An original kinetic model for the enzymatic hydrolysis of starch during mashing - ScienceDirect

It models the concentration of different sugars over time depending on temperature using chemical kinetics.

The following reactions are considered

  • Solid starch to solubilized starch [Ss] -->[Sg]
  • Solubilized starch [Sg] --> Glucose [Glu], Maltose [Mal], Maltotriose [Mlt] and Dextrines [Dex]
  • Dextrines --> [Glu], [Mal] and [Mlt]
The Solubilization (gelatinization) is descibed as follows:

rate =Kg*[Ss] with Kg=kg*e^(Eg/R*T)

Eg=activation energy in joule/mol
R = 8.31 J/mol Kelvin
T= temperature in Kelvin

This paper is very difficult with the units since most of it is in grams or kilograms. Requires some conversions later on.

The following rate equation are used for sugar production:

rate equations.png


[D]=[Dex]

Aa en Ab are activities of alpha amylase and beta amylase and is dependant on temperature. The activity is modelled by the following polynomial equations. I ad to calculate myself because the paper only gives rounded off numbers:

Alpha-amylase activity:

Aa=((9,82888846139552*(10^-8))*(T(K)^6))-(0,000191398099738377*(T(K)^5))+(0,155234755391823*(T(K)^4))-(67,1237341274294*(T(K)^3))+(16320,3910529193*(T(K)^2))-(2115612,60688011*(T(K)))+(114232689,940232)

Beta-amylase acivity:

<63C (336 K)


Ab=(0,0475550936009274*T(K))-13,4030011903215

>63C (336 K)

Ab=(-0,375479040579485*T(K)+128,755113213744

Resulting in the follwing graph:

Activity.png


To get the concentration of [Ss], [Sg], [Mal], [Glu], [Mlt] and [Dex] the following rate equations need to be integrated. Which I have done myself since the integrated rate equations were not given.

rate equations 2.png


With the following integrated rate equations:

[Ss]=[Ss]0*e^-(Kg*t)
[Sg]=[Ss]0*(Kg/(K-Kg)*((e^-(Kg*t))-(e^-(K*t))
[Mal]=[Ss]0*((Kmal*Kg)/(K-Kg))*(((EXP(-K*t)-1)/K)-((EXP(-Kg*t)-1)/Kg))
[Mal']=[Ss]0*((Kmal'*Kdex*Kg)/(K-Kg))*(((EXP(-Kg*t)+(Kg*t)-1)/Kg^2)-((EXP(-K*t)+(K*t)-1)/K^2))

Then

[Mal] = [Mal] + [Mal]'
[Mlt] = [Mlt] + [Mlt]'
[Glu]=[Glu]+[Glu]'

[Dex]=[Dex]-([Mal]'+[Mlt]'+[Glu]')

Kmal and Kmal' = (Ka + Kb) and (Ka' +Kb')

K = (Kglu +Kmal+Kmlt+Kdex)

t= time (s)

2021-08-05 12_45_03-fdocuments.in_an-original-kinetic-model-for-the-enzymatic-hydrolysis-of-st...png


But I did something wrong I think. My Dextrin levels are too high. It should be decreasing over time. It does but a very small amount. And I cannot figure out why. Maybe because of some unit conversion mistakes. This is the result I get from this model at a single 64C temperature.

Does anybody know where I go wrong?

With starting concentration: [Ss]0 =1.31 gram starch/Kg mash


mash.png
 

Attachments

  • 1628155964659.png
    1628155964659.png
    9.7 KB · Views: 5
But I did something wrong I think. My Dextrin levels are too high. It should be decreasing over time. It does but a very small amount. And I cannot figure out why.
Without going through the math I can tell you that this would be the expected behavior and not necessarily indicative of a mistake either in your math or in the model itself.

On the one hand enzymes denature quickly once they're hydrated and they denature at the highest rate when they are closest to their optimal temperature. Since there is only a finite amount of enzymes in malt the amount of conversion that can be achieve without enzyme additions is necessarily limited.

On the other hand dextrins can never be fully converted to fermentable sugars since alpha-amylase cannot operate below a minimum distance from branches in the glucose chain. Consequently there is a limit to how far dextrins can be converted to fermentable sugars that are dependent on the type of grain the malt is derived from. Different grains have different average branching frequencies leading to higher or lower potential for conversion and therefore final attenuation.

Any model that is expected to match the reality of mashing to at least some degree must lead to this type of behavior, where conversion tops off after a certain point in time and conversion rate asymptotically converges towards zero for all types of sugars.
 
Interestingly, this paper considers and captures that enzyme denature behavior. And I am pretty surprised by how well their model predicts the measured enzyme activity and sugar concentrations.

I read the paper a couple times but I am still confused on rate equations that they show (eq 7 - 13). I feel like the a_alpha and a_beta should contain the enzyme concentration. But it seems to suggest that the a_alpha and a_beta are "real activity" (which depends only on T), which is given by that polynomials you showed. I argue that those should be something related to [E_alpha] and [E_beta] to capture the temperature AND time dependence on enzymes.

They say there are 10 ODE's to solve but I can only think of 8 (E_alpha and E_beta are the enzyme concentration of alpha and beta). But they didn't even mention the enzyme concentrations, so maybe only 6.

d/dt of Ss, Sg, D, gl, mal and mlt (E_alpha and E_beta)?

Unless they considered two gelatinization equations and enzyme concentrations, that would make 2 Ss, 2 Sg, and 2 [E]'s which would make it 10.

But overall, I'm still confused. Any ideas?
 
Just for the fun of it, I tried the problem myself and got this result. For some reason, like I said above, the paper isn't clear about the incorporation of the denature behavior on their kinetic model. Funny because they talk about it but they don't mention in their model or maybe I don't understand how enzyme kinetics works.

Analyzing the graph, you can see the solid starch quickly turning into gelatinized starch in the first ~10min. And that gelatinized starch quickly forms dex, gl, mal, and mlt. Seems like at some point (~20min), glucose and maltose flattens out and all dextrose turns to maltose as time goes. Again, this profile does not incorporate denature behavior, that's why you see dextrin converting all into maltose. I think chemistry-wise, enzymes cannot convert ALL dextrin into simpler sugars but I think enzymes can break down dextrin to the level where the concentration of dextrin is very small (nearly ~0), assuming that enzymes do not denature, which is what this model is based on.

I did try to model with denature in place, with 2 more coupled ODE's. I can get it to work but for some reason, the scale is out of wack and I need to multiply by some constant (~1e-3) to make it work. At that point, I'm pulling numbers from the graph I'm trying to match, which is probably not good.

Anyways, I think it's pretty cool to model something complicated like mashing by couple of equations. And with Python and its free library, we can solve these damn equations rather easily.
 

Attachments

  • mashKinetics1.png
    mashKinetics1.png
    81.9 KB · Views: 35
Recently I found this paper: An original kinetic model for the enzymatic hydrolysis of starch during mashing - ScienceDirect

It models the concentration of different sugars over time depending on temperature using chemical kinetics.

The following reactions are considered

  • Solid starch to solubilized starch [Ss] -->[Sg]
  • Solubilized starch [Sg] --> Glucose [Glu], Maltose [Mal], Maltotriose [Mlt] and Dextrines [Dex]
  • Dextrines --> [Glu], [Mal] and [Mlt]
The Solubilization (gelatinization) is descibed as follows:

rate =Kg*[Ss] with Kg=kg*e^(Eg/R*T)

Eg=activation energy in joule/mol
R = 8.31 J/mol Kelvin
T= temperature in Kelvin

This paper is very difficult with the units since most of it is in grams or kilograms. Requires some conversions later on.

The following rate equation are used for sugar production:

View attachment 737942

[D]=[Dex]

Aa en Ab are activities of alpha amylase and beta amylase and is dependant on temperature. The activity is modelled by the following polynomial equations. I ad to calculate myself because the paper only gives rounded off numbers:

Alpha-amylase activity:

Aa=((9,82888846139552*(10^-8))*(T(K)^6))-(0,000191398099738377*(T(K)^5))+(0,155234755391823*(T(K)^4))-(67,1237341274294*(T(K)^3))+(16320,3910529193*(T(K)^2))-(2115612,60688011*(T(K)))+(114232689,940232)

Beta-amylase acivity:

<63C (336 K)


Ab=(0,0475550936009274*T(K))-13,4030011903215

>63C (336 K)

Ab=(-0,375479040579485*T(K)+128,755113213744

Resulting in the follwing graph:

View attachment 737943

To get the concentration of [Ss], [Sg], [Mal], [Glu], [Mlt] and [Dex] the following rate equations need to be integrated. Which I have done myself since the integrated rate equations were not given.

View attachment 737945

With the following integrated rate equations:

[Ss]=[Ss]0*e^-(Kg*t)
[Sg]=[Ss]0*(Kg/(K-Kg)*((e^-(Kg*t))-(e^-(K*t))
[Mal]=[Ss]0*((Kmal*Kg)/(K-Kg))*(((EXP(-K*t)-1)/K)-((EXP(-Kg*t)-1)/Kg))
[Mal']=[Ss]0*((Kmal'*Kdex*Kg)/(K-Kg))*(((EXP(-Kg*t)+(Kg*t)-1)/Kg^2)-((EXP(-K*t)+(K*t)-1)/K^2))

Then

[Mal] = [Mal] + [Mal]'
[Mlt] = [Mlt] + [Mlt]'
[Glu]=[Glu]+[Glu]'

[Dex]=[Dex]-([Mal]'+[Mlt]'+[Glu]')

Kmal and Kmal' = (Ka + Kb) and (Ka' +Kb')

K = (Kglu +Kmal+Kmlt+Kdex)

t= time (s)

View attachment 737949

But I did something wrong I think. My Dextrin levels are too high. It should be decreasing over time. It does but a very small amount. And I cannot figure out why. Maybe because of some unit conversion mistakes. This is the result I get from this model at a single 64C temperature.

Does anybody know where I go wrong?

With starting concentration: [Ss]0 =1.31 gram starch/Kg mash


View attachment 737950

Man, you got me interested in this topic and I went into a rabbit hole of trying to figure out the enzyme kinetics. I read a couple more papers and engineering textbooks to learn more about it.

If you are interested, here are some papers/textbooks I read:

Simulation of Enzyme Kinetics During Malt Mashing by Koljonen
A Kinetic Model of Starch Hydrolysis by a- and b-amylase during Mashing by A. Marc
A Model for the Prediction of Fermentable Sugar Concentrations During Mashing by Koljonen

Bioprocess Engineering Basic Concepts by Schuler
Elements of Chemical Reaction Engineering by Fogler

Now, I got a model that captures the denature of enzyme. I think that polynomial approximation is kinda wacky on Brandam's paper. And the a-amylase polynomials that they gave on the paper don't even give you the right values.

Reading more about this topic got me wondering why they didn't use the Michaelis-Menten for their model. I guess this mashing kinetics can be made as complicated as one wants, like factoring in like pH and stuff. But then again, what's the point? We ain't making rocket fuel, we just tryna make some beer.
 
@Vale71 wrote "enzymes... denature at the highest rate when they are closest to their optimal temperature." I'm no biochemist but this seems unexpected. I had thought mashing out at a mere 170°F would accelerate the denaturing of our beloved enzymes, at a few degrees above their various optimal temperatures. And that boiling would denature them even faster. So though I understand that these enzymes denature even as they're doing their essential work, I fear I've missed the essence.
 
@Vale71 wrote "enzymes... denature at the highest rate when they are closest to their optimal temperature." I'm no biochemist but this seems unexpected. I had thought mashing out at a mere 170°F would accelerate the denaturing of our beloved enzymes, at a few degrees above their various optimal temperatures. And that boiling would denature them even faster. So though I understand that these enzymes denature even as they're doing their essential work, I fear I've missed the essence.

I'm pretty sure he meant higher T = higher rate of denature, not "highest" rate at mashing temp. In more of mathematical term, the rate of denature increases exponentially with respect to temperature.
 
Just for the fun of it, I tried the problem myself and got this result. For some reason, like I said above, the paper isn't clear about the incorporation of the denature behavior on their kinetic model. Funny because they talk about it but they don't mention in their model or maybe I don't understand how enzyme kinetics works.

Analyzing the graph, you can see the solid starch quickly turning into gelatinized starch in the first ~10min. And that gelatinized starch quickly forms dex, gl, mal, and mlt. Seems like at some point (~20min), glucose and maltose flattens out and all dextrose turns to maltose as time goes. Again, this profile does not incorporate denature behavior, that's why you see dextrin converting all into maltose. I think chemistry-wise, enzymes cannot convert ALL dextrin into simpler sugars but I think enzymes can break down dextrin to the level where the concentration of dextrin is very small (nearly ~0), assuming that enzymes do not denature, which is what this model is based on.

I did try to model with denature in place, with 2 more coupled ODE's. I can get it to work but for some reason, the scale is out of wack and I need to multiply by some constant (~1e-3) to make it work. At that point, I'm pulling numbers from the graph I'm trying to match, which is probably not good.

Anyways, I think it's pretty cool to model something complicated like mashing by couple of equations. And with Python and its free library, we can solve these damn equations rather easily.
Would you be willing to share your code or some sample calculations for how you managed to get your graph? I've been trying for the past few days to get it working for a school project but I just can't seem to get it or find out what I'm doing wrong.

Any help would be greatly appreciated! :)
 
Would you be willing to share your code or some sample calculations for how you managed to get your graph? I've been trying for the past few days to get it working for a school project but I just can't seem to get it or find out what I'm doing wrong.

Any help would be greatly appreciated! :)
from scipy.integrate import solve_ivp
import numpy as np
import matplotlib.pyplot as plt


def rhs(t,S):
# S = [[Ss]0, [Sg]1, [D]2, [Gl]3, [Mal]4, [Mlt]5, [Ea]6, [Ea]7]
# [Ss] = [g/kg]
# [D], [Gl], [Mal], [Mlt] = [g/kg]
# [E] = [U/kg]

# Constants
R = 8.31 # [J/mol K]
T = 273 + 67# [K]

# For Gelatinization T > 60C
kgel = 3.1e14 # [1/s]
Egel = 108.3e3 # [J/mol]

# Sugar rate constants. [kg/U s]
kgl = 0.023
kmlt = 0.117
kdex = 0.317
ka_mal = 0.389
kb_mal = 0.137
kp_gl = 2.9e-6
kp_mlt = 1.5e-6
kpa_mal = 1.2e-5
kpb_mal = 8.4e-6

# alpha and beta amylase
kda = 6.9e30 # [1/s]
Eda = 224.2e3 # [J/mol]
kdb = 7.6e60 # [1/s]
Edb = 410.7e3 # [J/mol]
aas = 5 # at T = 67C [1] "Relative Specific Activity" for alpha
abs = 1.3 # at T = 67C

return np.ones(8)*60*[-kgel*np.exp(-Egel/(R*T))*S[0],
kgel*np.exp(-Egel/(R*T))*S[0] - kgl*S[6]*S[1] - ka_mal*S[6]*S[1] - kb_mal*S[7]*S[1] - kmlt*S[6]*S[1] - kdex*S[6]*S[1],
kdex*S[6]*S[1] - kp_gl*S[6]*S[2] - kpa_mal*S[6]*S[2] - kpb_mal*S[7]*S[2] - kp_mlt*S[6]*S[2],
kgl*S[6]*S[1] + kp_gl*S[6]*S[2],
ka_mal*S[6]*S[1] + kb_mal*S[7]*S[1] + kpa_mal*S[6]*S[2] + kpb_mal*S[7]*S[2],
kmlt*S[6]*S[1] + kp_mlt*S[6]*S[2],
-kda*np.exp(-Eda/(R*T))*S[6]*aas,
-kdb*np.exp(-Edb/(R*T))*S[7]*abs]

# return np.ones(8)*60*[-kgel*np.exp(-Egel/(R*T))*S[0],
# kgel*np.exp(-Egel/(R*T))*S[0] - kgl*aa*S[1] - ka_mal*aa*S[1] - kb_mal*ab*S[1] - kmlt*aa*S[1] - kdex*aa*S[1],
# kdex*aa*S[1] - kp_gl*aa*S[2] - kpa_mal*aa*S[2] - kpb_mal*ab*S[2] - kp_mlt*aa*S[2],
# kgl*aa*S[1] + kp_gl*aa*S[2],
# ka_mal*aa*S[1] + kb_mal*ab*S[1] + kpa_mal*aa*S[2] + kpb_mal*ab*S[2],
# kmlt*aa*S[1] + kp_mlt*aa*S[2],
# -kda*np.exp(-Eda/(R*T))*S[6]*aa,
# -kdb*np.exp(-Edb/(R*T))*S[7]*ab]

# return np.ones(6)*60*[-kgel*np.exp(-Egel/(R*T))*S[0],
# kgel*np.exp(-Egel/(R*T))*S[0] - kgl*aa*S[1] - ka_mal*aa*S[1] - kb_mal*ab*S[1] - kmlt*aa*S[1] - kdex*aa*S[1],
# kdex*aa*S[1] - (kp_gl*aa*S[2]) - (kpa_mal*aa*S[2] + kpb_mal*ab*S[2]) - (kp_mlt*aa*S[2]),
# kgl*aa*S[1] + kp_gl*aa*S[2],
# ka_mal*aa*S[1] + kb_mal*ab*S[1] + kpa_mal*aa*S[2] + kpb_mal*ab*S[2],
# kmlt*aa*S[1] + kp_mlt*aa*S[2]]
# -kda*np.exp(-Eda/(R*T))*S[6]*aa,
# -kdb*np.exp(-Edb/(R*T))*S[7]*ab]

# Initial Concentration
Sso = 100
Sgo = 0
Dexo = 0
Glo = 4
Malo = 5
Mlto = 0
Eao = 90
Ebo = 60
S_o = [Sso,Sgo,Dexo,Glo,Malo,Mlto,Eao,Ebo]

t = np.linspace(0,90,240)
t_span = [0,90]


res = solve_ivp(rhs, t_span, S_o, t_eval = t)

print(res.y)
print(res.t)

fig, ax = plt.subplots()
# S = [[Ss], [Sg], [D], [Gl], [Mal], [Mlt]]
#labelC = ['Ss','Sg','D','Gl','Mal','Mlt']
[Ss,Sg,D,Gl,Mal,Mlt] = ax.plot(res.t,res.y.T[:,:6])
ax.legend([Ss,Sg,D,Gl,Mal,Mlt], ['Ss','Sg','Dex','Gl','Mal','Mlt'])
# ax.legend([Ss,Sg,D,Gl,Mal,Mlt,Ea,Eb], ['Ss','Sg','Dex','Gl','Mal','Mlt','Ea','Eb'])
# #ax.legend([line1,line2,line3],['label1','label2','label3'])
ax.grid()
ax.set_title('Sugar Concentration Profile at T = 67C')
ax.set_ylabel('g/Kg')
ax.set_xlabel('time [min]')
plt.show()





Hey @harrison5314 and @CascadesBrewer, thanks for the interest. Here is the code, I think it's the site that won't let me upload the code file. I might have changed the constants and values, so the resulting graph might not look the same as the one I posted but I think the equations are good.

Sorry for the late reply, have fun!
 
Back
Top