Open Side Menu Go to the Top
Register
GTO+/CardRunnersEV? GTO+/CardRunnersEV?

08-05-2008 , 02:51 PM
Ok, I'm back.

Aaaaaah, nothing will make you long for sweet sweet death like a 60 year old coach yelling at you while you're doing stuff like 150 situps.
(not kidding, the guy is something like 60 years old and does all the excercises with the group. Only he does it faster and better than anyone else. After that he does another hour with the next group.)

Bad news, I can't find the **** study.
I guess I'll just write the darn algortihm, publish it and explain why I believe it to be the solution to unexploitable shoving (or at the very least extremely close to it).
We can all banter over it after that.
GTO+/CardRunnersEV? Quote
08-05-2008 , 05:37 PM
This is a fun problem

btw, the reason why I asked earlier about an unexploitable strategy being the same thing as the game theory optimal is this: I understand what was said above about the NE strategy being where neither opponent can improve their play despite knowing the other person's strategy. However, I don't care about my opponent adjusting to my play - or rather, I will assume that he in fact plays extremely +EV against me (to envision a worst case scenario for me), so that I can make adjustments from there based on the ways I think my opponent will fail to play perfectly against me.

If that's confusing (probably is), let's go back to the model I posted above:



When I say I want an unexploitable shoving strategy in BB's spot, what I want is to know what hands I can profitably shove even if I turn my hand face up and the SB plays perfectly against my shove. In algorithmic form, it would be like:

Code:
for (hand X : all hands bb can have) {
   // so here we iterate through each hand - 32o, 42o, ..., AA
   range Y = compute hands with which SB can profitably call vs X
   EV = compute EV of BB's shove against a calling range of Y
   if EV > 0, add X to the list of hands BB can profitably shove, else don't
}
I don't write pseudocode for a living so hopefully that gets the point across. In the situation I'm looking at, each hand is discrete and its EV is solely determined by its hand strength, not other hands in my range. As such, in this situation, I would never shove a -EV hand.


When talking about NE strategies, though, I do see what scylla says about the need to include -EV hands. Even if I can't explain it, all I can say is that I've experienced the same thing he has when I try not to include -EV hands. In the model above, say I give SB a calling range of "all hands" as a starting point. I then compute BB's optimal shoving range and set it. In response, I then set SB's optimal calling range of that shoving range and set it. I now have to recompute BB's optimal shoving range, and what happens (like scylla said) is that these ranges get tighter and tighter until SB's calling range is so tight that BB's optimal shoving range opens back up to almost ATC - and then we're right back where we started. The ranges don't converge. Since this is what happens when you only include +EV hands in each player's range, I can only conclude that a NE solution will have -EV hands in player's ranges.
GTO+/CardRunnersEV? Quote
08-05-2008 , 05:46 PM
Quote:
Originally Posted by goofyballer
When talking about NE strategies, though, I do see what scylla says about the need to include -EV hands. Even if I can't explain it, all I can say is that I've experienced the same thing he has when I try not to include -EV hands. In the model above, say I give SB a calling range of "all hands" as a starting point. I then compute BB's optimal shoving range and set it. In response, I then set SB's optimal calling range of that shoving range and set it. I now have to recompute BB's optimal shoving range, and what happens (like scylla said) is that these ranges get tighter and tighter until SB's calling range is so tight that BB's optimal shoving range opens back up to almost ATC - and then we're right back where we started. The ranges don't converge. Since this is what happens when you only include +EV hands in each player's range, I can only conclude that a NE solution will have -EV hands in player's ranges.
Exactly what I did and exactly my reasoning.
Nice job!
I have discusssed this with another user (I won't give his name but the initials are MvdG, you know who you are!) who has come up with a solution that is very close to the desired one.
Here's what you do:
Assign villain a random range and make a graph of hero's range, varying his range from top 0 to top 100. Determine the optimal performance and assign that range to hero. Now let villain call with all hands, determine which ones are +EV and let him only call with those. And back to hero...

At a certain point you reach an equilibrium which, at the very least, is very close to what I believe to be the unexploitable solution. It should also be pretty indisputable that this is the solution with the highest possible EV where villain can no longer adapt and that in this setup -EV hands must be included.

The quality of the result will increase if you use a suitable custom range that favours hands with showdown value.

I've given this a lot of thought and have come up with an algorithm that I suspect will be faster, more accurate (when I say more accurate I mean that it's certain to include all the +EV hands) and will also work postflop. Postflop there will however be a slight challenge of communicating the results to the user (I can't use the standard preflop matrix because it doesn't include flush possibilities with the given board).

