![]() |
|
#11
|
|||
|
|||
|
actually dual core isn't coming into play yet...it simiply allows me to be surfing the web without degrading the speed of other programs. Its still 60 million...but i am on a faster machine overall i think.
|
|
#12
|
|||
|
|||
|
Mine is 60million unordered. Keep in mind my function takes about 200MB of memory. I was trying to make the fastest algorithm my machine could support. The only faster algorithm I could think of would have taken multiple gigabytes of memory. Memory and speed are almost always tradeoffs.
Remember my dual core processor doesn't effect speed. Although I am on a faster comp i think. Anyways, I'm not writing to say that mines faster. I'm really impressed that others are coming up with similar results. I've worked for a while on various altorithms, as part of trying to apply game theory to poker. If any of u are working on commercial software, tell me about it, and if its interesting and u sound serious, I may be willing to share my techniques. P.s. I'm not a programmer. _D&L_ = Dirty and Litigious - i'm a lawyer, with a background in gametheory and economics. It's quite possible that if a professional programmer looked at my code they could find further optimizations. I programmed in VisualBasic 5.0, which might be slower than if it were converted to something like C++. -_D&L_ |
|
#13
|
|||
|
|||
|
So you are getting 60 million evaluations per second (that's 40 cpu cycles per hand) using VB?
|
|
#14
|
|||
|
|||
|
Yes Gull, thats what I said...
Look if memory was no object you could just do this: Dim HandValue(52, 52, 52, 52, 52, 52, 52) as Integer And write hand values for every combination of cards, for any order they are entered. It would take, i think, 2000 gigabytes of memory. I don't think there are computers that support that much memory. But the result would be that you would have hand evaluations that could be achieved in maybe 1 cpu cycle - that is the array would just be a pointer to a result. Obviously, not feasible given memory constraints. I can't reveal my methods, though i sense disbelief, but hopefully this extreme example shows what is possible. Indeed, this extreme example shows that if memory were not an object we could have a function that solved billions or maybe trillions of games a second. |
|
#15
|
|||
|
|||
|
Yeah, i don't think anything exists for that right now. It would take me about 3-7 days to transform my program into something that could do that...as well as adding a decent user interface to edit distributions (right now I use access).
If someone with (proven) experience in publishing share-ware like programs wanted to co-publish a program like this with me, I could probably be talked into doing it. As I said elsewhere in this thread, I'm not a programmer by trade. I have difficulty getting my program to run on other systems, don't know how to create an installation package, and i would want to protect my databases (part of my algorithm) from being hacked and used for other un-liscensed purposes, etc. |
|
#16
|
|||
|
|||
|
[ QUOTE ]
Because of that I've wrote a poker evaluator as well that is 10,000 faster than poker stove for distribution vs. distribution analysis and partial flop analysis [/ QUOTE ] I call BS. It may be faster than pokerstove in very specific situations, but for the majority of analyses I doubt there's much difference. And anything that requires a 200MB database on disk is not commercially viable except as a web application, a market which propokertools has pretty much owned. Sorry. Anyone can generate the lookup tables required for a blazing fast algorithm, so I don't know how you claim that PokerStove "cheats" by using them, when that's exactly what you use. You can only do about a billion bitwise (and, or, xor), comparison, or iteration operations a second, and without lookup tables you'll never get a reasonable speed using any algorithm. |
|
#17
|
|||
|
|||
|
Phil why are you hostile? Did I ever say the world needed a poker stove that was 10,000 times faster? In fact, you gloss over the fact I said the exact opposite, because you want to pick a fight.
I didn't design my program to be the next poker stove, i designed it for speed - to be used in high end bots that i work on, or game theory software, which is pretty much the same thing. BTW i'm not a programmer, and haven't worked on these algorithms in over a year, so i mistook how much memory they used. I said 200mb, that was an earlier version, I double checked, they use about 15MBs. My original version was 8 gigs of hd space...so i've made lots improvements over time. Anyways, do i fault poker stove for using "lookup tables" - of course not. I use them too. My point - which u missed, because u want a fight - was that if a result is not on the lookup table, the program slows considerably. From 100,000 million games a second, to 5,000. The difference being is that for my algorithm no result is "off table." -Dirty & Litigious |
|
#18
|
|||
|
|||
|
5,000 per second? On what platform? The slowest it ever goes for me about 500,000 evals per second.
- Andrew |
|
#19
|
|||
|
|||
|
I've written an algorithm that uses NO lookup tables and can do 1.5 to 2 million evaluations per second.
My look up table version runs at 14-15 million per second. I'm sorry but without seeing your code I find it extremely difficult to believe that you can do 60 million per second with VB with a 15MB look up table. Would you be willing to expand on your methods? |
|
#20
|
|||
|
|||
|
[ QUOTE ]
oh ok. In terms of merely assigning a integer value to a hand ranking i'm getting slightly over 60 million per second. I have a AMD Dual FX-60, 2 Gigs of ram. For purposes of conductnig the evaluation I assigned a static flop and hands to 10 players and fed that repeatedly to my "determine winner" function which ranks all 10 hands. The determine winner function contains no memory of the previous hand fed to it, so its like receiving a new hand, but it isolates the processing time, from the time it takes to generate new hands, etc.... [/ QUOTE ] [ QUOTE ] So, to clear things up, your program can work out the rank of a hand given to it in any order, IE given random unordered set of 7 integers it can work out 30 million of them per second? Or as a pre condition must they be ordered? [/ QUOTE ] [ QUOTE ] Mine is 60million unordered. Keep in mind my function takes about 200MB of memory. I was trying to make the fastest algorithm my machine could support. The only faster algorithm I could think of would have taken multiple gigabytes of memory. Memory and speed are almost always tradeoffs. [/ QUOTE ] [ QUOTE ] Oops, off by a factor of two. I'm closer to 30million on one core of a core duo 1.6ghz. This is JUST the compute ranking function. [/ QUOTE ] There's a HUGE difference between assigning static cards for the flop and the players, and the general purpose solution. Are you both actually comparing your algorithms using the same metric? IE: Your function is passed an unordered vector of 7 integers in the range {0..51} and returns the hand rank for the input combination. From what I just read it sounds like one of you is generating your timings with essentially 5 of the 7 cards statically pre-assigned, and the other is generating the timings with no static cards and possibly some are using a 52 element bitstring rather than 7 unordered integers (bachfan?). [ QUOTE ] I could write a function that is about 1000x faster but the memory requirements would increase 10 fold. Right now it uses about 200 Mbs of memory. [/ QUOTE ] [ QUOTE ] So you are getting 60 million evaluations per second (that's 40 cpu cycles per hand) using VB? [/ QUOTE ] [ QUOTE ] Yes Gull, thats what I said... [/ QUOTE ] A 1000 fold increase of the existing 40 cycles per hand would be 0.04 cycles per hand??? [img]/images/graemlins/confused.gif[/img] Juk [img]/images/graemlins/smile.gif[/img] PS: I'm supposed to be having a rest from poker/coding atm (until new year at least), but this thread got me interested now... [img]/images/graemlins/smirk.gif[/img] |
![]() |
|
|