Software update with new split EVs

iCountNTrack

Well-Known Member
#81
k_c said:
I can give one example where optimal play would vary from fixed strategy play when only one split is made but I'm sure there are more.

Say a pair of 8s are split versus a dealer 7 dealt from 2 full decks. On the first hand player draws 4-1-1-1-1 so his full hand is 8-4-1-1-1-1. Correct strategy is to hit, so player draws. Possible draws are 1,2,3,4,5,6,7,8,9,10.

On the second hand player again draws 4-1-1-1-1 for a hand of 8-4-1-1-1-1. (If player draws an ace on the first 8-4-1-1-1-1 then this hand is not possible.) However, at this point no more aces remain, 2 4s are removed, 2 8s are removed, and the hit card that was drawn on the first hand is also removed. The best strategy for the second hand is to stand, which differs from the strategy of the first hand.

So if a fixed strategy is used that has determined 8-4-1-1-1-1 vs 7 should be hit then both hands would be hit even though EV is greater for hitting the first and standing on the second.

Optimal strategy is to hit the first hand and stand on the second, which increases EV to its maximum value.
I was hoping we stay away from multiple decks :grin: , since it runs even slower (typical machine ~ 2.5 hours) but it turned out to be a good example :)
this is the output from my CA (2 decks S17 DAS, 8,8 vs 7 1 split)

Code:
player's probabilities for standing
p_-1 = 0.746823618412
p_0 = 0
p_+1= 0.253176381588
p_+1.5 = 0
EV for standing= -0.493647236824 ± 0.869662236489
 
player's probabilities for doubling
p_-2 = 0.672573911737
p_0 = 0.0582195766871
p_+2= 0.269206511576
EV for doubling= -0.80673480032 ± 1.76530469189
 
player's probabilities for hitting
p_-1 = 0.672573911737
p_0 = 0.0582195766871
p_+1= 0.269206511576
EV for hitting= -0.40336740016 ± 0.882652345944

player's probabilities for splitting
p_-4 = 0.00416281658921
p_-3 = 0.0509584335589
p_-2 = 0.186420099874
p_-1 = 0.109646729082
p_0 = 0.202007416303
p_+1= 0.116494516984
p_+2 = 0.230490196456
p_+3 = 0.0901480191297
p_+4 = 0.00967177202379
EV for splitting= 0.234592559516 ± 1.82484526862
Summary of Results:
0.234592559516 (ICNT)
0.231816082001 (K_C)
0.231816011870 (MGP)
 
#82
iCountNTrack said:
I was hoping we stay away from multiple decks :grin: , since it runs even slower (typical machine ~ 2.5 hours) but it turned out to be a good example :)
this is the output from my CA (2 decks S17 DAS, 8,8 vs 7 1 split)

Code:
player's probabilities for standing
p_-1 = 0.746823618412
p_0 = 0
p_+1= 0.253176381588
p_+1.5 = 0
EV for standing= -0.493647236824 ± 0.869662236489
 
player's probabilities for doubling
p_-2 = 0.672573911737
p_0 = 0.0582195766871
p_+2= 0.269206511576
EV for doubling= -0.80673480032 ± 1.76530469189
 
player's probabilities for hitting
p_-1 = 0.672573911737
p_0 = 0.0582195766871
p_+1= 0.269206511576
EV for hitting= -0.40336740016 ± 0.882652345944

player's probabilities for splitting
p_-4 = 0.00416281658921
p_-3 = 0.0509584335589
p_-2 = 0.186420099874
p_-1 = 0.109646729082
p_0 = 0.202007416303
p_+1= 0.116494516984
p_+2 = 0.230490196456
p_+3 = 0.0901480191297
p_+4 = 0.00967177202379
EV for splitting= 0.234592559516 ± 1.82484526862
Summary of Results:
0.234592559516 (ICNT)
0.231816082001 (K_C)
0.231816011870 (MGP)
I may be misinterpreting your stand/hit/double numbers, because I get different results, which I think we would all agree on. Following is from my CA using CDZ-, which matches MGP's:

Code:
Enter dealer up card and player hand (Ctrl-C to exit): 7 2 8 8

Stand      E(X) =  -48.949130472%
Hit        E(X) =  -39.512952734%
Double     E(X) =  -79.025905468%
Split      E(X) =   23.181601187%
While we're at it, though, I only see a single post-split departure from pre-split strategy with these rules/decks, namely 8-A-A-A-A-A-A-A-A (stand pre-split, hit post-split).
 

k_c

Well-Known Member
#83
ericfarmer said:
I may be misinterpreting your stand/hit/double numbers, because I get different results, which I think we would all agree on. Following is from my CA using CDZ-, which matches MGP's:

Code:
Enter dealer up card and player hand (Ctrl-C to exit): 7 2 8 8

