Happy HolidaySs Giveaway - Winners Re-Re-Re-Re-Drawn - 24 hours to Claim!

Get your HBT Growlers, Shirts and Membership before the Rush!


Home Brew Forums > Home Brewing Beer > Brew Science > Estimating bitterness: Algorithms and state of the art
Reply
 
LinkBack Thread Tools
Old 03-20-2009, 07:25 PM   #1
SumnerH
Feedback Score: 0 reviews
Recipes 
 
Join Date: Feb 2009
Location: Alexandria, VA, USA
Posts: 2,058
Liked 26 Times on 23 Posts
Likes Given: 5

Default Estimating bitterness: Algorithms and state of the art

So I figured this is the correct forum for a discussion of various bittering algorithms and what we know about IBUs. I'm going to kick off with a few topics

1. Brief history and state of the art on what IBUs are and how hops contribute to them, mainly cribbed from John Palmer's interview on BBR regarding the 2007 International Brewer's Symposium on Hop Flavor and Aroma.
2. A run-down of the results of BBR's shoot-out comparing 5 major IBU estimation algorithms with actual IBU measurements.
3. A run-down of the major homebrew bittering calculations. As of this moment I've got full information on:

  1. Rager
  2. Garetz
  3. Tinseth

Obviously, at least Mosher and Daniels would be good to add here.
4. A discussion of the issues involved with partial-boil bittering calculations
5. A discussion of issues involved in designing a more accurate bittering algorithm, especially in light of information from (1) and (2).

I'll edit this post as a sort of table of contents for the thread.
__________________

On deck: Little Bo Pils, Bretta Off Dead (Brett pale)
Secondary: Oude Bruin, Red Sky at Morning (Sour brown ale)
On tap: Saison Duphunk (sour), Amarillo Slim (IPA), Earl White (ginger/bergamot wit)
Bottled: Number 8 (Belgian Strong Dark Ale), Eternale (Barleywine), Ancho Villa (Ancho/pasilla/chocolate/cinnamon RIS), Oak smoked porter (1/2 maple bourbon oaked, 1/2 apple brandy oaked)


SumnerH is offline
 
Reply With Quote Quick reply to this message
Old 03-20-2009, 07:46 PM   #2
SumnerH
Feedback Score: 0 reviews
Recipes 
 
Join Date: Feb 2009
Location: Alexandria, VA, USA
Posts: 2,058
Liked 26 Times on 23 Posts
Likes Given: 5

Default

First, a run-down of what IBUs are and what we know about them from John Palmer's interview on BBR regarding the 2007 International Brewer's Symposium on Hop Flavor and Aroma 2007.

First, IBUs are _not_ mg of isomerized alpha acid/1 ml of beer. That's a commonly-given definition (including in Palmer's own 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.

__________________

On deck: Little Bo Pils, Bretta Off Dead (Brett pale)
Secondary: Oude Bruin, Red Sky at Morning (Sour brown ale)
On tap: Saison Duphunk (sour), Amarillo Slim (IPA), Earl White (ginger/bergamot wit)
Bottled: Number 8 (Belgian Strong Dark Ale), Eternale (Barleywine), Ancho Villa (Ancho/pasilla/chocolate/cinnamon RIS), Oak smoked porter (1/2 maple bourbon oaked, 1/2 apple brandy oaked)

SumnerH is offline
 
Reply With Quote Quick reply to this message
Old 03-20-2009, 07:50 PM   #3
Kaiser
Feedback Score: 0 reviews
 
Kaiser's Avatar
Recipes 
 
Join Date: Nov 2005
Location: Pepperell, MA
Posts: 3,904
Liked 115 Times on 71 Posts
Likes Given: 4

Default

It's important to put the bitterness estimation problem into perspective as being mostly driven by home brewers. All these tables actually come from home brewers and I have not come across such tables in technical brewing literature.

This leads me to believe that this is not a problem that many commercial brewers deal with. They simply estimate the IBUs that they will get, brew a pilot batch, measure IBUs and adjust from there.

The problem with estimating IBUs is that there are a number of unknown or unaccounted for factors:

- boil pH
- hop age
- loss of bitterness in kraeusen
- loss of bitterness in the yest trub

As a result I'm not estimating my IBUs using these formulas anymore. I simply use guidance from previous batches. But if you are just starting out to gather experience and/or brew a lot of beers these formulas are just fine. Just pick one and stick with it and get an idea how bitter a beer with an "IBU" level estimated by that formula tastes to you. If you estimated 30 IBU and it tastes less more than you expected, b/c you had commercial beers that measured 30 IBU, aim for 35-40 IBU next time. And don't get hung up tweaking the IBUs to less than +/- 1 or less.

For the Tinseth numbers I know that he measured them post boil. Although about 30% of the IBUs after the boil will be lost in fermentation his estimation is surprisingly accurate when it was compared with actually measured IBUs.

Kai

Kaiser is offline
 
Reply With Quote Quick reply to this message
Old 03-20-2009, 08:15 PM   #4
SumnerH
Feedback Score: 0 reviews
Recipes 
 
