Mental
Joined: Dec 10, 2018
• Posts: 25
October 12th, 2020 at 6:50:12 PM permalink
A friend sent me a link to an article about the recent monster sequential royal jackpot at Red Rock Casino. The payoff for the progressive jackpot was 120,680 bets versus 800 bets for a normal royal. It appears to be a reversible royal jackpot.

I was able to estimate the contribution of the progressive to the EV, but I could not get the exact EV with my current VP analyzer. I have not been gambling much due to the pandemic. Out of boredom, I decided to add Sequential Royal Flushes (SRF) to my video poker analyzer. At first, I thought this might slow the analysis considerably. There are 120 different ways the cards can be dealt, so any dealt hand containing royal cards in one or more suits will have different expectation values (EVs) for holding the same cards, depending on the order of the dealt cards. I quickly realized that only holds that qualify as ordinary royal draws need to be handled specially. This is only four of 32 possible holds for the most complicated case of a dealt hand containing royal cards of four different suits.

My program takes 1.2 seconds to analyze the EV for a standard VP game using a single thread, and another 0.3 seconds to create a very accurate strategy for the game. I can analyze games with SRFs in 3.6 seconds. Therefore, games including SRFs only take three times longer than non-SRF games.

I use C++ to code my analyzer and emscripten to connect the C++ code to my html GUI. I suppose every VP analyzer has a loop like this:
` for (dt = 0; dt < 32; dt++) {  pay = 0.0;  nh = numHeld[dt];  for (t = 0; t < maxType; t++) {    n = tCount(dt, t);    if (n > 0) {      pay += pays[t] * n;    }  }  holdEV[dt] = pay / divNumHeld[numJoker][nh];}`

This fills an array, double holdEV[32], with the EV resulting from each of the 32 possible draws. The variable, dt, is the draw-type index. The index, t, is the type of paying hand, and pay[t] holds the pay-table for this particular game. The array numHeld[dt] holds the number of cards held for each draw type. The store instance holds the precomputed number of ways of drawing each type of paying hand. The divNumHeld array tells me how many ways I can draw to a hand for a particular draw type and number of jokers (in this case, zero jokers).

To handle SRFs, I add a bit of code inside this loop that only triggers if it is possible to draw an ordinary RF (t == isRF):
` for (dt = 0; dt < 32; dt++) {  pay = 0.0;  nh = numHeld[dt];  for (t = 0; t < maxType; t++) {    n = tCount(dt, t);    if (n > 0) {      pay += pays[t] * n;      if (t == isRF) {        for (int ord = 0; ord < 120; ord++) {          if Seq(ord, dt)) {            nSeqRF[ord][dt] += n;            rSeqRF[119 - ord][dt] += n;          }        }      }    }  }  holdEV[dt] = pay / divNumHeld[numJoker][nh];}`

This added code considers the 120 possible ways the hand can be dealt, checks if the order makes this draw type a SRF draw, and then stores the number of normal SRFs (nSeqRF) and reverse-order SRFs (rSeqRF) that are possible for each ordering and draw type. I had carefully defined the 120 hand orders such that the 120th ordering is the opposite of the first ordering, the same for the 119th and 2nd orderings, etc. Therefore, I don't need to have a separate function that decides whether a reverse SRF is possible. If the Nth ordering makes a SRF possible, the the (120 - N)th ordering makes a reverse SRF possible.

Note that out of 32 draw types, only between one and four draws can yield any royals. So, the ord-loop code rarely executes, and the isSeq(ord, dt) function usually returns false, so the inner code rarely executes. This preliminary calculation doesn't take as much time as I expected.

The part of the analysis that takes extra time is finding the right hold for each order. For normal video poker, I search the holdEV[dt] to find the draw type that gives the highest EV. With SRFs, I simply do this 120 times for the different orders after adjusting the holdEV[dt] for the numbers of SRFS (nSRF = nSeqRF +rSeqRF). This adjustment is only a function of the number of cards held and nSRF, so I use a precomputed array to adjust the holdEV array and avoid some floating point operations:
`holdEV[dt] += extraSeqEV[nh][nSRF];`