It's all slightly tricky, but not overly so. I should be able to do it within a reasonable timeframe.

Last edited by scylla; 08-05-2008 at 05:52 PM.
GTO+/CardRunnersEV? Quote
08-05-2008 , 07:02 PM
Quote:
Originally Posted by goofyballer
When I say I want an unexploitable shoving strategy in BB's spot, what I want is to know what hands I can profitably shove even if I turn my hand face up and the SB plays perfectly against my shove.
You talk about confusion due to semantics in your other post and then you go defining unexploitable as something as trivial as this. David only proposed this methodology because he didn't know how to it the "right" way. There's enough ambiguity surrounding the terms, let's not get further off track. (btw, see the SSF discussion between resident game theorist JaredL and MOP authors Bill and Jerr for clarity on the term "optimal")

Quote:
Originally Posted by scylla
Quote:
Originally Posted by goofyballer
When talking about NE strategies, though, I do see what scylla says about the need to include -EV hands. Even if I can't explain it, all I can say is that I've experienced the same thing he has when I try not to include -EV hands. In the model above, say I give SB a calling range of "all hands" as a starting point. I then compute BB's optimal shoving range and set it. In response, I then set SB's optimal calling range of that shoving range and set it. I now have to recompute BB's optimal shoving range, and what happens (like scylla said) is that these ranges get tighter and tighter until SB's calling range is so tight that BB's optimal shoving range opens back up to almost ATC - and then we're right back where we started. The ranges don't converge.
Exactly what I did and exactly my reasoning.
Well this isn't supposed to "work", tho sometimes it might. Jerr addressed this in the archives...

Quote:
Just iterating best-responses won't necessarily converge. Like just consider the clairvoyant game. If you twiddle the clairvoyant guy's bluffing frequency, you just oscillate around between the strategies. But you can use fictitious play (as we briefly discuss in our book). Suppose you have X and Y candidate strategies.

Hold X fixed. Calculate Y', a nemesis of X. Make a new Y as a linear combination of Y' and Y (mix them with a coefficient sequence that converges on 0 but whose series diverges, like the harmonic). Then hold the new Y constant and calculate X', a nemesis of the new Y. Mix that with the old X. Iterating this is proven to converge, although it doesn't always converge very fast. For like jam-or-fold, it converges pretty fast.

To figure out when done, just choose a tolerance for error. When the value of a candidate vs its nemesis is close enough to the value of the candidate vs the other candidate, then you're done.

jerrod
Simplified versions of this approach can be seen here and here.