Stand      E(X) =  -48.949130472%
Hit        E(X) =  -39.512952734%
Double     E(X) =  -79.025905468%
Split      E(X) =   23.181601187%
While we're at it, though, I only see a single post-split departure from pre-split strategy with these rules/decks, namely 8-A-A-A-A-A-A-A-A (stand pre-split, hit post-split).
Not a really big point but the EV quoted from my program probably comes from a version that uses floats. When I developed it on my old computer I did everything I could to conserve memory. I've switched the program on my website to use doubles but the number of figures displayed doesn't make much difference in the output.

The EV from a version that uses doubles agrees with both Eric and MGP when displayed to more decimal places.
0.23181601187028375

If you're looking for a more exact value trust their figures. The float values should be reasonably close though.
 

iCountNTrack

Well-Known Member
#84
ericfarmer said:
I may be misinterpreting your stand/hit/double numbers, because I get different results, which I think we would all agree on. Following is from my CA using CDZ-, which matches MGP's:

Code:
Enter dealer up card and player hand (Ctrl-C to exit): 7 2 8 8

Stand      E(X) =  -48.949130472%
Hit        E(X) =  -39.512952734%
Double     E(X) =  -79.025905468%
Split      E(X) =   23.181601187%
While we're at it, though, I only see a single post-split departure from pre-split strategy with these rules/decks, namely 8-A-A-A-A-A-A-A-A (stand pre-split, hit post-split).
Oops my mistake, I used the wrong built that only supports a max of 78 cards total in the shoe. I am running the calculation right it will take about an hour, i will post the output and upload the new built, later on in the evening
 

iCountNTrack

Well-Known Member
#85
ericfarmer said:
I may be misinterpreting your stand/hit/double numbers, because I get different results, which I think we would all agree on. Following is from my CA using CDZ-, which matches MGP's:

Code:
Enter dealer up card and player hand (Ctrl-C to exit): 7 2 8 8

Stand      E(X) =  -48.949130472%
Hit        E(X) =  -39.512952734%
Double     E(X) =  -79.025905468%
Split      E(X) =   23.181601187%
While we're at it, though, I only see a single post-split departure from pre-split strategy with these rules/decks, namely 8-A-A-A-A-A-A-A-A (stand pre-split, hit post-split).
Okay so here are the "correct results" for 2 deck, S17/DAS 8,8 vs 7 1 split

Code:
player's probabilities for standing
p_-1 = 0.744745652361
p_0 = 0
p_+1= 0.255254347639
p_+1.5 = 0
EV for standing= -0.489491304722 ± 0.872008178059
 
player's probabilities for doubling
p_-2 = 0.668119041211
p_0 = 0.0588914449162
p_+2= 0.272989513873
EV for doubling= -0.790259054676 ± 1.77198330885
 
player's probabilities for hitting
p_-1 = 0.668119041211
p_0 = 0.0588914449162
p_+1= 0.272989513873
EV for hitting= -0.395129527338 ± 0.885991654424
 
player's probabilities for splitting
p_-4 = 0.00421343130167
p_-3 = 0.0514480797116
p_-2 = 0.186404139628
p_-1 = 0.109582723548
p_0 = 0.202591607242
p_+1= 0.11632277075
p_+2 = 0.229050215888
p_+3 = 0.0905663510976
p_+4 = 0.00982068083354
EV for splitting= 0.231816012009 ± 1.82665265565
Summary of Results:
0.231816012009 (ICNT)
0.231816011870 (K_C)
0.231816011870 (MGP)
0.23181601187 (Eric Farmer)

All three results agree because they are using CDz (please correct me if I am wrong). My post-split optimal EV calculation is only a part in 10 billions higher. That actually does make sense if we think about it. Sure there are card sequences where the optimal strategy would be different than the fixed strategies but there are many many more(Dr. Evil : why make billions? when we can make... millions) where the two strategies would be the same, so it is really hard to detect them when looking at the overall EV, this would be especially true as the number of decks is increased since more and more sequences could be generated.
To get a better feel of the optimal vs fixed strategy one needs to work with a small subset of cards , the difference will also increase as more splits are allowed.

So I looked at the following shoe composition
0, 4, 4, 2, 0, 0, 2, 0, 0, 7 (1 through 10)

differences are much more obvious for S17/DAS
2,2 vs 7

Summary of results:

//**********************
-0.598354284604 (split1, ICNT)
-0.603920440674 (split1, K_C)
-0.603920385170 (split1, MGP)

//**********************
-0.637591589163 (split2, ICNT)
-0.734130706787 (split2, K_C)
-0.734130637881 (split2, MGP)

//**********************
-0.637482846823 (split3, ICNT)
-0.762102279663 (split3, K_C)
-0.762102203352 (split3, MGP)

//**********************

It is clear from the above that post-split optimal strategy is more important for smaller subset of cards and as more splits are included. This is of no surprise since it is has been known since Thorp days that the fewer the cards we have, and the more cards are dealt (more rounds are played) the more we expect to gain from playing strategy adjustments

The build with multi-deck support is now uploaded

http://code.google.com/p/blackjack-combinatorial-analyzer/downloads/list
 
