![]() |
#181
|
|||
|
|||
![]()
I am building a bot for two player games only at the moment. So the multiple players aren't an obstacle.
If I did have multiple opponents couldn't I just take the probability to the power of how many players there are and still have fairly good estimate? Thomas |
#182
|
|||
|
|||
![]()
That would be a reasonable estimate, but because the opponents hands are independant of each other the numbers will not be exact.
|
#183
|
|||
|
|||
![]()
I assume you mean because opponents hands are NOT independent of each other the numbers will not be exact.
Thomas |
#184
|
|||
|
|||
![]()
Sorry, my mistake, you are right, because they are not independant it means powering will be incorrect.
I am hopefully going to run some exhaustive analysis on 2 opponents to see exactly how inaccurate powering down will be, although that will entail: (50 choose 5) * (45 choose 2) * (43 choose 2) = 1,894,107,877,200 game simulations (1.8 trillion), so would take a reasonable amount of time to compute on a desktop PC! |
#185
|
|||
|
|||
![]()
The error introduced by exponentiating from a win probability against a single opponent to generate a probability against several gets even worse if you have set your opponents on a limited range of cards
Just as a quick example. Where the opponents had been set to have handranks in the top 25% a hand which gives you a 30% chance of winning against one opponent drops to 17% against 3 when using a Monte Carlo iterator for the calculation, but is about 3% if you exponentiate. Regards Chris |
#186
|
|||
|
|||
![]()
I ported the table-lookup evaluator introduced in this thread to Java. Below are timings for the C and Java versions for it ("Loookup"); C and Java timings for HandEval, my evaluator; and C timings for Eval_N from pokersource. These results are from a Pentium 4 3.4G processor. The Java runs used Sun's JVM 6; where the -server JVM switch improved the timing it is noted. The Java source and class files are available at http://www.stevebrecher.com/misc/TestEvaluators.jar
<font class="small">Code:</font><hr /><pre>1,000,000 pre-generated random hands, same for each evaluator (but different hands [different RNGs] for C and Java): C: HandEval: 0.0310 sec., 108 CPU cycles/hand Lookup: 0.5780 sec., 1958 CPU cycles/hand Eval_N 0.0310 sec., 92 CPU cycles/hand Java: HandEval: 0.0927 sec. (single-threaded) HandEval: 0.0924 sec. (dual-threaded, with -server) Lookup: 0.6097 sec. (single-threaded) Lookup: 0.4271 sec. (dual-threaded) 52c7 enumeration: C: HandEval: 3.2810 sec., 83 CPU cycles/hand Lookup: 0.6410 sec., 16 CPU cycles/hand Eval_N: 3.2030 sec., 81 CPU cycles/hand Java: HandEval: 5.5252 sec. (single-threaded, with -server) HandEval: 6.3874 sec. (dual-threaded, with -server) Lookup: 0.8572 sec. (single-threaded) Lookup: 1.1239 sec. (dual-threaded, with -server)</pre><hr /> |
#187
|
|||
|
|||
![]()
Steve, very much appreciated. Does it work faster than your "old" one?
|
#188
|
|||
|
|||
![]()
[ QUOTE ]
Steve, very much appreciated. Does it work faster than your "old" one? [/ QUOTE ]Which? The C/Java HandEval? The C version is about 12% faster than the Dec 2006 version than is on my web site; I'll update the latter by and by. The Java version hasn't changed. Edit, P.S. The 12% is for a particular Hold 'Em Showdown scenario that I've been using for benchmarking. |
#189
|
|||
|
|||
![]()
Steve,
I wanted to send you a PM because I need to ask you something about your calculator and would rather not post here. How can I get in contact with you? |
#190
|
|||
|
|||
![]()
wow, i just spent two hours working myself through this excellent thread.
i'm working on some pokertools myself using the c# poker-eval port from keith and always thought its "fast enough". the magnitude of improvement you guys worked out here is really amazing. two thumbs up... great work |
![]() |
|
|