Zur Zeit versuche ich zu portieren Keith Rule Texas Holdem Hand Evaluator nach Omaha Hallo:Omaha Hallo Hand Evaluator
Nach mehr über das Denken Algorithmus, fand ich eine Lösung, die mir die richtigen Prozentsätze für die Hände gibt und alles in Ordnung ist.
Aber es ist wirklich sehr langsam. Wie kann ich die Dinge beschleunigen?
Als einzige Sache, die ich gerade mache, ist eine normale Fünf-Karten-Hände zu suchen, eine LUT könnte für mich richtig sein. Wer hat schon mal einen integriert?
static void Main(string[] args)
{
long count = 0;
double player1win = 0.0, player2win=0.0;
ulong player1 = Hand.ParseHand("Ad Kd As Ks");
ulong player2 = Hand.ParseHand("Th 5c 2c 7d");
foreach (ulong board in Hand.Hands(0, player1 | player2, 5))
{
uint maxplayer1value = 0, maxplayer2value = 0;
foreach (ulong boardcards in Hand.Hands(0, ulong.MaxValue^board, 3))
{
foreach (ulong player1hand in Hand.Hands(0Ul, ulong.MaxValue^player1, 2))
{
uint player1value = Hand.Evaluate(player1hand | boardcards, 5);
if (player1value > maxplayer1value) maxplayer1value = player1value;
}
}
foreach (ulong boardcards in Hand.Hands(0, ulong.MaxValue^board, 3))
{
foreach (ulong player2hand in Hand.Hands(0UL, ulong.MaxValue^player2, 2))
{
uint player2value = Hand.Evaluate(player2hand | boardcards, 5);
if (player2value > maxplayer2value) maxplayer2value = player2value;
}
}
if (maxplayer1value > maxplayer2value)
{
player1win += 1.0;
}
else if (maxplayer2value > maxplayer1value)
{
player2win += 1.0;
}
else
{
player1win += 0.5;
player2win += 0.5;
}
count++;
}
Console.WriteLine("Player1: {0:0.0000} Player2: {1:0.0000} Count: {2}", player1win/count * 100, player2win/count * 100, count);
Console.ReadLine();
}