#86
iCountNTrack said:
It is clear from the above that post-split optimal strategy is more important for smaller subset of cards and as more splits are included. This is of no surprise since it is has been known since Thorp days that the fewer the cards we have, and the more cards are dealt (more rounds are played) the more we expect to gain from playing strategy adjustments
Thanks for running this case, this was another good check. I have committed and released a fix to my code that fixed some base case recursion issues that made these "small" shoes tricky for me. The update is at https://sites.google.com/site/erfarmer/downloads.

For reference if you are wanting to use it, following is an example snapshot of my clunky console strategy calculator that reproduces the above results for SPL3:

Code:
Blackjack Basic Strategy Calculator version 6.3
Copyright (C) 2011 Eric Farmer

Thanks to London Colin for many improvements and bug fixes.

This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to
redistribute it under certain conditions; see
gpl.txt for details.

Enter number of decks, or 0 to enter shoe: 0
Enter number of cards of each rank (1-10): 0 4 4 2 0 0 2 0 0 7
Enter 'Y' or 'y' if dealer hits soft 17: n
Enter 'Y' or 'y' if doubling down is allowed on any total: y
Enter 'Y' or 'y' if doubling down is allowed on soft hands: y
Enter 'Y' or 'y' if doubling down is allowed on any number of cards: n
Enter 'Y' or 'y' if doubling down is allowed after splitting pairs: y
Enter 'Y' or 'y' if resplitting pairs is allowed: y
Enter 'Y' or 'y' if resplitting aces is allowed: n
Enter 'Y' or 'y' if CDZ- (vs. CDP) post-split strategy is used: y
Enter 'Y' or 'y' if late surrender is allowed: n
Enter blackjack payoff (normally 1.5): 1.5

100% complete...

Enter output filename: strategy.txt

Enter dealer up card and player hand (Ctrl-C to exit): 7 2 2 2

Stand      E(X) =  -61.639194139%
Hit        E(X) =  -13.266733267%
Double     E(X) = -123.278388278%
Split      E(X) =  -76.210220335%
This has been a pretty fun and interesting problem. I actually went looking for small shoes for the opposite reason: to find a shoe that was (1) "well-behaved" enough to have no post-split strategy variations, so that we could all agree on results with our different options for what we compute; and (2) "small" enough that we could work out a lot of the EVs by hand if necessary as a sanity check.

I think I found one, and it created some very interesting behavior. Following is a tabulation of our various CA results for split hands for the following game (note that k_c and I seem to agree across the board here, using his console executable; k_c, please correct me if I am wrong):
Shoe(2,0,0,0,0,2,0,0,0,48), S17, DAS, SPL3, CDZ-

Code:
Overall EV:
                        Eric            ICNT            MGP
-------------------------------------------------------------------
                    40.933665774%       ---       41.0631329454859%

A-A vs. 6:
                        Eric            ICNT            MGP
-------------------------------------------------------------------
Stand      E(X) =  100.000000000%  1.0                Unavail
Hit        E(X) =  100.000000000%  1.0                Unavail
Double     E(X) =  200.000000000%  2.0                Unavail
Split      E(X) =  200.000000000%  4.0             2.0

A-A vs. 10:
                        Eric            ICNT            MGP
-------------------------------------------------------------------
Stand      E(X) =  -91.836734694% -0.918367346939 -0.9183673469388
Hit        E(X) =  -91.836734694% -0.918367346939 -0.9183673469388
Double     E(X) = -183.673469388% -1.83673469388  -1.8367346938776
Split      E(X) =  184.013605442%  3.44557823129   1.8401360544218

6-6 vs. A:
                        Eric            ICNT            MGP
-------------------------------------------------------------------
Stand      E(X) =  100.000000000% -0.959183673469  1.0
Hit        E(X) = -100.000000000% -1.0            -1.0
Double     E(X) = -200.000000000% -2.0            -2.0
Split      E(X) =  200.000000000% -1.91836734694   NaN

6-6 vs. 10:
                        Eric            ICNT            MGP
-------------------------------------------------------------------
Stand      E(X) = -100.000000000% -1.0            -1.0
Hit        E(X) = -100.000000000% -1.0            -1.0
Double     E(X) = -200.000000000% -2.0            -2.0
Split      E(X) = -200.000000000% -2.0            -2.0

10-10 vs. A:
                        Eric            ICNT            MGP
-------------------------------------------------------------------
Stand      E(X) =  100.000000000% -0.877551020408  1.0
Hit        E(X) =  -97.222222222% -0.998299319728 -0.9722222222222
Double     E(X) = -194.444444444% -1.99659863946  -1.9444444444444
Split      E(X) =  390.425531915% -1.94326241135   3.9042553191489

10-10 vs. 6:
                        Eric            ICNT            MGP
-------------------------------------------------------------------
Stand      E(X) =  100.000000000%  1.0             1.0
Hit        E(X) =  -91.836734694% -0.918367346939 -0.9183673469388
Double     E(X) = -183.673469388% -1.83673469388  -1.8367346938776
Split      E(X) =  421.891735418%  4.66190614981   4.2189173541757
There is a lot going on here. First, I suspect that MGP's difference in overall EV is due to the missing EVs for some hands, but I'm not sure. Also, my hope/guess is that there really are no post-split strategy variations here, but ICNT's split value for 10-10 vs. 6 makes me wonder. Can you shed any light on what lies under the hood of this value?

