static void CompareStrategies()
{
Random masterRandom = new NPack.MersenneTwister();
Random random1 = new NPack.MersenneTwister();
Random random2 = new NPack.MersenneTwister();
Rules rules = new Rules {
Decks = 8, MinBet = 100, MaxBet = 20000, Splits = 3
};
int max_bet = 5000;
double pp_multiplier = 4.0;
double ev_cutoff = 0.0015;
DiffStrategy b1 = new DiffStrategy(
new SuperOptStrategy(max_bet, ev_cutoff, pp_multiplier),
new OptStrategy(max_bet, ev_cutoff, pp_multiplier)
);
OptStrategy b2 = new OptStrategy(max_bet, ev_cutoff, pp_multiplier);
Game game1 = new Game(rules, b1, pp_multiplier, random1);
Game game2 = new Game(rules, b2, pp_multiplier, random2);
int runs = 0;
double expected = 0;
double expected_diff = 0;
int diff_count = 0;
while (true)
{
if (runs % 1000 == 0)
{
double total1 = TotalMoney(game1);
double total2 = TotalMoney(game2);
Console.WriteLine();
Console.WriteLine("Runs: {0}", runs);
Console.WriteLine("Expected total: $ {0:0.00}", expected);
Console.WriteLine("SuperOpt total: $ {1:0.00} ({2:0.00} c/hand)", b1.GetType(), total1, total1 * 100.0 / (double)runs);
Console.WriteLine("Opt total: $ {1:0.00} ({2:0.00} c/hand)", b2.GetType(), total2, total2 * 100.0 / (double)runs);
Console.WriteLine("Different choices: {0:0} ({1:0.00}%)", diff_count, 100.0 * diff_count / (double)runs);
Console.WriteLine("Difference: $ {0:0.00}", total1 - total2);
Console.WriteLine("Expected difference: $ {0:0.00}", expected_diff);
TextWriter writer = new StreamWriter("compare.txt", true);
writer.WriteLine(string.Format("{0} {1} {2} {3}", runs, expected, TotalMoney(game1), TotalMoney(game2)));
writer.Close();
}
int seed = masterRandom.Next();
game1.Random = new NPack.MersenneTwister(seed);
game2.Random = new NPack.MersenneTwister(seed);
game1.ResetShoe();
game2.ResetShoe();
int remove_count = masterRandom.Next(84);
game1.RemoveCards(remove_count);
game2.RemoveCards(remove_count);
expected += b1.ShoeEV() * b1.Bet(game1) / 100.0;
game1.StartRound();
game2.StartRound();
game1.DealRound();
game2.DealRound();
if (b1.IsDiff)
{
expected_diff += game1.Bet * b1.Diff / 100.0;
diff_count++;
b1.IsDiff = false;
}
runs++;
}
}