Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Hops and bittering algorithms

16 views
Skip to first unread message

sjde...@yahoo.com

unread,
Mar 21, 2009, 12:58:50 AM3/21/09
to
I'm interesting in the subject of IBU estimation algorithms.

I figured I'd kick off the discussion with a run-down of what IBUs are
and what we know about them, drawing heavily from John Palmer's
interview on BBR regarding the 2007 International Brewer's Symposium
on Hop Flavor and Aroma 2007.

A major theme is that a lot of what was discussed in older sources
(including even the 2006 editions of Palmer's own How to Brew) is not
entirely accurate.

First, IBUs are _not_ mg of isomerized alpha acid/1 ml of beer. That's
a commonly-given definition (including in how to brew), but it's not
right. IBUs take a measurement of the acids in beer and run it through
a formula designed to align with empirical bitterness data. That
measurement includes not only isoalphas (humulone, cohumulone,
adhumulone) but also oxidized beta acids (lupulone, colupulone,
adlupulone).

This is important in a few ways. First, the character of the
bitterness contributed by betas is different from that contributed by
alphas. It's usually described as "softer" or "less sharp" while being
equally bitter.

That leads in to a discussion of aged hops. Beta acids are not, by
themselves, bitter, but the oxidized forms are. So beta bitterness
increases as hops age. Alphas are the opposite, meaning that alpha
acids tend to decline as the hops age.

Now, most hops have in the range of 4-6% betas. That means that older
hops varieties (your noble hops, east kent goldings, cascade, cluster,
etc) aren't all that far off from a 1:1 alpha:beta ratio. As they age,
they won't lose that much bittering capability--but the _character_ of
that bittering will shift toward the beta kind.

Indeed, Palmer mentioned a test that measured 2 beers of 22 IBUs, one
made with fresh hops and the other with aged hops. The former had 23.5
ppm of isoalphas. The latter had just 3.5 ppm. So it's potentially a
massive flavor difference at the same level of IBUs. Palmer notes that
if you're making historic styles of beer this could be very important,
as shipping hops was slow and it was not uncommon to use hops over a
year old in brewing (especially in the US).

Also, there's the matter of newer high-alpha hop strains. Things like
Columbus, Sterling, etc generally have closer to a 2:1 or 3:1
alpha:beta ratio. That means that when _they_ age, they not only
mellow in the character of bitterness but they also lose actual
bittering capabilities much faster than more balanced alpha/beta hops.
That's might be worth keeping in mind if anyone decides to do American
lambics or some other beer with intentionally aged hops.

Okay, so that's the betas.

Now, some other results:
1. The rate at which alpha acids isomerize is pretty constant in worts
of various densities. That is, the gravity of your wort has almost
zero impact on how much hop utilization you get. But:
2. Isoalphas cling to everything, including hot break. So there's an
indirect effect where higher-gravity boils are likely to lose more
isoalphas in their (correspondingly greater) hot break material.

This is interesting in practice. It explains why the bittering
algorithms that use a gravity correction can be in the right ballpark
(the gravity factor is a stand-in for amount of break generated).
However, it also suggests that you should not include simple sugars in
the gravity calculations for the purposes of figuring out IBUs. It
also suggests that extract (which has already beenn boiled, and lost a
fair bit of break) may result in somewhat higher real bitterness than
you'd otherwise expect, since an extract brew at the same gravity will
lose less bitterness than an all-grain to break. Finally, it suggests
that wheat and rye (which generate a lot more proteins than barley)
might need to be weighted much more heavily in terms of gravity to
account for the extra isoalphas that drop out in their break.

Those were the major points I pulled from Palmer's interview.

sjde...@yahoo.com

unread,
Mar 21, 2009, 1:01:28 AM3/21/09
to
Second, I figured I'd run down some of Basic Brewing Radio's results
from testing several beer's IBUs and comparing that to the estimates
from several common home-brew IBU algorithms.

BBR ran a show testing several different beers with various IBU
estimating algorithms and then measuring the actual IBUs. They didn't
always specify fully what the boil size was, the OG, or the entire
hopping schedule but they often did. For each beer, I'll list the
name, any notes they mentioned on the recipe, the Average IBU estimate
from all 5 algorithms, the standard deviation, and then the IBUs
estimated by each algorithm and the actual measured IBUs.

Mark's Hefeweizen:
Extract, 1 oz Tettnang 4.5% @60mins
Avg: 15
StdD: 2
Rager: 17
Garetz 12 (always lowest)
Mosher 14
Tinseth 15
Daniels 17 (always highest)
Actual: 7

Belgian Brunette
Both added at 60 min: .5oz Styrian Goldings 6% and .85oz Hallertau
5.3%
Avg: 26
StD: 4
R: 30
G: 22
M: 23
T: 23
D: 30
Actual: 18
Beer was 6 months old when measured

Vanilla Porter
Various unspecified hops at 60min, 15 min, 5 min
Avg: 24
StD: 4.9
R: 27
G: 18
M: 23
T: 22
D: 31
Actual: 27

6pack Simcoe
15, 5 mins, flameout, dry-hop
Avg: 41
StD: 17.5
R: 37
G: 15
M: 42
T: 48
D: 63
Actual: 34

Late-hop Simcoe
Malt extract
Some confusion over boil; the calcs are for 10.1 minute boil, but it
was actually a 15 minute boil. Numbers in parenthesis are from re-
running the algorithm with the proper 15 minute boil length. I have no
idea how they treated the 15 minute addition when running with the
erroneous 10.1 minute boil, I'm presuming they treated it as a 10.1
minute addition.
2.5 oz @15min, 1 @5, .5 @flameout, 1 oz Amarillo dry-hop
Avg: 38
StD: 19
R: 37
G: 10 (18)
M: 38
T: 39
D: 64 (74)
Actual: 34

IPA
10 gal
18 oz cascade
2 @90 60 30 25 20 15 10 5 1
Avg: 85
StD: 21
R: 91
G: 57
M: 83
T: 78
D: 116
Actual: 77

sjde...@yahoo.com

unread,
Mar 21, 2009, 1:04:11 AM3/21/09
to
Third (and finally for the moment) I figured I'd give the rundown on
how some of the commonly used bitterness/IBU calculation algorithms
work.

Here are the current hops utilization formulae that I have specs for.

For all of these the same inputs are used:
"minutes" is a number of minutes this hop is in the boil
"gravity" is a decimal-point specific gravity (e.g. "1.050")
"aa" is the alpha-acid content of the hops as a decimal (e.g 7.5% is
"0.075")
"volume" is a decimal in liters (e.g. 5 gallons is "18.927").
"g" is a weight of the hops in grams (e.g. 1 oz is "28.35")

First, Rager. It definies hops utilization as a function of the number
of minutes. tanh is a standard hyperbolic tangent function.

Then it defines a gravity-correction factor (here called "ga"), which
is (gravity-1.050)/.2 if the gravity is over 1.050, or 0 if the
gravity is 1.050 or lower.

Finally, it calculates the IBUs using these numbers:

def utilization(minutes):
return (18.11+13.86*tanh((minutes-32.32)/18.27))*0.01

def ga(gravity):
if gravity>1.050:
return 0
return (gravity-1.050)/.2

def ibu(g, minutes, aa, volume, gravity):
"""g: grams of hops"""
return (g*utilization(minutes)*aa*1000)/(volume*(1+ga(gravity)))

---------------------------------
Next, Tinseth.

Tinseth defines utilization as the product of a "bigness" factor
(dependent on the gravity of the boil) and a "btf" factor (dependent
on the length of the boil). It then defines IBUs as the utilization
times the milligrams per liter of alpha acids.

# Note: pow(x, y) is "x to the y power".
# e here is the mathematical constant e, approximately 2.71828...
def bigness(gravity):
return 1.65*pow(0.000125, (gravity-1))

def btf(minutes):
return (1-pow(e, (-0.04 *minutes)))/4.15

def utilization(minutes, gravity):
return btf(minutes)*bigness(gravity)

def mgl_aa(g, aa, volume):
return (aa*g*1000)/volume

def ibu(g, minutes, aa, volume, gravity):
return utilization(minutes, gravity) * mgl_aa(g, aa, volume)


---------------------------------------
Finally, Garetz. Garetz is a bit trickier since it requires on a large
table lookup for utilization. I'll list it here, but I use a formula
to get close results instead:

def chart_utilization(minutes):
if minutes <= 0:
return 0
elif minutes <= 15:
return 2
elif minutes <= 20:
return 5
elif minutes <= 25:
return 8
elif minutes <= 30:
return 11
elif minutes <= 35:
return 14
elif minutes <= 40:
return 16
elif minutes <= 45:
return 18
elif minutes <= 50:
return 19
elif minutes <= 60:
return 20
elif minutes <= 70:
return 21
elif minutes <= 80:
return 22
else:
return 23


------------------------------------
If you do a curve fit, you can create a mathematical function that
gives a very close result to the table lookup without discontinuities:

co_a = 2.5251990477100890E+01
co_b = 2.2060400680981388E+01
co_c = 3.3792756276592284E+00
co_d = 5.0643078483394244E-01
def utilization(x):
return co_a * (1.0 - pow(1.0+pow(x/co_b, co_c), -1.0*co_d))


-----------------------------------------
Whichever method you want, it just gets more complicated from there
There are a number of small factors calculated along the way, and then
the very broadest level of the algorithm is an iterative process where
you make a guess at the final IBUs (called "d_ibu" for desired IBUs),
run the equations, and then if the answer isn't close to the guess you
try again with a d_ibu closer to the answer you got:

def calc_ca(final_volume, boil_volume, gravity, d_ibu, elevation=0):
cf = final_volume/boil_volume
boil_gravity = cf*(gravity - 1) + 1
gf = (boil_gravity - 1.050)/.2 + 1
hf = (cf*d_ibu)/260 + 1

tf = (elevation/550)*.02 + 1

return gf*hf*tf

def ibu(g, minutes, aa, volume, gravity, boil_volume, elevation):
aa = 100 * aa
d_ibu = 50
calc_ibu = 0

# abs(x) means "the absolute value of x"
while abs(d_ibu-calc_ibu)>0.1:
correction = (d_ibu - calc_ibu)/5
d_ibu -= correction
ca = calc_ca(volume, boil_volume, gravity, d_ibu, elevation)
calc_ibu = (utilization(minutes)*aa*g*0.1)/(volume*ca)
return calc_ibu

-------------------------------------------
As you can see, Garetz also takes elevation and boil volume into
account.


For any readers who are programmers, note that the above is all well-
formed Python code. If you head it up with the following:

from math import tanh, e, pow, log

you should be able to include any of those algorithms directly in your
python program

Ben Crowell

unread,
Mar 21, 2009, 12:10:49 PM3/21/09
to
Thanks for the informative posts, sjdevnull!

The information about the effect of aging is new to me, and that's
very useful to know about. Any information on what the relevant
time-scales are for alphas and betas? It would be helpful to
know something analogous to half-life for radioactivity: alphas
lose half their bittering in x months, betas in y months.
I would imagine that oxidizing of betas would be a pretty
slow process if you've got the hops sealed in a ziplock bag in
the freezer.

You say that traditional hops have 1:1 alpha to beta ratios.
Is that equal by weight or equal by taste? Or do they have
roughly equal bittering per unit weight?

Re the various bittering formulas, the main point that I think
is relevant is that they can disagree with each other by 50%, which
shows that they should all be taken with a huge grain of salt.
They're probably most useful when you do a relative comparison
of two recipes using the same formula. For instance, say I have
a recipe I like that uses a certain schedule for when to add the
hops, but I want to change the schedule a little bit while keeping
the IBUs the same. If I use the same formula to analyze both
recipes, I'm probably in good shape.

As long as a recipe is reproducible, none of this really matters
very much. You converge on a recipe you're happy with, and then
you just keep doing that. However, that's all assuming that every
aspect of the recipe is reproducible, and we all know that's not
the case. The LHBS may have different varieties of hops available
at different times, or you may be using hops you grew yourself,
in which case there's going to be a yearly cycle in terms of
freshness.

sjde...@yahoo.com

unread,
Mar 21, 2009, 9:40:23 PM3/21/09
to
On Mar 21, 12:10 pm, Ben Crowell

<crowel...@lightSPAMandISmatterEVIL.com> wrote:
> Thanks for the informative posts, sjdevnull!
>
> The information about the effect of aging is new to me, and that's
> very useful to know about. Any information on what the relevant
> time-scales are for alphas and betas? It would be helpful to
> know something analogous to half-life for radioactivity: alphas
> lose half their bittering in x months, betas in y months.
> I would imagine that oxidizing of betas would be a pretty
> slow process if you've got the hops sealed in a ziplock bag in
> the freezer.

I have no idea, and I expect any result would be heavily dependent on
things like loose vs. pellet hops, storage temperature (and maybe
humidity and such), whether they were vacuum sealed, zip-locked, or
open to air, etc.

> You say that traditional hops have 1:1 alpha to beta ratios.
> Is that equal by weight or equal by taste? Or do they have
> roughly equal bittering per unit weight?

That's by weight, and it's a rough estimate. Basically, most hops are
4-6% betas by weight, so the higher the alphas go the more out-of-
balance the ratio is.

I think Palmer indicated that bittering per weight of _oxidized_ betas
was similar to for isoalphas, but the unoxidized betas don't bitter so
that doesn't help estimates all that much.

And as you age, even the balanced hops do lose start losing bittering
capability, the just do it much more slowly than the high-alphas
(though the flavor profile changes as noted).

> Re the various bittering formulas, the main point that I think
> is relevant is that they can disagree with each other by 50%, which
> shows that they should all be taken with a huge grain of salt.

I like the beer that had 10 IBU by Garetz and 64 by Daniels.
Depending on which formula is right, that hopping schedule might be
good for a light hefeweizen or for an IPA or anything in between.

> They're probably most useful when you do a relative comparison
> of two recipes using the same formula. For instance, say I have
> a recipe I like that uses a certain schedule for when to add the
> hops, but I want to change the schedule a little bit while keeping
> the IBUs the same. If I use the same formula to analyze both
> recipes, I'm probably in good shape.

Yes, but some of the info suggests that the formula's bitterness
calculations won't be consistent with itself for all kinds of brews.

I'm thinking about a modified Tinseth that weights wheat/rye twice as
heavily as their true gravity and ignores simple sugars. I think that
would eliminate some of the weird behavior at the edges (and make a
Tinseth calculation of a big Belgian with a lot of sugar more likely
to be comparable to a Tinseth calculation for a more normal beer as
far as bitterness goes). The "twice as heavily" is a total WAG,
though, and sadly I have exactly 1 data point to work with on this
front.

Also, there probably ought to be a correction factor for extracts
(their "bittering gravity" should be somewhat lower than their true
gravity since they've already been boiled once and thus generate less
break material).

Really, there shouldn't be a "gravity" adjustment. There should be a
"break" adjustment, with a coefficient for each contributor to the
boil (wheat DME = a, barley DME = b, wheat grain = c, etc....with "0"
for sucrose/dextrose/candi syrup/etc). Then you'd multiply the
coefficient by the mass of the contributor and sum them for an
estimated break amount.

> As long as a recipe is reproducible, none of this really matters
> very much. You converge on a recipe you're happy with, and then
> you just keep doing that. However, that's all assuming that every
> aspect of the recipe is reproducible, and we all know that's not
> the case. The LHBS may have different varieties of hops available
> at different times, or you may be using hops you grew yourself,
> in which case there's going to be a yearly cycle in terms of
> freshness.

Yep. Plus, sometimes you might want to calculate as close to a "true"
IBU number as possible--when making a clone recipe for a beer you know
the IBUs on, or devising a recipe to fit style guidelines, or
whatever. Ultimately you'll refine it to taste, but having a more
accurate guide could help speed the process up.

Even without a more accurate algorithm it can be helpful to keep in
mind that "gee, this hefeweizen's going to have a bit lower IBUs than
my software estimates" or otherwise mentally note where the formula
may have shortcomings.

Zymogod

unread,
Mar 23, 2009, 1:08:55 PM3/23/09
to
I think the keyword here is estimation. There are so many variables
involved that it is impossible to know how accurate any one formula is
unless you have a lab evaluate your beer.

Where as your hops might have been estimiated to be of a certain aau
when picked and analyzed (based on some random sampling of the crop),
are the hops you use that exact aau? Do you actually know how old they
are? Do you know how well they have been packaged and stored before you
got them?

Do you know exactly how much beer you ended up with? Is the volume of
liquor absorbed by the hops measured? Or that in the hop back and
chiller that didn't make it into the fermenter? I say I make ten
gallons but it is usually +/- and I never really know exactly how much I
made. I lose a bit in the bottom of my fermenter as well.

How accurate were the gravity readings? Is your hydrometer or
spectrometer calibrated? Do you round the numbers up or down to the
closest convenient round number (14.2P)?

All these variables are in themselves estimates. And all will propagate
errors. Some more significantly than others.

The best we can do (with out a lab's help) is to use our calculations
and empirically contrast them between our batches and perhaps compare
the bitterness level to a similarly "known" craft beer. Though I bet
where as a craft brewery claims their beer is 39 IBUs it isn't always
so. They fudge as well.

Zymogod

unread,
Mar 23, 2009, 1:09:47 PM3/23/09
to
Oh, great post.

Bill Velek

unread,
Mar 29, 2009, 5:07:53 PM3/29/09
to
snip all

The above discussion is very interesting to me, and I'm disappointed
that there hasn't been more discussion here. I have therefore taken the
liberty of cutting and pasting the thread (without email-addys) in our
'Grow-Hops' Yahoo group in the hope that it will be helpful to our
members and possibly generate more discussion there. Most of us go to a
lot of trouble vacuum-packaging our harvested hops and freezing them;
the idea that aging and oxidation might mellow the resulting beer is
very intriguing to me.

Our Grow-Hops group is set so that anyone -- even non-members -- can
visit the message section and read any resulting discussion, but it is
necessary to be a member in order to post a reply. However, when anyone
joins our group, they can select to not receive any emails and just use
the webpage to view and respond to posts, if that's what they prefer.

Right now we have 2,813 members -- most of whom grow their own hops.
Here's our messages: http://groups.yahoo.com/group/Grow-Hops/messages

Cheers.

Bill Velek -- portal to my "HOMEBREWING" sites: www.tinyurl.com/velek
My other sites: www.velek.com ~ www.2plus2is4.com ~ www.grow-hops.com

Zymogod

unread,
Apr 2, 2009, 5:19:51 PM4/2/09
to

I'm surprised as well at the lack of discussion. I've toyed with most
of the mentioned equations for my beer formulation database and
arbitrarily settled on, as I recall, Tinseth's. The actual IBUs I
achieve are unknown but the calculations allow for me to approximate
what I will be getting compared to other batches.

Ben Crowell

unread,
Apr 2, 2009, 10:33:15 PM4/2/09
to
Zymogod wrote:
> I'm surprised as well at the lack of discussion. I've toyed with most
> of the mentioned equations for my beer formulation database and
> arbitrarily settled on, as I recall, Tinseth's. The actual IBUs I
> achieve are unknown but the calculations allow for me to approximate
> what I will be getting compared to other batches.

The real problem, as far as I can tell, is that there's no empirical
data on the web, and it's very difficult to get your own data without
very sophisticated and expensive equipment. I tried a while back, and
quickly realized that it wasn't a trivial problem. The published data
all seem to be in publications that are only on paper, not on the web.
Without any data, there's no way to decide whether one formula is
better than another.

sjde...@yahoo.com

unread,
Apr 2, 2009, 11:53:06 PM4/2/09
to
On Apr 2, 10:33 pm, Ben Crowell

This is why I'm keen for Denny (who has some beers he's had tested) to
post recipes and IBUs, or anyone else. And why I transcribed Basic
Brewing Radio's attempts at the same.

The more real data we can get, the better.

John 'Shaggy' Kolesar

unread,
Apr 6, 2009, 1:53:42 PM4/6/09
to

The only way to really know is to send a sample off to a lab. The trick with the
formulas is to just assume they're an estimate, and not particularly accurate. The
important thing is to pick a formula and stick with it. Then treat the numbers you get
as relative comparisons between batches, not as an absolute answer. If you know that batch
1 had "20 thingamabobs" and batch 2 had "30 thingamabobs", then you can tell from tasting
them the level of "thingamabobs" that you like better and can adjust your future recipes.
It doesn't really matter if 1 "thingamabob" = 1 "IBU".


John.

0 new messages