I then determine the hold with the highest EV for all 120 orderings of the dealt cards, and use the average of all these 120 EVs for the EV of the hand.

I could speed the code up more by only doing the best-EV recalculation for orderings of the dealt hands where any SRFS are possible. For example, if a dealt hand has only one RF card, then only 24 of the 120 orderings have a SRF draw and another 24 have a reverse SRF draw. (If the RF card is a queen, the same 24 orderings pertain to both.) When there are four or five cards to the RF, only two of the 120 orderings have SRF draws. All of the other orderings have the same strategy and EV. I prefer to keep the code simple, and I just burn the CPU cycles to loop over all 120 orderings.

As a sanity check, I set the SRF payoff to 1,000,000 for one. This means all SRF draws holding 3 to 5 cards are the best hold, even holding three to a RF versus holding trips. It is easy to calculate the cycles for SRFs when you always draw for them. I calculated the cycle for drawing a SRF holding 3, 4, or 5 cards and put these in the last column. These exactly match the cycles that came out of my VP analyzer:
# HeldProbability% of SRFSRF CycleCalc Cycle
00.00000000093 0.13%1073294773=
10.00000005405 7.50% 18500741=
20.00000025547 35.44% 3914397=
30.00000025651 35.58% 3898440 3898440
40.00000012826 17.79% 7796880 7796880
50.00000002565 3.56% 38984400 38984400

SeqRF pays 1,000,000 for 1

For a SRF paying 10,000 for one, the cycle for getting a SRF holding three cards is slightly longer than the example above. For holding 4 or 5 cards, the cycles are still the same, as I would expect:
# HeldProbability% of SRFSRF CycleCalc Cycle
00.00000000119 0.22%838235093=
10.00000001414 2.66% 70710440=
20.00000011205 21.10% 8924322=
30.00000024987 47.04% 4002102 3898440
40.00000012826 24.15% 7796880 7830200
50.00000002565 4.83% 38984400 38984400

SeqRF pays 10,000 for 1

If I run the program for a range of SRF payoff values, I can see how the EV increases with the value of the SRF,
SRF PaysSRF EVGame EVSRF Cycle
8000.03%96.87%2414162
50000.26%97.07%1935832
100000.54%97.34%1863686
150000.81%97.61%1851058
200001.08%97.88%1846229
400002.35%99.00%1701320
600003.65%100.19%1645224
800004.90%101.42%1633834
1000006.48%102.65%1543558
1200008.11%103.97%1479061

The frequency of SRFs is one in 2,414,162 when they pay the same as a normal royal. This drops to one in 1,479,061 when the SRF pays 120,000 for one and the player makes all the right strategy changes.
Wizard

Joined: Oct 14, 2009
• Posts: 22085
October 12th, 2020 at 6:55:16 PM permalink
What is the full pay table for the game?
It's not whether you win or lose; it's whether or not you had a good bet.
Mental
Joined: Dec 10, 2018
• Posts: 25
October 12th, 2020 at 7:05:04 PM permalink
Quote: Wizard

What is the full pay table for the game?

The first two tables were computed for 9/6 JoB.

The article I read said the big SRF was hit while playing 6/5 Bonus Poker. Below is the pay table for the third table in the original post.
Hand NamePayoutProbabilityCycle% of Return
SeqRF 120680 0.00000067616 1478930.96 8.159948%
Royal 800 0.00002557266 39104.2679 2.045812%
Str_Flush 50 0.00010474637 9546.87064 0.523732%
Full_House 6 0.01134779636 88.1228361 6.808678%
Flush 5 0.01075497391 92.9802348 5.377487%
Straight 4 0.01105209506 90.4805826 4.420838%
Trips 3 0.07393991086 13.5244956 22.181973%
Two_Pair 2 0.12854140450 7.77959447 25.708281%
JOB 1 0.21019485503 4.75749038 21.019486%
Last edited by: Mental on Oct 12, 2020
Wizard

Joined: Oct 14, 2009
• Posts: 22085
October 12th, 2020 at 7:43:12 PM permalink
My eyebrows are raised.

Assuming no strategy changes from 6-5 bonus poker, I get an average royal win of 2,798 and a return of 101.83%.

