
Originally Posted by
Cacarulo
This is what I get now for ENHC:
Code:
Standing = -56.65807149255014% | -56.65807149255014%
Hitting = -22.12141526286563% | -22.12141526286563%
Doubling = -58.83294803078072% | -58.83294803078072%
Surrender = -50.00000000000000% | -53.06122448979592%
Note that the conditional values can be used for ES and the unconditional values for LS.
Do we agree now?
Sincerely,
Cac
Conditional late surrender EV is always -.5. Conditional or unconditional early surrender EV is always -.5.
Conditional EVs can be used to determine strategy (if not no peek) but at some point the fact that dealer may have BJ must be taken into consideration so in that sense they are not permanent. Unconditional EVs can be used to compute strategy as well and are the actual value of the hand. Below computes unconditional EV given conditional EV is known, which is the way traditionally done.
let cev = conditional EV assuming dealer does not have BJ
let ucev = unconditional EV where player non-BJ loses to dealer BJ
let PDBJ = probability of dealer BJ
Code:
peek no peek
stand ucev = cev - pDBJ*(1 + cev) ucev = cev - pDBJ*(1 + cev)
hit ucev = cev - pDBJ*(1 + cev) ucev = cev - pDBJ*(1 + cev)
double ucev = cev - pDBJ*(1 + cev) ucev = cev - pDBJ*(2 + cev)
split ucev = cev - pDBJ*(1 + cev) ucev = cev - pDBJ*(num expected hands + cev)
late surrender ucev = cev - pDBJ*(1 + cev) ucev = cev - pDBJ*(1 + cev)
early surrender ucev = -.5 ucev = -.5
LS cev = -.5 for both peek & no peek
ES cev = ucev = -.5 for both peek & no peek
In order to compute num expected hands for splits recursive function could be used.
Code:
pCards = number of pair cards which is always initially 2
remSp = number of remaining splits = number of allowed splits - 1
p = number of pair cards present after initial pair and up card have been dealt
np = number of non-pair cards present after initial pair and up card have been dealt
double getSplitHands(const int &pCards, const int &remSp, const int &p, const int &np)
{
if (p == 0 || remSp == 0)
return double(pCards);
double hands;
double pP = double(p) / (p + np);
if (pCards >= 2) {
hands = pP * getSplitHands(pCards + 1, remSp - 1, p - 1, np);
hands += (1 - pP) * (getSplitHands(pCards - 1, remSp, p, np - 1) + 1);
}
else { // if (pCards == 1)
hands = pP * getSplitHands(2, remSp - 1, p - 1, np);
hands += (1 - pP);
}
return hands;
}
Example 8-8 versus T single deck:
p=2, np=47
allowed splits = 1, remSp=0; hands = getSplitHands(2,0,2,47) = 2
allowed splits = 2, remSp=1; hands = getSplitHands(2,1,2,47) = 2.0807823129
allowed splits = 3, remSp=2; hands = getSplitHands(2,2,2,47) = 2.0850340136
What I do is to initially compute unconditional EVs. All strategies can be determined from this. It is unnecessary to use conditional EVs but I can compute then from the unconditional EVs and that's what I do to relate.
k_c
Bookmarks