Finally, there is one other funky property of this shoe, that I think in some situations could make CDZ- potentially ambiguous! Consider the hand A-6 vs. dealer 10. In this shoe, E(stand) and E(hit) are both equal to -2209/2304 or approximately -0.958767361. (I verified this exact value in Mathematica.) This hand actually popped up in my analysis as the single potential post-split strategy variation, on the first half of splitting 6s. My CA thought pre-split strategy was to hit-- when in reality it is a toss-up and either is optimal-- but post-split was to stand. (The difference was an ulp, to be expected since the stand and hit values are computed in very different ways. FWIW, MGP's CA reverses this pre-split strategy, opting to stand instead of hit.)

Fortunately, in this particular case, post-split strategy was also a toss-up, since E(stand) and E(hit) are both -1, so it didn't matter. But it seems very possible that there exists some other shoe like this one, where pre-split EVs are the same (so pre-split strategy is not unique)... but post-split EVs differ depending on the arbitrary choice of pre-split strategy to use! I'll have to think about this some more...
 

iCountNTrack

Well-Known Member
#87
ericfarmer said:
Thanks for running this case, this was another good check. I have committed and released a fix to my code that fixed some base case recursion issues that made these "small" shoes tricky for me. The update is at https://sites.google.com/site/erfarmer/downloads.

For reference if you are wanting to use it, following is an example snapshot of my clunky console strategy calculator that reproduces the above results for SPL3:

Code:
Blackjack Basic Strategy Calculator version 6.3
Copyright (C) 2011 Eric Farmer

Thanks to London Colin for many improvements and bug fixes.

This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to
redistribute it under certain conditions; see
gpl.txt for details.

Enter number of decks, or 0 to enter shoe: 0
Enter number of cards of each rank (1-10): 0 4 4 2 0 0 2 0 0 7
Enter 'Y' or 'y' if dealer hits soft 17: n
Enter 'Y' or 'y' if doubling down is allowed on any total: y
Enter 'Y' or 'y' if doubling down is allowed on soft hands: y
Enter 'Y' or 'y' if doubling down is allowed on any number of cards: n
Enter 'Y' or 'y' if doubling down is allowed after splitting pairs: y
Enter 'Y' or 'y' if resplitting pairs is allowed: y
Enter 'Y' or 'y' if resplitting aces is allowed: n
Enter 'Y' or 'y' if CDZ- (vs. CDP) post-split strategy is used: y
Enter 'Y' or 'y' if late surrender is allowed: n
Enter blackjack payoff (normally 1.5): 1.5

100% complete...

Enter output filename: strategy.txt

Enter dealer up card and player hand (Ctrl-C to exit): 7 2 2 2

Stand      E(X) =  -61.639194139%
Hit        E(X) =  -13.266733267%
Double     E(X) = -123.278388278%
Split      E(X) =  -76.210220335%
This has been a pretty fun and interesting problem. I actually went looking for small shoes for the opposite reason: to find a shoe that was (1) "well-behaved" enough to have no post-split strategy variations, so that we could all agree on results with our different options for what we compute; and (2) "small" enough that we could work out a lot of the EVs by hand if necessary as a sanity check.

I think I found one, and it created some very interesting behavior. Following is a tabulation of our various CA results for split hands for the following game (note that k_c and I seem to agree across the board here, using his console executable; k_c, please correct me if I am wrong):
Shoe(2,0,0,0,0,2,0,0,0,48), S17, DAS, SPL3, CDZ-

Code:
Overall EV:
                        Eric            ICNT            MGP
-------------------------------------------------------------------
                    40.933665774%       ---       41.0631329454859%

A-A vs. 6:
                        Eric            ICNT            MGP
-------------------------------------------------------------------
Stand      E(X) =  100.000000000%  1.0                Unavail
Hit        E(X) =  100.000000000%  1.0                Unavail
Double     E(X) =  200.000000000%  2.0                Unavail
Split      E(X) =  200.000000000%  4.0             2.0

A-A vs. 10:
                        Eric            ICNT            MGP
-------------------------------------------------------------------
Stand      E(X) =  -91.836734694% -0.918367346939 -0.9183673469388
Hit        E(X) =  -91.836734694% -0.918367346939 -0.9183673469388
Double     E(X) = -183.673469388% -1.83673469388  -1.8367346938776
Split      E(X) =  184.013605442%  3.44557823129   1.8401360544218

6-6 vs. A:
                        Eric            ICNT            MGP
-------------------------------------------------------------------
Stand      E(X) =  100.000000000% -0.959183673469  1.0
Hit        E(X) = -100.000000000% -1.0            -1.0
Double     E(X) = -200.000000000% -2.0            -2.0
Split      E(X) =  200.000000000% -1.91836734694   NaN

6-6 vs. 10:
                        Eric            ICNT            MGP
-------------------------------------------------------------------
Stand      E(X) = -100.000000000% -1.0            -1.0
Hit        E(X) = -100.000000000% -1.0            -1.0
Double     E(X) = -200.000000000% -2.0            -2.0
Split      E(X) = -200.000000000% -2.0            -2.0

10-10 vs. A:
                        Eric            ICNT            MGP
-------------------------------------------------------------------
Stand      E(X) =  100.000000000% -0.877551020408  1.0
Hit        E(X) =  -97.222222222% -0.998299319728 -0.9722222222222
Double     E(X) = -194.444444444% -1.99659863946  -1.9444444444444
Split      E(X) =  390.425531915% -1.94326241135   3.9042553191489

10-10 vs. 6:
                        Eric            ICNT            MGP
-------------------------------------------------------------------
Stand      E(X) =  100.000000000%  1.0             1.0
Hit        E(X) =  -91.836734694% -0.918367346939 -0.9183673469388
Double     E(X) = -183.673469388% -1.83673469388  -1.8367346938776
Split      E(X) =  421.891735418%  4.66190614981   4.2189173541757
There is a lot going on here. First, I suspect that MGP's difference in overall EV is due to the missing EVs for some hands, but I'm not sure. Also, my hope/guess is that there really are no post-split strategy variations here, but ICNT's split value for 10-10 vs. 6 makes me wonder. Can you shed any light on what lies under the hood of this value?

Finally, there is one other funky property of this shoe, that I think in some situations could make CDZ- potentially ambiguous! Consider the hand A-6 vs. dealer 10. In this shoe, E(stand) and E(hit) are both equal to -2209/2304 or approximately -0.958767361. (I verified this exact value in Mathematica.) This hand actually popped up in my analysis as the single potential post-split strategy variation, on the first half of splitting 6s. My CA thought pre-split strategy was to hit-- when in reality it is a toss-up and either is optimal-- but post-split was to stand. (The difference was an ulp, to be expected since the stand and hit values are computed in very different ways. FWIW, MGP's CA reverses this pre-split strategy, opting to stand instead of hit.)

Fortunately, in this particular case, post-split strategy was also a toss-up, since E(stand) and E(hit) are both -1, so it didn't matter. But it seems very possible that there exists some other shoe like this one, where pre-split EVs are the same (so pre-split strategy is not unique)... but post-split EVs differ depending on the arbitrary choice of pre-split strategy to use! I'll have to think about this some more...
Wow, thanks for the very detailed analysis :). This has been a very interesting study.
But to answer your question about strategy variation, instead of looking at 10,10 vs 6, we can look at 1,1 vs 6 instead.

Your CA and that of MGP report a value of 200% for EV while mine gives 400%. That is because the optimal play on each split hand after the split would be to double and the variance on that is zero. Apparently the CDz is failing to detect that the only optimal play after split in this case is to always double.
For 1 and 10 it is actually a ENHC that is why my CA generates the value. I will need to modify to input to allow the user to choose that (sorry about the confusion).

There are something funny with 10,10 that i am not happy about I will need to investigate that a little more. It is really hard to debug the code since you can to track the cards as they are dealt and it is tedious and boring
 
#88
iCountNTrack said:
Wow, thanks for the very detailed analysis :). This has been a very interesting study.
But to answer your question about strategy variation, instead of looking at 10,10 vs 6, we can look at 1,1 vs 6 instead.