Join Date: Feb 2009
Location: Alexandria, VA, USA
Posts: 2,058
Liked 26 Times on 23 Posts
Likes Given: 5

Default

Quote:
Originally Posted by Kaiser View Post
It's important to put the bitterness estimation problem into perspective as being mostly driven by home brewers. All these tables actually come from home brewers and I have not come across such tables in technical brewing literature.

This leads me to believe that this is not a problem that many commercial brewers deal with. They simply estimate the IBUs that they will get, brew a pilot batch, measure IBUs and adjust from there.

The problem with estimating IBUs is that there are a number of unknown or unaccounted for factors:

- boil pH
- hop age
- loss of bitterness in kraeusen
- loss of bitterness in the yest trub

As a result I'm not estimating my IBUs using these formulas anymore. I simply use guidance from previous batches. But if you are just starting out to gather experience and/or brew a lot of beers these formulas are just fine. Just pick one and stick with it and get an idea how bitter a beer with an "IBU" level estimated by that formula tastes to you. If you estimated 30 IBU and it tastes less more than you expected, b/c you had commercial beers that measured 30 IBU, aim for 35-40 IBU next time. And don't get hung up tweaking the IBUs to less than +/- 1 or less.
Yeah, within 5 is close enough. The problem is (as we'll see when I post the results from the BBR show) that you'll wind up with cases where Garetz is giving you an estimated 10 IBUs, Tinseth is giving 39, and Daniels is giving 64.

In general, if you're just developing recipes for yourself iteratively, you don't need accurate IBUs. And you're definitely better off just picking one algorithm and sticking with it so you know about how things taste on that scale.

The problem is if you're trying to actually meet IBU levels, either to meet style guidelines for competition or to clone commercial beers with known IBUs. Having a more accurate algorithm for estimating target IBUs would be nice, there.

Quote:
For the Tinseth numbers I know that he measured them post boil. Although about 30% of the IBUs after the boil will be lost in fermentation his estimation is surprisingly accurate when it was compared with actually measured IBUs.
I'll be putting up some measurements later on comparing 5 algorithms' estimates with the actual IBUs (BBR did the test a couple years back).
__________________

On deck: Little Bo Pils, Bretta Off Dead (Brett pale)
Secondary: Oude Bruin, Red Sky at Morning (Sour brown ale)
On tap: Saison Duphunk (sour), Amarillo Slim (IPA), Earl White (ginger/bergamot wit)
Bottled: Number 8 (Belgian Strong Dark Ale), Eternale (Barleywine), Ancho Villa (Ancho/pasilla/chocolate/cinnamon RIS), Oak smoked porter (1/2 maple bourbon oaked, 1/2 apple brandy oaked)

SumnerH is offline
 
Reply With Quote Quick reply to this message
Old 03-20-2009, 08:35 PM   #5
Kaiser
Feedback Score: 0 reviews
 
Kaiser's Avatar
Recipes 
 
Join Date: Nov 2005
Location: Pepperell, MA
Posts: 3,904
Liked 115 Times on 71 Posts
Likes Given: 4

Default

Quote:
Originally Posted by SumnerH View Post
The problem is if you're trying to actually meet IBU levels, either to meet style guidelines for competition or to clone commercial beers with known IBUs. Having a more accurate algorithm for estimating target IBUs would be nice, there.


Even for competition the judging is based on bitterness perception and not actual IBUs. If you don’t really know how bitter a given style should taste then you don’t know much about that style to begin with.

But yes it would be nice to estimate the IBUs more correctly, but that is actually a quite complex problem and I doubt that it will be solved anytime soon. It would take a lot of experimentation to come up with a model that can include pH and fermentation effects.

Kai
__________________
BrauKaiser.com - brewing science blog - Twitter - water and mash chemistry calculator
Kaiser is offline
 
Reply With Quote Quick reply to this message
Old 03-20-2009, 08:40 PM   #6
SumnerH
Feedback Score: 0 reviews
Recipes 
 
Join Date: Feb 2009
Location: Alexandria, VA, USA
Posts: 2,058
Liked 26 Times on 23 Posts
Likes Given: 5

Default

Quote:
Originally Posted by Kaiser View Post
Even for competition the judging is based on bitterness perception and not actual IBUs. If you don’t really know how bitter a given style should taste then you don’t know much about that style to begin with.
Absolutely.
Quote:
But yes it would be nice to estimate the IBUs more correctly, but that is actually a quite complex problem and I doubt that it will be solved anytime soon. It would take a lot of experimentation to come up with a model that can include pH and fermentation effects.
Yep. I don't think that anything incredibly accurate is likely, but I think there are some corner cases that can be improved to come up with something that's generally within about 5 or so IBUs.
__________________

On deck: Little Bo Pils, Bretta Off Dead (Brett pale)
Secondary: Oude Bruin, Red Sky at Morning (Sour brown ale)
On tap: Saison Duphunk (sour), Amarillo Slim (IPA), Earl White (ginger/bergamot wit)
Bottled: Number 8 (Belgian Strong Dark Ale), Eternale (Barleywine), Ancho Villa (Ancho/pasilla/chocolate/cinnamon RIS), Oak smoked porter (1/2 maple bourbon oaked, 1/2 apple brandy oaked)

SumnerH is offline
 
Reply With Quote Quick reply to this message
Old 03-20-2009, 08:46 PM   #7
SumnerH
Feedback Score: 0 reviews
Recipes 
 
Join Date: Feb 2009
Location: Alexandria, VA, USA
Posts: 2,058
Liked 26 Times on 23 Posts
Likes Given: 5

Default

IBU testing results from BBR

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

__________________

On deck: Little Bo Pils, Bretta Off Dead (Brett pale)
Secondary: Oude Bruin, Red Sky at Morning (Sour brown ale)
On tap: Saison Duphunk (sour), Amarillo Slim (IPA), Earl White (ginger/bergamot wit)
Bottled: Number 8 (Belgian Strong Dark Ale), Eternale (Barleywine), Ancho Villa (Ancho/pasilla/chocolate/cinnamon RIS), Oak smoked porter (1/2 maple bourbon oaked, 1/2 apple brandy oaked)

SumnerH is offline
 
Reply With Quote Quick reply to this message
Old 03-20-2009, 10:43 PM   #8
SumnerH
Feedback Score: 0 reviews
Recipes 
 
Join Date: Feb 2009
Location: Alexandria, VA, USA
Posts: 2,058
Liked 26 Times on 23 Posts
Likes Given: 5

Default Hops utilization formulae

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:

Code:
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.

Code:
# 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:

Code:
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:

Code:
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:

Code:
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:
Code:
from math import tanh, e, pow, log
you should be able to include any of those algorithms directly in your python program.
__________________

On deck: Little Bo Pils, Bretta Off Dead (Brett pale)
Secondary: Oude Bruin, Red Sky at Morning (Sour brown ale)
On tap: Saison Duphunk (sour), Amarillo Slim (IPA), Earl White (ginger/bergamot wit)
Bottled: Number 8 (Belgian Strong Dark Ale), Eternale (Barleywine), Ancho Villa (Ancho/pasilla/chocolate/cinnamon RIS), Oak smoked porter (1/2 maple bourbon oaked, 1/2 apple brandy oaked)


SumnerH is offline
 
Reply With Quote Quick reply to this message
Old 03-20-2009, 11:08 PM   #9
StoutFan
Feedback Score: 0 reviews
Recipes 
 
Join Date: Jan 2009
Location: Wyoming, Michigan
Posts: 905
Liked 5 Times on 4 Posts
Likes Given: 4

Default

Now, would this take FWH and dry hopping into effect also, or am I off base here?

__________________
Rockin' L Fabrication and Beverages

Gambrinous - to be full of beer
StoutFan is offline
 
Reply With Quote Quick reply to this message
Old 03-20-2009, 11:26 PM   #10
SumnerH
Feedback Score: 0 reviews
Recipes 
 
Join Date: Feb 2009
Location: Alexandria, VA, USA
Posts: 2,058
Liked 26 Times on 23 Posts
Likes Given: 5

Default

Quote:
Originally Posted by StoutFan View Post
Now, would this take FWH and dry hopping into effect also, or am I off base here?
None of these do.

I'd guess that a FWH that then goes into the boil could be treated as a beginning-of-boil addition (or, better, a 90 minute addition even if you're doing a 60 minute boil) and ought to get close*, since utilization past 60 minutes increases very slowly, but I'd appreciate more thoughts on that. http://brewery.org/library/1stwort.html has some interesting FWH notes.

