Skip to content

Commit

Permalink
Run multiple Omama sims on same config
Browse files Browse the repository at this point in the history
  • Loading branch information
EluciusFTW committed Feb 20, 2022
1 parent 871ddcc commit f44bee8
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 26 deletions.
2 changes: 1 addition & 1 deletion src/CardGames.Core.French/Cards/Card.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace CardGames.Core.French.Cards
{
public class Card : IEquatable<Card>
public sealed class Card : IEquatable<Card>
{
public Suit Suit { get; }

Expand Down
4 changes: 2 additions & 2 deletions src/CardGames.Playground.Runner/HoldemSimulationBenchmarks.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ namespace CardGames.Poker.Benchmarks
public class HoldemSimulationBenchmarks
{
[Benchmark]
public HoldemSimulationResult HoldemHeadsUp100Hands()
public static HoldemSimulationResult HoldemHeadsUp100Hands()
=> new HoldemSimulation()
.WithPlayer("James", "8s 6d".ToCards())
.WithPlayer("Jimmy", "Ad Kd".ToCards())
.WithFlop("3h 6c Qd".ToCards())
.SimulateWithFullDeck(100);

[Benchmark]
public HoldemSimulationResult HoldemFiveHanded100Hands()
public static HoldemSimulationResult HoldemFiveHanded100Hands()
=> new HoldemSimulation()
.WithPlayer("Jill", "Qh Td".ToCards())
.WithPlayer("Jonas", "8s 9d".ToCards())
Expand Down
6 changes: 6 additions & 0 deletions src/CardGames.Playground/Simulations/Omaha/OmahaSimulation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ public OmahaSimulation WithPlayer(OmahaPlayer player)
return this;
}

public OmahaSimulation WithPlayers(IEnumerable<OmahaPlayer> players)
{
players.ForEach(player => _players.Add(player));
return this;
}

public OmahaSimulation WithFlop(IReadOnlyCollection<Card> flopCards)
{
if (flopCards.Count != 3)
Expand Down
72 changes: 49 additions & 23 deletions src/CardGames.Poker.CLI/Simulation/OmahaSimulationCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,55 +7,82 @@
using System.Collections.Generic;
using System.Linq;
using CardGames.Poker.Simulations.Omaha;
using CardGames.Core.French.Cards;

namespace CardGames.Poker.CLI.Simulation
{
internal class OmahaSimulationCommand : Command<SimulationSettings>
{
private static readonly SpectreLogger Logger = new();

private int _nrOfHands;
private IList<OmahaPlayer> _players = new List<OmahaPlayer>();
private IReadOnlyCollection<Card> _flop = new List<Card>();
private Card _turn = default;

public override int Execute(CommandContext context, SimulationSettings settings)
{
Logger.LogApplicationStart();
do
{
CollectData(settings);
var simulation = CreateSimulation();
var results = RunSimulation(simulation);
EvaluateResults(results);
} while (AnsiConsole.Confirm("Do you want to run another simulation?"));

var simulation = ConfigureSimulation();
var numberOfHands = settings.NumberOfHands == default
? AnsiConsole.Ask<int>("How many hands?")
: settings.NumberOfHands;
return 0;
}

var results = AnsiConsole.Status()
.Spinner(Spinner.Known.Arrow3)
.Start("Simulating ... ", ctx => simulation.SimulateWithFullDeck(numberOfHands).ToList());
private OmahaSimulation CreateSimulation()
{
var simulation = new OmahaSimulation()
.WithPlayers(_players);

AnsiConsole.Status()
.Spinner(Spinner.Known.Arrow3)
.Start("Evaluating ... ", ctx => PrintResults(results));
if (_flop.Any())
{
simulation.WithFlop(_flop);
}

return 0;
if (_turn != default)
{
simulation.WithTurn(_turn);
}
return simulation;
}

private static OmahaSimulation ConfigureSimulation()
private void EvaluateResults(List<IDictionary<string, OmahaHand>> results)
=> AnsiConsole
.Status()
.Spinner(Spinner.Known.Arrow3)
.Start("Evaluating ... ", _ => PrintResults(results));


private List<IDictionary<string, OmahaHand>> RunSimulation(OmahaSimulation simulation)
=> AnsiConsole
.Status()
.Spinner(Spinner.Known.Arrow3)
.Start("Simulating ... ", _ => simulation.SimulateWithFullDeck(_nrOfHands).ToList());

private void CollectData(SimulationSettings settings)
{
var simulation = new OmahaSimulation();
do
{
simulation.WithPlayer(GetPlayer());
_players.Add(GetPlayer());
}
while (AnsiConsole.Confirm("Do you want to add another player?"));

Logger.Paragraph("Add Details");
var flop = Prompt.PromptForCards("Flop: ", 3, false);
if (flop.Any())
{
simulation.WithFlop(flop);
var turn = Prompt.PromptForCard("Turn: ");
if (turn != default)
{
simulation.WithTurn(turn);
}
_flop = flop;
_turn = Prompt.PromptForCard("Turn: ");
}

return simulation;

_nrOfHands = settings.NumberOfHands == default
? AnsiConsole.Ask<int>("How many hands?")
: settings.NumberOfHands;
}

private static OmahaPlayer GetPlayer()
Expand All @@ -77,4 +104,3 @@ private static void PrintResults(IReadOnlyCollection<IDictionary<string, OmahaHa
.ForEach(artefact => Logger.LogArtefact(artefact));
}
}

0 comments on commit f44bee8

Please sign in to comment.