Your CA and that of MGP report a value of 200% for EV while mine gives 400%. That is because the optimal play on each split hand after the split would be to double and the variance on that is zero. Apparently the CDz is failing to detect that the only optimal play after split in this case is to always double.
For 1 and 10 it is actually a ENHC that is why my CA generates the value. I will need to modify to input to allow the user to choose that (sorry about the confusion).
Yeah, when I first saw the 200/400% difference, doubling occurred to me as well, and I started poking around in my code looking for why it was missing that option... until I realized that we are splitting aces, after which hitting-- or doubling-- is not allowed.
 

iCountNTrack

Well-Known Member
#89
ericfarmer said:
Yeah, when I first saw the 200/400% difference, doubling occurred to me as well, and I started poking around in my code looking for why it was missing that option... until I realized that we are splitting aces, after which hitting-- or doubling-- is not allowed.
My bad again, I think I need to document my code better. The cold itself has all the different rules but current build only allows certain inputs to be changed: S17/H17 , hole card play or no hole card play, and number of splits. The following are the default rules. That currently are to possible for the the user to change
ENHC (this will only make a difference for ace and 10)
DAS ( always allowed including for aces)

It seems to me at this stage that all CDz splits are agreeing more or less, but what I would like to check my post-split optimal EVs against an independent CA for a select shoe compositin. Somewhere where there is a strategy variation. Ken, K_C, Eric, MGP anyone else?
 