Quote:
Originally Posted by scylla
I have discusssed this with another user (I won't give his name but the initials are MvdG, you know who you are!) who has come up with a solution that is very close to the desired one.
If you're referring to who I think you are, he seems like a pretty bright kid and all, but he's relatively new to this stuff and still has some misconceptions. I don't see why you wouldn't want to get the opinion of a mathematician like pzhon, especially being that he's ~associated w/ Stox. I'm pretty sure he no longer posts here so don't expect him to drop in, you'll prob have to hit him up. Another guy you could hit up is Tysen Streib, who posts here under the handle "trojanrabbit". He's done a lot of work on stuff like this (including limited pof action) and (in at least some cases) has worked around the need for fixed rankings (others have accomplished this as well).

W/ all that said, don't get me wrong, you know I love your work.<3 And like stevi, I don't need perfection to be happy. However I would like to get as close as is reasonably possible.
GTO+/CardRunnersEV? Quote
08-05-2008 , 07:10 PM
Quote:
Originally Posted by curious123
You talk about confusion due to semantics in your other post and then you go defining unexploitable as something as trivial as this. David only proposed this methodology because he didn't know how to it the "right" way. There's enough ambiguity surrounding the terms, let's not get further off track. (btw, see the SSF discussion between resident game theorist JaredL and MOP authors Bill and Jerr for clarity on the term "optimal")
Sorry if I get some definitions wrong, I certainly am not an expert in any of this stuff.

Anyway, scylla, would something like what I described in the first half of my post be plausible? It would be a lot easier to implement than the NE stuff, and would work well for me in the meantime I think.
GTO+/CardRunnersEV? Quote
08-05-2008 , 07:15 PM
Quote:
Originally Posted by curious123
If you're referring to who I think you are, he seems like a pretty bright kid and all, but he's relatively new to this stuff and still has some misconceptions. I don't see why you wouldn't want to get the opinion of a mathematician like pzhon
And what do you think I am? A gardener? Do you think I lucked into the current state of the program????
I'm sorry, but please consider that I just might know what I'm doing.

Quote:
Originally Posted by curious123
, especially being that he's ~associated w/ Stox. I'm pretty sure he no longer posts here so don't expect him to drop in, you'll prob have to hit him up. Another guy you could hit up is Tysen Streib, who posts here under the handle "trojanrabbit". He's done a lot of work on stuff like this (including limited pof action) and (in at least some cases) has worked around the need for fixed rankings (others have accomplished this as well).
I'm always willing to consider the possibility of me being wrong. And maybe you're right. However for the time being I will pursue the path that I had in mind originally. If improvements can be found or jusitified critisizms are made I shoulnd't have too much trouble changing the algorithm. The main challenge right now is to set up an algorithm that can find the solution. Changing it afterwards is only a minor inconvenience.

Last edited by scylla; 08-05-2008 at 07:26 PM.
GTO+/CardRunnersEV? Quote
08-05-2008 , 07:24 PM
Quote:
Originally Posted by goofyballer
Sorry if I get some definitions wrong, I certainly am not an expert in any of this stuff.

Anyway, scylla, would something like what I described in the first half of my post be plausible? It would be a lot easier to implement than the NE stuff, and would work well for me in the meantime I think.
Are you referring to villain calling an all in with a perfect range?

I think the fastest way to accomplish that would be to make him call all hands and after that assign his calling range as those hands.
I can see that it would be convenient if the program could automate that for you and I'll give it some thought if I can find an elegant way to add that.
However, I think it would only work for all ins.
GTO+/CardRunnersEV? Quote
08-05-2008 , 07:38 PM
Quote:
Originally Posted by scylla
Are you referring to villain calling an all in with a perfect range?

I think the fastest way to accomplish that would be to make him call all hands and after that assign his calling range as those hands.
I can see that it would be convenient if the program could automate that for you and I'll give it some thought if I can find an elegant way to add that.
However, I think it would only work for all ins.
Actually yeah, I suppose just computing his most +EV range against my range as a whole would be more useful than computing his most +EV range against each individual hand in my range. Not sure why I didn't realize that before.

What you mention would be super convenient - it wouldn't even have to work for all-ins only, I think. Like, when you do an EV run and hover the mouse over the grid, you get the picture of all hands and whether they're + or -EV - an option that would insta-remove all the -EV hands from the person's range in that spot would be awesome.
GTO+/CardRunnersEV? Quote
08-05-2008 , 07:41 PM
Quote:
Originally Posted by goofyballer
Actually yeah, I suppose just computing his most +EV range against my range as a whole would be more useful than computing his most +EV range against each individual hand in my range. Not sure why I didn't realize that before.

What you mention would be super convenient - it wouldn't even have to work for all-ins only, I think. Like, when you do an EV run and hover the mouse over the grid, you get the picture of all hands and whether they're + or -EV - an option that would insta-remove all the -EV hands from the person's range in that spot would be awesome.
I thought about this a bit and a very quick and intuitive way would be to display negatively performing conditions in red after an EV calc.

Preflop removing negatively performing hands should be doable, postflop it's a lot more tricky. I could of course do something like that for negatively performing conditions postflop.

Last edited by scylla; 08-05-2008 at 07:47 PM.
GTO+/CardRunnersEV? Quote
08-05-2008 , 07:52 PM
Quote:
Originally Posted by scylla
And what do you think I am? A gardener? Do you think I lucked into the current state of the program????
All I knew is that you were a very bright programmer, beyond that I had no idea of your credentials.

Quote:
I'm sorry, but please consider that I just might know what I'm doing.
I've been making use of your program from the get-go, wagering countless dollars on the results, and encouraging everyone I know to do the same. Please consider that I considered that you might know what you're doing.
GTO+/CardRunnersEV? Quote
08-05-2008 , 07:56 PM
Ok, let's speak of it no more.
I'm about to go to bed and as is traditional for me, I'm ever so slightly drunk.

As far as my credentials, I have graduated at the University of Amsterdam in computational physics and am currently a pro poker player.
I could give a link to my graduation paper but I prefer to remain anonymous (Brag: It scored 9 out of 10, which is pretty much the highest score they give).

StoxEv is kind of a hobby of mine for when
- the tables are bad
- I'm bored
- running bad

When there's a lot of changes to StoxEv ... poker ain't going well.
For the past two weeks everything's been going pretty well.
When I got the inspiration to write the math engine ... well, you get the picture.

Last edited by scylla; 08-05-2008 at 08:02 PM.
GTO+/CardRunnersEV? Quote
08-05-2008 , 07:59 PM
Quote:
Originally Posted by scylla
Are you referring to villain calling an all in with a perfect range?

I think the fastest way to accomplish that would be to make him call all hands and after that assign his calling range as those hands.
I can see that it would be convenient if the program could automate that for you and I'll give it some thought if I can find an elegant way to add that.
However, I think it would only work for all ins.
Man, stuff always seems like it makes sense to me and then I go try out what I thought would work in the program and I'm like "wtf gah I was wrong!"

Okay, so back to the model I've posted entirely too many times (my fault since I can never describe myself w/o being confused):



I'm pretty sure that what I need to do here is change BB's "all hands" to "top var1 %", and then have a new option for SB saying "call all +EV hands" or something. That way, when I graph var #1, the graph is telling me how each range performs when villain plays perfectly against that range. So the pseudocode would be like

Code:
for (var1 = 0; var1 < 100; var1++) {
   hero.range = top var1% of hands
   range Y = Do EV run for all SB's hands against hero.range
   SB.range = all hands from Y where EV > 0
   recalculate hero's EV against SB's new calling range
   graph point (var1, hero's EV)
}


Right now I'm graphing two variables - var1 as described above, and var2 which defines SB's calling range. This looks like it's gonna take about 40 mins though, whereas since most EV runs are pretty much instantaneous making a graph of 100 points where SB's range is guaranteed to be perfect would be a lot faster.
GTO+/CardRunnersEV? Quote
08-05-2008 , 08:11 PM
Quote:
Originally Posted by goofyballer
Man, stuff always seems like it makes sense to me and then I go try out what I thought would work in the program and I'm like "wtf gah I was wrong!"
Lol, I know the feeling.

Quote:
Originally Posted by goofyballer
Right now I'm graphing two variables - var1 as described above, and var2 which defines SB's calling range. This looks like it's gonna take about 40 mins though, whereas since most EV runs are pretty much instantaneous making a graph of 100 points where SB's range is guaranteed to be perfect would be a lot faster.
Problem with SB only calling his +EV hands and folding the rest is that the program first needs to know which hands those are. So that would require two runs somehow. I think a more elegant solution needs to be found.

Are you trying out the algorithm I was talking about earlier?
In that case,
1) give SB a random range
2) vary bb's range with a variable and make a graph.
3) assign bb with the best peforming range
4) let sb call all hands against this range
5) now remove all -EV hands from this range
6) go to 2 until you reach an equilibrium

