1 / 17

Stat 35b: Introduction to Probability with Applications to Poker Outline for the day:

Stat 35b: Introduction to Probability with Applications to Poker Outline for the day: P(flop two pairs). E(X+Y) = E(X) + E(Y) example. Farha vs. Gold. Bayes’s rule. Teams for project B. Continuous random variables. Uniform, normal, and standard normal distributions.

alaire
Download Presentation

Stat 35b: Introduction to Probability with Applications to Poker Outline for the day:

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Stat 35b: Introduction to Probability with Applications to Poker Outline for the day: • P(flop two pairs). • E(X+Y) = E(X) + E(Y) example. • Farha vs. Gold. • Bayes’s rule. • Teams for project B. • Continuous random variables. • Uniform, normal, and standard normal distributions.  u   u 

  2. 1. P(flop two pairs). If you’re sure to be all-in next hand,what is P(you will flop two pairs)? Tough one. Don’t double-count (4 4 9 9 Q) and (9 9 4 4 Q)! There are choose(13,2) possibilities for the NUMBERS of the two pairs. For each such choice (such as 4 & 9), there are choose(4,2) choices for the suits of the lower pair, and same for the suits of the higher pair. So, choose(13,2) * choose(4,2) * choose(4,2) different possibilities for the two pairs. For each such choice, there are 44 [52 - 8 = 44] different possibilities for your fifth card, so that it’s not a full house but simply two pairs. So, P(flop two pairs) = choose(13,2) * choose(4,2) * choose(4,2) * 44 / choose(52,5) ~ 4.75%, or 1 in 21.

  3. 2.E(X+Y) = E(X) + E(Y) example.Deal the cards face up, without reshuffling. Let Z = the number of cards til the 2nd king. What is E(Z)?  u   u 

  4. Z = the number of cards til the 2nd king. What is E(Z)? Let X1 = number of cards til 1st king. Let X2 = number of cards after 1st king til 2nd king. Let X3 = number of cards after 2nd king til 3rd king. Let X4 = number of cards after 3rd king til 4th king. Let X5 = number of cards after 4th king til the end of the deck. Clearly, X1 + X2 + X3 + X4 + X5 = 52. By symmetry, E(X1) = E(X2) = E(X3) = E(X4) = E(X5). Therefore, E(X1) = E(X2) = 52/5. Z = X1 + X2, so E(Z) = E(X1) + E(X2) = 2 x 52/5 = 20.8.

  5. 3. Gold vs. Farha. 4. Bayes’s rule, p49-52. Suppose that B1, B2 , Bn are disjoint events and that exactly one of them must occur. Suppose you want P(B1 | A), but you only know P(A | B1 ), P(A | B2 ), etc., and you also know P(B1), P(B2), …, P(Bn). Bayes’ Rule: If B1 , …, Bn are disjoint events with P(B1 or … or Bn) = 1, then P(Bi | A) = P(A | Bi ) * P(Bi) ÷ [ ∑P(A | Bj)P(Bj)]. Why? Recall: P(X | Y) = P(X & Y) ÷ P(Y). So P(X & Y) = P(X | Y) * P(Y). P(B1 | A) = P(A & B1 ) ÷ P(A) = P(A & B1 ) ÷ [ P(A & B1) + P(A & B2) + … + P(A & Bn) ] = P(A | B1 ) * P(B1) ÷ [ P(A | B1)P(B1) + P(A | B2)P(B2) + … + P(A & Bn)P(Bn) ].

  6. Bayes’s rule, continued. Bayes’s rule: If B1 , …, Bn are disjoint events with P(B1 or … or Bn) = 1, then P(Bi | A) = P(A | Bi ) * P(Bi) ÷ [ ∑P(A | Bj)P(Bj)]. See example 3.4.1, p50. If a test is 95% accurate and 1% of the pop. has a condition, then given a random person from the population, P(she has the condition | she tests positive) = P(cond | +) = P(+ | cond) P(cond) ÷ [P(+ | cond) P(cond) + P(+ | no cond) P(no cond)] = 95% x 1% ÷ [95% x 1% + 5% x 99%] ~ 16.1%. Tests for rare conditions must be extremely accurate.

  7. Back to Gold vs. Farha. Gold: 10u 7 Farha: Qu Q Flop: 9u 8 7 Who really is the favorite (ignoring all other players’ cards)? Gold’s outs: J, 6, 10, 7. (4 + 4 + 3 + 2 = 13 outs, 32 non-outs) P(Gold wins) = P(Out Out or Jx [x ≠ 10] or 6x or 10y [y≠Q,9,8] or 7z [z≠Q]) = [choose(13,2) + 4*28 + 4*32 + 3*24 + 2*30] ÷ choose(45,2) = 450 ÷ 990 = 45.45%. What would you guess Gold had? Say he’d do that 50% of the time with a draw, 100% of the time with an overpair, and 90% of the time with two pairs. (and that’s it) Using Bayes’ rule, P(Gold has a DRAW | Gold raises ALL-IN) = . [P(all-in | draw) * P(draw)] . [P(all-in | draw) P(draw)] + [P(all-in | overpair) P(overpair)] + [P(all-in | 2pairs) P(2 pairs)] = [50% * P(draw)] ÷ [50% * P(draw)] + [100% * P(overpair)] + [90% * P(2 pairs)]

  8. 5. TEAMS FOR PROJECT B. See teams.txt. Project B must be emailed to me by Friday, March 9, 8pm. team a Jun Wai team b Zesheng Benham team c Yoo Kwangchae team d Sungjae Sukhmeet team e Delroy Woosung team f James Logan team g Sarkis Deaeun team h Kelly Boris team i Michelle Te team j Yuk Noel team k Steven Nicholas team l Chi Hoi team m Bonnie Pin-Han team n Cody Dahhee

  9. 6. Continuous random variables and their densities, p103-107. Density (or pdf = Probability Density Function) f(y): ∫B f(y) dy = P(X in B). Expected value, µ = E(X) = ∫ y f(y) dy. (= ∑ y P(y) for discrete X.) Variance, s2 = V(X) = E(X2) – m2. SD(X) = √V(X). For examples of pdfs, see p104, 106, and 107.

  10. 7. Examples: uniform, normal, and standard normal variables. * Uniform (0,1). See p107-109. f(y) = 1, for y in (0,1). µ = 0.5. s ~ 0.29. P(X is between 0.4 and 0.6) = ∫.4 .6 f(y) dy = ∫.4 .6 1 dy = 0.2. * Exponential (l). See p114. f(y) = le-ly, for y ≥ 0. E(X) = 1/l. SD(X) = 1/l. * Normal. pp 115-117. mean = µ, SD = s, f(y) = 1/√(2πs2) e-(y-µ)/2s2. Symmetric around µ, 50% of the values are within 0.674 SDs of µ, 68.27% of the values are within 1 SD of µ, and 95% are within 1.96 SDs of µ. * Standard Normal. Normal with µ = 0, s = 1. See pp 117-118.

  11. Standard normal density: 68.27% between -1.0 and 1.0 95% between -1.96 and 1.96

  12. Project B example. zelda = function(numattable1, crds1, board1, round1, currentbet, mychips1, pot1, roundbets, blinds1, chips1, ind1, dealer1, tablesleft){ a1 = 0 ## how much I'm gonna end up betting. Note that the default is zero. a2 = min(mychips1, currentbet) ## how much it costs to call if(round1 == 1){ ## pre-flop: ## AK: Make a big raise if nobody has yet. Otherwise call. ## AQ: call a small raise, or make one if nobody has yet. ## AJ, AT, KQ, KJ, QJ: call a tiny raise. ## A9, KT, K9, QT, JT, T9: call a tiny raise if in late position (within 2 of the dealer). ## Suited A2-AJ: call a small raise. ## 22-99: call a small raise. ## TT-KK: make a huge raise. If someone's raised huge already, then go all in. ## AA: make a small raise. If there's been a raise already, then double how much it is to you. a3 = 2*blinds1+1 ## how much a tiny raise would be a4 = 4*blinds1+1 ## how much a small raise would be a5 = max(8*blinds1,mychips1/4)+1 ## how much a big raise would be a6 = max(12*blinds1,mychips1/2)+1 ## how much a huge raise would be a7 = dealer1 - ind1 if(a7 < -.5) a7 = a7 + numattable1 ## your position: a7 = how many hands til you're dealer if((crds1[1,1] == 14) && (crds1[2,1] == 13)){a1 = max(a2,a5) }

  13. if((crds1[1,1] == 14) && (crds1[2,1] == 12)){ if(a2 < a4){ a1 = a4 } else if(a2 > a5){ a1 = 0 } else a1 = a2 } if(((crds1[1,1] == 14) && ((crds1[2,1] < 11.5) && (crds1[2,1] > 9.5))) || ((crds1[1,1] == 13) && (crds1[2,1] > 10.5)) || ((crds1[1,1] == 12) && (crds1[2,1] == 11))){ if(a2 < a3) a1 = a2 } if(((crds1[1,1] == 14) && (crds1[2,1] == 9)) || ((crds1[1,1] == 13) && ((crds1[2,1] == 10) || (crds1[2,1] == 9))) || ((crds1[1,1] == 12) && (crds1[2,1] == 10)) || ((crds1[1,1] == 11) && (crds1[2,1] == 10)) || ((crds1[1,1] == 10) && (crds1[2,2] == 9))){ if((a2 < a3) && (a7<2.5)) a1 = a2 } if((crds1[1,2] == crds1[2,2]) && (crds1[1,1] == 14) && (crds1[2,1] < 11.5)){ if(a2<a4) a1 = a2 ## Note: this trumps the previous section, since it comes later in the code. }

  14. if((crds1[1,1] == crds1[2,1])){ ## pairs: if(crds1[1,1] < 9.5){ if(a2 < a4) a1 = a2 } else if(crds1[1,1] < 13.5){ if(a2<a5) a1 = a5 else a1 = mychips1 } else { if(a2 < blinds1 + .5) a1 = a4 else a1 = min(2*a2,mychips1) }} } if(round1 == 2){ ## post-flop: ## If there's a pair on the board and you don't have a set, then check/call up to small bet. ## Same thing if there's 3-of-a-kind on the board and you don't have a full house or more. ## If you have top pair or an overpair or two pairs or a set, make a big bet (call any bigger bet). ## Otherwise, if nobody's made even a small bet yet, then with prob. 20% make a big bluff bet. ## If you're the last to decide and nobody's bet yet, then increase this prob. to 50%. ## If you have an inside straight draw or flush draw then make a small bet (call any bigger bet). ## If you have a straight or better, then just call. ## Otherwise fold. a5 = min(sum(roundbets[,1]),mychips1) ## how much big bet would be (prev round's pot size) a6 = min(.5*sum(roundbets[,1]),mychips1) ## how much a small bet would be x = handeval(c(crds1[1:2,1], board1[1:3,1]), c(crds1[1:2,2], board1[1:3,2])) ## what you have x1 = handeval(c(board1[1:3,1]),c(board1[1:3,2])) ## what's on the board y = straightdraw1(c(crds1[1:2,1], board1[1:3,1]))

  15. z = flushdraw1(c(crds1[1:2,2], board1[1:3,2])) topcard1 = max(board1[1:3,1]) a7 = runif(1) ## random number uniformly distributed between 0 and 1 a8 = (1:numattable1)[roundbets[,1] == roundbets[ind1,1]] ## others who can still bet with you ## The next 5 lines may seem weird, but the purpose is explained in the next comment: a9 = a8 - dealer1 for(i in 1:length(a9)) if(a9[i]<.5) a9[i] = a9[i] + numattable1 a10 = ind1 - dealer1 if(a10 < .5) a10 = a10 + numattable1 a11 = 2*(a10 == max(a9)) ## So a11 = 2 if you're last to decide; otherwise a11 = 0. if((x1 > 1000000) && (x < 3000000)){ if(a2 < a6) a1 = a2 } else if((x1 > 3000000) && (x < 6000000)){ if(a2 < a6) a1 = a2 } else if(x > 1000000 + 15^3*topcard1){ a1 = max(a5,a2) } else if((a2 < a6) && ((a7 < .20) || ((a7 < .50) && (a11>1)))){ a1 = a6 } if((y == 4) || (z == 4)) a1 = max(a6, a2) if(x > 4000000) a1 = a2 }

  16. if(round1 == 3){ ## after turn: ## If there's a pair on the board and you don't have a set, then check/call up to small bet. ## Same thing if there's 3-of-a-kind on the board and you don't have a full house or more. ## Otherwise, if you have top pair or better, go all in. ## If you had top pair or overpair but now don't, then check/call a medium bet but fold to more. ## If you have an inside straight draw or flush draw then check/call a medium bet as well. ## Otherwise check/fold. a6 = min(1/3*sum(roundbets[,1:2]),mychips1) ## small bet (1/3 of prev round's pot size) a5 = min(.75*sum(roundbets[,1:2]),mychips1) ## medium bet (3/4 of prev round's pot size) x = handeval(c(crds1[1:2,1], board1[1:4,1]), c(crds1[1:2,2], board1[1:4,2])) ## what you have x1 = handeval(c(board1[1:4,1]),c(board1[1:4,2])) ## what's on the board y = straightdraw1(c(crds1[1:2,1], board1[1:4,1])) z = flushdraw1(c(crds1[1:2,2], board1[1:4,2])) topcard1 = max(board1[1:4,1]) oldtopcard1 = max(board1[1:3,1]) if((x1 > 1000000) && (x < 3000000)){ if(a2 < a6) a1 = a2 } else if((x1 > 3000000) && (x < 6000000)){if(a2 < a6) a1 = a2 } else if(x > 1000000 + 15^3*topcard1){ a1 = mychips1 } else if(x > 1000000 + 15^3*oldtopcard1){ if(a2 < a5) a1 = a2 } else if((y == 4) || (z == 4)){ if(a2 < a5) a1 = a2 } }

  17. if(round1 == 4){ ## after river: ## If there's a pair on the board and you don't have a set, then check/call up to small bet. ## Same thing if there's 3-of-a-kind on the board and you don't have a full house or more. ## Otherwise, if you have two pairs or better, go all in. ## If you have one pair, then check/call a small bet. ## With nothing, go all-in with probability 10%; otherwise check/fold. a6 = .45+runif(1)/10 ## random number between .45 and .55 a5 = min(a6*sum(roundbets[,1:3]),mychips1) ## small bet~ 1/2 of pot size; varies randomly x = handeval(c(crds1[1:2,1], board1[1:5,1]), c(crds1[1:2,2], board1[1:5,2])) x1 = handeval(c(board1[1:5,1]),c(board1[1:5,2])) ## what's on the board if((x1 > 1000000) && (x < 3000000)){ if(a2 < a5) a1 = a2 } else if((x1 > 3000000) && (x < 6000000)){ if(a2 < a5) a1 = a2 } else if(x > 2000000){ a1 = mychips1 } else if(x > 1000000){ if(a2 < a5) a1 = a2 } else if(runif(1)<.10){ a1 = mychips1 } } round(a1) } ## end of zelda

More Related