#90
iCountNTrack said:
It seems to me at this stage that all CDz splits are agreeing more or less, but what I would like to check my post-split optimal EVs against an independent CA for a select shoe compositin. Somewhere where there is a strategy variation. Ken, K_C, Eric, MGP anyone else?
I think there are still some outstanding CDZ- problems as well. In addition to the (2,0,0,0,0,2,0,0,0,48) shoe mentioned above, I also see values from MGP that I don't think I agree with for the earlier shoe (1,1,1,1,1,1,1,4,4,8). The largest departure that I found was 10-10 vs. 7, yielding 0.8006101986249 from MGP, and 1.09962642277 from my CA, as well as k_c's (at least to his reported number of digits). But I suspect that fixing the problems with the former will probably also solve the latter.

Unfortunately, I am probably not much help to you with validating your optimal post-split calculations. My CA splitting algorithm is rather intimately optimized to support only strategies that are (or are not) a function of the number of additional pair cards removed. This means CDZ-, CDP, and more recently CDP1.

One thought, though: are you able to compute optimal strategy for a particular shoe, then compute the expected value of applying that same strategy to another different shoe? If so, then a quick and dirty "one-sided" test of correctness is to compute average effect of removal: if it's not zero, then your algorithm must be incorrect, and you can go bug-hunting :). (For example, before my update from a few weeks ago, I could use this approach to essentially "prove" that my earlier split approximation algorithm was just that, an incorrect approximation.)

A couple of caveats: (1) of course, if the average EOR is zero, then that doesn't guarantee that your algorithm is working. And (2) this only works if the strategy used to play each of the different removal shoes is the same, which you may or may not be able to easily implement.
 

iCountNTrack

Well-Known Member
#91
The plot is thickening

VERY WEIRD:
0 0 0 0 0 4 4 4 4 6 (1 through 10)

6, 6 vs 8 (S17/DAS)


-0.131578947368 (ICNT 1 split)
-0.131579055786 (K_C 1 split)
-0.412280701754 (MGP 1 split)
-0.13157894737 (Eric 1 split)

-0.279022491349 (ICNT 2 splits)
-0.294908962250 (K_C 2 splits)
-0.332748538012 (MGP 2 splits)
Could not figure how to do 2 splits with Eric's

-0.279022491349 (ICNT 3 splits)
-0.322428741455 (K_C 3 splits)
-0.322428620571 (MGP 3 splits)
-0.32242862057 (Eric 3 splits)


Any thoughts? this is really weird
 

k_c

Well-Known Member
#92
iCountNTrack said:
VERY WEIRD:
0 0 0 0 0 4 4 4 4 6 (1 through 10)

6, 6 vs 8 (S17/DAS)


-0.131578947368 (ICNT 1 split)
-0.131579055786 (K_C 1 split)
-0.412280701754 (MGP 1 split)
-0.13157894737 (Eric 1 split)

-0.279022491349 (ICNT 2 splits)
-0.294908962250 (K_C 2 splits)
-0.332748538012 (MGP 2 splits)
Could not figure how to do 2 splits with Eric's

-0.279022491349 (ICNT 3 splits)
-0.322428741455 (K_C 3 splits)
-0.322428620571 (MGP 3 splits)
-0.32242862057 (Eric 3 splits)


Any thoughts? this is really weird
If you used CDZ- then I have no value to compare with MGP or Eric for less than a full shoe. They both compute a new pre-split strategy for less than a full shoe whereas I only have the option to compute using my most optimal method or to use full shoe basic CD strategy. If basic strategy is used then splits can be computed using full shoe pre-split strategy or the full shoe post split strategy of the first split hand. Maybe you could call it CDBS- and CDBS+.

For a full shoe my basic pre-split strategy is the same as CDZ- but only for a full shoe.
 
#93
iCountNTrack said:
VERY WEIRD:
0 0 0 0 0 4 4 4 4 6 (1 through 10)

6, 6 vs 8 (S17/DAS)


-0.131578947368 (ICNT 1 split)
-0.131579055786 (K_C 1 split)
-0.412280701754 (MGP 1 split)
-0.13157894737 (Eric 1 split)

-0.279022491349 (ICNT 2 splits)
-0.294908962250 (K_C 2 splits)
-0.332748538012 (MGP 2 splits)
Could not figure how to do 2 splits with Eric's

-0.279022491349 (ICNT 3 splits)
-0.322428741455 (K_C 3 splits)
-0.322428620571 (MGP 3 splits)
-0.32242862057 (Eric 3 splits)


Any thoughts? this is really weird
I get -0.29490884073 for SPL2; this option is not available in the pre-built executable, but it is available in the code; I can provide an example if anyone wants to know how to do this. (Actually, you can specify a different maximum number of hands for each split rank. I have no idea why this would be useful, but it was easy to do.)

I think the weirdness may be confined to the MGP values, and then only for CDZ-. I do note that the CDP/CDPN values seem to be more well-behaved; they match with my values (which for this hand do not change between CDZ-/CDP/CDP1).

