Edit: I hate this formatting. Trying to make it better by using bold.
I made a small computer program to run simulations for me testing overall profit over a certain number of
hands for different scenarios of bankroll management. The results were not obvious to me.
The set-up is this:
1. Both players start with a "bankroll" of $100.
2. The games that the players play are "perfectly" suited to the size of their bankroll, i.e. they play every hand in a game where the ante is exactly 0.1% of their bankroll (1/1,000).
3. Every time that our hero (either player) finds himself with a hand that's better than a certain percent to win, he will push his entire stack in. His stack is always 5% of his bankroll.
4. Player 1 ("Risky") takes any bet where he is better than 50% to win.
5. Player 2 ("Safe") takes only bets where he is better than 55% to win.
Despite running this simulation over a decent number of iterations, the outcome is that the safer player is only slightly worse off than the risky player in total profits.
This is the output from 10 runs (of 100k hands each):
Risky Safe Diff in %
313149 309163 1,29%
309757 306176 1,17%
314013 309279 1,53%
314438 309671 1,54%
312163 306739 1,77%
316233 312142 1,31%
313808 307914 1,91%
313689 310451 1,04%
314725 310704 1,29%
315317 313456 0,59%
Average Profit for Risky: 313729,2
Average Profit for Safe: 309569,5
Averager Difference in percent: 1,35%
In other words: Despite taking considerably less risk (demanding a 55% edge instead of any even-money proposal), the difference between the two players is less than 1.35% in the end. How much it would differ in psychological pressure between the two players, I don't know. Whether or not my simulation is good for anything at all (or even properly set-up) I don't really know either. I was curious at the time.
For those curious as to how I coded it, see below. The indentation gets messed up when I pasted it here, but you can figure that out for yourselves.
#define MAX_NUM 100
#define ITERATIONS 100
#define BANKROLL 100
#define BETSIZE 20
#define ANTE 1000
void Run()
{
double fRisky = BANKROLL, fSafe = BANKROLL;
int nHeroRoll, nVillainRoll;
int nRiskyTotal = 0, nSafeTotal = 0;
srand(GetTickCount());
int nRiskyMillion = 0, nSafeMillion = 0;
for(int a = 0; a < 1000; a++)
{
fRisky = BANKROLL;
fSafe = BANKROLL;
for(int i = 0; i < ITERATIONS; i++)
{
fRisky -= fRisky/ANTE;
fSafe -= fSafe/ANTE;
nHeroRoll = rand()%MAX_NUM;
nVillainRoll = rand()%MAX_NUM;
// Risky first.
if(nHeroRoll >= (int)((MAX_NUM-1) * 0.5))
{
if(nHeroRoll > nVillainRoll)
fRisky += fRisky / BETSIZE;
else if (nHeroRoll < nVillainRoll)
fRisky -= fRisky / BETSIZE;
// In the odd case that they're equal, nothing happens.
}
// Safe now
if(nHeroRoll > (int)((MAX_NUM-1) * 0.55))
{
if(nHeroRoll > nVillainRoll)
fSafe += fSafe / BETSIZE;
else if (nHeroRoll < nVillainRoll)
fSafe -= fSafe / BETSIZE;
// In the odd case that they're equal, nothing happens.
}
}
nRiskyTotal += (int)fRisky;
nSafeTotal += (int)fSafe;
}
char szBuf[1024];
sprintf(szBuf, "Risky: %d, Safe: %d", nRiskyTotal, nSafeTotal);
AfxMessageBox(szBuf, MB_OK | MB_TOPMOST, 0);
}