What denom is this game?

I may personally check it out tomorrow.
It's not whether you win or lose; it's whether or not you had a good bet.
DRich
Joined: Jul 6, 2012
• Posts: 6391
October 12th, 2020 at 7:45:26 PM permalink
Quote: Wizard

My eyebrows are raised.

Assuming no strategy changes from 6-5 bonus poker, I get an average royal win of 2,798 and a return of 101.83%.

What denom is this game?

I may personally check it out tomorrow.

I believe he is referring to the one that hit at Red Rock that is 0.25 denom.
Living longer does not always infer +EV
Mental
Joined: Dec 10, 2018
• Posts: 25
October 12th, 2020 at 8:27:56 PM permalink
Quote: DRich

I believe he is referring to the one that hit at Red Rock that is 0.25 denom.

Right. I am sorry that I could not figure out how to link the article here. /news/local-news/gambler-hits-150k-jackpot-at-red-rock-casino-resort/ I am only inferring from the picture in the article that this is a reversible royal game, but maybe it is one-way with AKQJT order or even wrap-around.

The return for a one-way sequential royal is 100.43374301%
Mental
Joined: Dec 10, 2018
• Posts: 25
October 12th, 2020 at 8:38:20 PM permalink
Oops. I wrote: "For a SRF paying 10,000 for one, the cycle for getting a SRF holding three cards is slightly longer than the example above. For holding 4 or 5 cards, the cycles are still the same, as I would expect:" but I originally meant to write this about the 100,000 SRF.

# HeldProbability% of SRFSRF CycleCalc Cycle
00.00000000060 0.19%1676470186=
10.00000001282 4.06% 78032126=
20.00000009671 30.67% 10339768=
30.00000012824 40.67% 7797601 7796880
40.00000006413 20.34% 15593760 15593760
50.00000001283 4.07% 77968800 77968800

SeqRF pays 100,000

It is not true for the 10,000 SRF. For a 10,000 SRF, only the SRF cycle numbers for a five card hold are the same. You don't break up a dealt straight flush, 9TJQK, so the cycle is longer for hitting 4-card SRF draws, than for a strategy where you always draw for SRFs.
AxelWolf
Joined: Oct 10, 2012
• Posts: 18249
October 13th, 2020 at 12:57:30 PM permalink
Back in June I got a call regarding this Progressive with veg details, other than some super inflated percentage. Since there were lots of unknown details to me, I thought there could be more to this, perhaps a progressive dump or something. I do appropriate the effort but after more information I tried to explain why this was not something I was interested in. the person seemed annoyed that I wasn't interested. I tried to explain why but they seem to be focused on the large number and small bet.
♪♪Now you swear and kick and beg us That you're not a gamblin' man Then you find you're back in Vegas With a handle in your hand♪♪ Your black cards can make you money So you hide them when you're able In the land of casinos and money You must put them on the table♪♪ You go back Jack do it again roulette wheels turinin' 'round and 'round♪♪ You go back Jack do it again♪♪
Mental
Joined: Dec 10, 2018
• Posts: 25
October 13th, 2020 at 2:38:58 PM permalink
Quote: AxelWolf

Back in June I got a call regarding this Progressive with veg details, other than some super inflated percentage. Since there were lots of unknown details to me, I thought there could be more to this, perhaps a progressive dump or something. I do appropriate the effort but after more information I tried to explain why this was not something I was interested in. the person seemed annoyed that I wasn't interested. I tried to explain why but they seem to be focused on the large number and small bet.

I also know few of the details. Was this a two-way SRF game? Single machine or linked bank? What is the meter rate? If I assume 2% meter. 10K bet meter reset level, and 1.8M RSRF cycle, then this only went a bit over three cycles before hitting. If the meter is much slower, then it is less likely that the progressive got to 120K bets by ordinary accumulation.

The variance is 9869 * \$1.252 =15,420 \$2. That is slightly lower variance than playing FPDW at \$25 per hand (16,147 \$2). I would have played some if I was in the neighborhood. Many folks don't have the bankroll for it, but the hourly EV is okay.
Tony8216
Joined: Oct 11, 2020