Aside from that, this scenario mostly makes sense. Or rather, it doesn't not make sense :). I expect your values to consistently be greater than or equal to mine, since I have strictly less expressive power in what information is available when making strategy decisions. The only thing I still do not quite understand are the various strategy options for k_c, and the resulting typically-small differences in EVs. Maybe he can explain his available options in more detail?
 

k_c

Well-Known Member
#94
ericfarmer said:
I get -0.29490884073 for SPL2; this option is not available in the pre-built executable, but it is available in the code; I can provide an example if anyone wants to know how to do this. (Actually, you can specify a different maximum number of hands for each split rank. I have no idea why this would be useful, but it was easy to do.)

I think the weirdness may be confined to the MGP values, and then only for CDZ-. I do note that the CDP/CDPN values seem to be more well-behaved; they match with my values (which for this hand do not change between CDZ-/CDP/CDP1).

Aside from that, this scenario mostly makes sense. Or rather, it doesn't not make sense :). I expect your values to consistently be greater than or equal to mine, since I have strictly less expressive power in what information is available when making strategy decisions. The only thing I still do not quite understand are the various strategy options for k_c, and the resulting typically-small differences in EVs. Maybe he can explain his available options in more detail?
I don't know for sure but I think icnt is probably using a .dll version of the program inside of another program. The .dll he has uses floats rather than doubles.

The basic strategy option simply uses full shoe strategy for a less than full shoe composition.
 

iCountNTrack

Well-Known Member
#95
ericfarmer said:
I get -0.29490884073 for SPL2; this option is not available in the pre-built executable, but it is available in the code; I can provide an example if anyone wants to know how to do this. (Actually, you can specify a different maximum number of hands for each split rank. I have no idea why this would be useful, but it was easy to do.)

I think the weirdness may be confined to the MGP values, and then only for CDZ-. I do note that the CDP/CDPN values seem to be more well-behaved; they match with my values (which for this hand do not change between CDZ-/CDP/CDP1).

Aside from that, this scenario mostly makes sense. Or rather, it doesn't not make sense :). I expect your values to consistently be greater than or equal to mine, since I have strictly less expressive power in what information is available when making strategy decisions. The only thing I still do not quite understand are the various strategy options for k_c, and the resulting typically-small differences in EVs. Maybe he can explain his available options in more detail?
well your CA and mine only give the same results for one split, for two and splits my EVs are less negative i.e it is higher. Well the weirdness in the results unless i am missing something, isnt it weird that split1EV>split2EV>split3EV ??
 
#96
k_c said:
If you used CDZ- then I have no value to compare with MGP or Eric for less than a full shoe. They both compute a new pre-split strategy for less than a full shoe whereas I only have the option to compute using my most optimal method or to use full shoe basic CD strategy. If basic strategy is used then splits can be computed using full shoe pre-split strategy or the full shoe post split strategy of the first split hand. Maybe you could call it CDBS- and CDBS+.

For a full shoe my basic pre-split strategy is the same as CDZ- but only for a full shoe.
Ah, I think I understand better now. And I think I can reproduce your results for those cases; this idea of taking a strategy optimized for one shoe and applying it to a different shoe is one of the things that I wanted to make easy in my CA.

For example, following is what I get for CDBS-, assuming that by "full shoe" you mean a single deck (since this is not well-defined without more information). These values match your console CA to the number of digits you provide... and the difference is striking:

E(split) for 6-6 vs. 8:
-106.690746474% for SPL1
-137.994496044% for SPL2
-143.154454764% for SPL3

So at this point I think I am only still confused by what your "optimal strategy" option is doing. That is, is it CDZ- (hopefully not, since otherwise at least one of us is missing the mark), or optimal (accounting for all cards in the round, which is what I think ICNT is doing), or something in between like CDP/CDP1/CDPN?
 
#97
iCountNTrack said:
well your CA and mine only give the same results for one split, for two and splits my EVs are less negative i.e it is higher. Well the weirdness in the results unless i am missing something, isnt it weird that split1EV>split2EV>split3EV ??
Ok, I think I see your point. I think we have a partial answer, though: it is important to remember that, in my and MGP's case at least (and I think for k_c's as well?), and for CDZ-/CDP/CDP1/CDPN in general, SPLn means that strategy is to always split at every opportunity up to n times, even if splitting another pair is not necessarily optimal. So at least for all results but yours :), it is certainly possible that SPL1 > SPL2 > SPL3.

Along these same lines, your SPL2 == SPL3, which seems to suggest that optimal strategy is to never bother splitting a third pair if you encounter one. Sounds good to me.

But you're right, that still leaves the question why is your SPL1 > SPL2(=SPL3)? That is, why not just play the SPL2 game as if you were confined to SPL1, especially since you seem to be doing just that by playing SPL3 as if you were confined to SPL2?
 

k_c

Well-Known Member
#98
ericfarmer said:
Ah, I think I understand better now. And I think I can reproduce your results for those cases; this idea of taking a strategy optimized for one shoe and applying it to a different shoe is one of the things that I wanted to make easy in my CA.