As for selecting multiple starting hands preflop (just in case you're not aware of the new feature) just press the mouse and move it over the holecards you want to select/deselect. Saves a lot of clicking.
GTO+/CardRunnersEV? Quote
08-05-2008 , 08:13 PM
Haha, well my graph described above is 30% done so I'll wait for that to finish. After that I'll give what you mention above a shot. Sounds like that should work.

I discovered the click+drag thing last night and was like WHOAH THIS IS AWESOME HOW DID I NEVER FIGURE THIS OUT!!1
GTO+/CardRunnersEV? Quote
08-05-2008 , 08:31 PM
Quote:
Originally Posted by scylla
As for selecting multiple starting hands preflop (just in case you're not aware of the new feature) just press the mouse and move it over the holecards you want to select/deselect. Saves a lot of clicking.
Been loving this, btw.
GTO+/CardRunnersEV? Quote
08-05-2008 , 08:33 PM
Quote:
Originally Posted by goofyballer
I discovered the click+drag thing last night and was like WHOAH THIS IS AWESOME HOW DID I NEVER FIGURE THIS OUT!!1
Quote:
Originally Posted by curious123
Been loving this, btw.
Yeah, it was suggested to me by a user. Still kicking myself I never thought of it. All that clicking was driving me nuts.
GTO+/CardRunnersEV? Quote
08-13-2008 , 06:47 AM
Hi guys,

I'm hereby releasing version 2.0.6 of StoxEV.
Go to www.stoxev.com for the latest version.

I would appreciate if everyone would have a good look at the new kickers and check them for bugs.
I haven't been able to find any, but it usually helps a lot if there's a small army of guys looking for such bugs.


New in version 2.0.6

Kickers (long overdue and I had a sudden flash of inspiration)
- For several handvalues specific kickers (top kicker, 2nd kicker, 3rd kicker and 4th kicker) can now be defined. Also a kicker has been added for open trips. Kickers go until 4 because in NL I can't see any situations where anything below that is very relevant. Example of a kicker: On a A74 board Q7 is "middle pair with 2nd kicker".

- Flush strength can now be defined as nut flush through 4th nut flush. This is in particular intended for use on unknown boards with one card flushes.

- Flush draw strength can now also be defined until 4th nut flushdraw. Again, this is made particularly with unknown boards in mind.
Important: If you say "at least 2nd nut flushdraw using 1 holecard" and you hold a 2 holecard flushdraw then this is rejected. This is because on unknown board 1 card flushdraws and 2 card flushdraws are clearly different.

Automatic removal of negatively performing holecards
If you hover over an action or condition after an EV run and you wish to remove negatively performing holecards, then this can now be done quickly by pressing Alt+D. In case of postflop the removal will be performed with a skip condition

Negatively performing actions and conditions are now displayed in red after an EV calc

Software will check online for newer version
From now on at startup StoxEv will check for more recent versions online and inform you if a new version has been posted. You can block this with your firewall if you so wish, it will not impact the program in any way.

Cheers,

Scylla
GTO+/CardRunnersEV? Quote
08-13-2008 , 08:56 AM
Great additions!
GTO+/CardRunnersEV? Quote
08-13-2008 , 08:58 AM
Thanks.

Unexploitable shoving will take a bit longer because of this.

Kickers are a pain in the *** to add to the interface and for some reason I suddenly had inspiration to add them.
GTO+/CardRunnersEV? Quote
08-13-2008 , 11:33 AM
Fantastic software scylla.

After downloading the latest version, when i run stoxev206.msi it stalls with this error message

'The cabinet file disk1.cab required for this installation is corrupt.'

Am i doing something wrong? Thanks
GTO+/CardRunnersEV? Quote
08-13-2008 , 11:34 AM
Quote:
Originally Posted by tagWAG
Fantastic software scylla.

After downloading the latest version, when i run stoxev206.msi it stalls with this error message

'The cabinet file disk1.cab required for this installation is corrupt.'

Am i doing something wrong? Thanks
You need to download to disk before running the file.
GTO+/CardRunnersEV? Quote
08-13-2008 , 11:41 AM
Quote:
Originally Posted by scylla
You need to download to disk before running the file.
I did save it to my desktop first... Do i need to save it to any particular location? After installation fails with that message it says it's error code 2350.
GTO+/CardRunnersEV? Quote
08-13-2008 , 12:46 PM
Quote:
Originally Posted by tagWAG
I did save it to my desktop first... Do i need to save it to any particular location? After installation fails with that message it says it's error code 2350.
ok worked it out. for some reason it was only downloading about half the file, stoxev206.msi came in at 2.5 MB which is too small, i can see it should be about 5 MB.
GTO+/CardRunnersEV? Quote
08-13-2008 , 12:48 PM
Quote:
Originally Posted by tagWAG
ok worked it out. for some reason it was only downloading about half the file, stoxev206.msi came in at 2.5 MB which is too small, i can see it should be about 5 MB.
Ok, thanks for that piece of info.
Next time someone has this error I'll know what's causing it (I experienced it myself once or twice and could never figure it out).
GTO+/CardRunnersEV? Quote
08-13-2008 , 05:15 PM
Quote:
Originally Posted by scylla
Automatic removal of negatively performing holecards
If you hover over an action or condition after an EV run and you wish to remove negatively performing holecards, then this can now be done quickly by pressing Alt+D. In case of postflop the removal will be performed with a skip condition
GTO+/CardRunnersEV? Quote

      
m