If you treat dry-hopping as a 0-minute addition, it's going to contribute nothing except by Rager where it'll have 5% utilization. I'm really not sure how to deal with it. I know dry-hopping is usually much more for aroma than bittering, but I don't know if _no_ bittering is appropriate. Thoughts?

*Assuming at least 60 minute boils
__________________

On deck: Little Bo Pils, Bretta Off Dead (Brett pale)
Secondary: Oude Bruin, Red Sky at Morning (Sour brown ale)
On tap: Saison Duphunk (sour), Amarillo Slim (IPA), Earl White (ginger/bergamot wit)
Bottled: Number 8 (Belgian Strong Dark Ale), Eternale (Barleywine), Ancho Villa (Ancho/pasilla/chocolate/cinnamon RIS), Oak smoked porter (1/2 maple bourbon oaked, 1/2 apple brandy oaked)

SumnerH is offline
 
Reply With Quote Quick reply to this message
Reply



Quick Reply
Message:
Options
Thread Tools


Similar Threads
Thread Thread Starter Forum Replies Last Post
Estimating ABV? Cape Brewing Cider Forum 2 09-24-2009 02:20 PM
estimating OG newbrewr4fun Extract Brewing 4 09-12-2009 03:44 PM
Estimating AA% Yuri_Rage Hops Growing 13 05-12-2008 06:04 PM
Estimating Gravity Sea All Grain & Partial Mash Brewing 3 06-24-2007 03:51 PM
Help estimating Alcohol % rjm Beginners Beer Brewing Forum 11 04-21-2006 07:37 PM



Newest Threads

LATEST SPONSOR DEALS