For example, following is what I get for CDBS-, assuming that by "full shoe" you mean a single deck (since this is not well-defined without more information). These values match your console CA to the number of digits you provide... and the difference is striking:

E(split) for 6-6 vs. 8:
-106.690746474% for SPL1
-137.994496044% for SPL2
-143.154454764% for SPL3

So at this point I think I am only still confused by what your "optimal strategy" option is doing. That is, is it CDZ- (hopefully not, since otherwise at least one of us is missing the mark), or optimal (accounting for all cards in the round, which is what I think ICNT is doing), or something in between like CDP/CDP1/CDPN?
Firstly my most optimal strategy for any shoe composition is what you have beeen calling CDP1. Non-splits are optimal and splits are computed by fixing split hand strategy as the optimal strategy of the first split hand for whatever the existing composition of the shoe is. (What I call) best strategy or optimal for the program is the default, but it is not truly "optimal," but just a reasonable estimate of it. This is due to settling for a fixed strategy method of computing splits that is mathematically correct but still a bit sub-optimal. I'm sure you already know this.

For basic strategy non-split hands are played according to full shoe non-split hand strategy, regardless of what the existing composition is. For example a hand of 5-5-5 versus 10 single deck will be marked with a strategy of stand regardless of shoe composition if basic strategy is chosen. But say the composition is such that hit EV > stand EV. Then the strategy is marked as *stand which is a visual clue that the stand EV will be used in computing overall EV even though it isn't the best play.

That leaves the question of how to play splits when basic strategy is chosen. There are 2 choices: 1) use full shoe non-split hand strategy; 2) use optimal full shoe strategy of the first split hand. The key is that either of these choices are full shoe strategies. In contrast if optimal strategy is chosen then non-splits are computed optimally and the optimal strategy of the first split hand is used whether the shoe is full or depleted. It is more optimal than basic strategy because more information is considered. If a shoe happens to be full then optimal strategy and basic strategy using the optimal strategy of the first split hand amount to the same thing.

A user of my program needs to specify 1 to 41297762 decks. Default is one. That number of decks defines what basic (full shoe) strategy is. If number of decks or rules is changed basic strategy is recomputed if necessary.

Hope this clarifies things a bit.
 
#99
k_c said:
Firstly my most optimal strategy for any shoe composition is what you have beeen calling CDP1. Non-splits are optimal and splits are computed by fixing split hand strategy as the optimal strategy of the first split hand for whatever the existing composition of the shoe is. (What I call) best strategy or optimal for the program is the default, but it is not truly "optimal," but just a reasonable estimate of it. This is due to settling for a fixed strategy method of computing splits that is mathematically correct but still a bit sub-optimal. I'm sure you already know this.

For basic strategy non-split hands are played according to full shoe non-split hand strategy, regardless of what the existing composition is. For example a hand of 5-5-5 versus 10 single deck will be marked with a strategy of stand regardless of shoe composition if basic strategy is chosen. But say the composition is such that hit EV > stand EV. Then the strategy is marked as *stand which is a visual clue that the stand EV will be used in computing overall EV even though it isn't the best play.

That leaves the question of how to play splits when basic strategy is chosen. There are 2 choices: 1) use full shoe non-split hand strategy; 2) use optimal full shoe strategy of the first split hand. The key is that either of these choices are full shoe strategies. In contrast if optimal strategy is chosen then non-splits are computed optimally and the optimal strategy of the first split hand is used whether the shoe is full or depleted. It is more optimal than basic strategy because more information is considered. If a shoe happens to be full then optimal strategy and basic strategy using the optimal strategy of the first split hand amount to the same thing.

A user of my program needs to specify 1 to 41297762 decks. Default is one. That number of decks defines what basic (full shoe) strategy is. If number of decks or rules is changed basic strategy is recomputed if necessary.

Hope this clarifies things a bit.
Yes, that was very clear, thanks! I did a quick spot-check with a full single deck, where CDZ-, CDP1, and CDP actually differ (vs. dealer 2 is a good place to look for differences). We agree across the board, where your optimal strategy corresponds to my CDP1 option. Cool!
 

k_c

Well-Known Member
ericfarmer said:
Yes, that was very clear, thanks! I did a quick spot-check with a full single deck, where CDZ-, CDP1, and CDP actually differ (vs. dealer 2 is a good place to look for differences). We agree across the board, where your optimal strategy corresponds to my CDP1 option. Cool!
In my program the only place I compute CDZ- is for a full shoe. In order to compute my only instance of CDZ- basic strategy must be selected along with the option to compute splits using "pre-split" strategy. The mechanics of doing this in my program are to select Set/Reset compute mode, press b or B for basic strategy, and press p or P for use pre-split strategy. If enter or any other key is pressed after b or B for basic strategy is pressed, this sets the basic strategy for computing splits to something different, which is to use the full shoe optimal strategy of the first split as "basic strategy" for split hands.

When I do this we agree across the board for 3 splits single deck versus a dealer 2 for a full shoe.

Anyway I think we agree on the values which are common to both programs and as you said, Cool!
 
Top